无符号10进制输入输出
readuib 输入无符号十进制整数(≤255)
include io.inc
.model small
.stack
.data
.code
.startup
;readuib 输入无符号十进制整数(≤255) 出口:AL=8位数据
call readuib
.exit
end
实现readuib
.model small
.stack
.data
.code
.startup
;readuib 输入无符号十进制整数(≤255) 出口:AL=8位数据
call readuib
int 3
.exit
readuib proc
push bx
xor bx,bx
r1: mov ah,1
int 21h
cmp al,'0'
jb r2
cmp al,'9'
ja r2
sub al,30h
; bx*10 =bx*8+bx*2 可以通过位移操作实现
shl bl,1
mov bh,bl
shl bl,1
shl bl,1
add bl,bh
add bl,al
jmp r1
r2: mov al,bl
pop bx
ret
readuib endp
end
dispuib 显示无符号十进制数据(≤255)
dispuib 显示无符号十进制数据 入口:AL=8位数据
include io.inc
.model small
.stack
.data
.code
.startup
;dispuib 显示无符号十进制数据 入口:AL=8位数据
mov al,0ffh
call dispuib
.exit
end
实现dispuib
.model small
.stack
.data
.code
.startup
;dispuib 显示无符号十进制数据 入口:AL=8位数据
mov al,0ffh
call dispuib
.exit
dispuib proc
push ax
push bx
push dx
test al,al ;判断数据是零、正数或负数
jnz dsuib1
mov dl,'0' ;是零,显示“0”后退出
mov ah,2
int 21h
jmp dsuib4
dsuib1:mov bx,10
push bx ;10压入堆栈,作为退出标志
dsuib2:cmp al,0 ;数据(商)为零,转向显示
jz dsuib3
xor ah,ah ;扩展被除数为Ah.Al 8位除数
div bl
add ah,30h
mov dl,ah
xor dh,dh
push dx ;数据各位先低位后高位压入堆栈
jmp dsuib2
dsuib3: pop dx ;数据各位先高位后低位弹出堆栈
cmp dl,10 ;是结束标志10,则退出
je dsuib4
mov ah,2
int 21h
jmp dsuib3
dsuib4: pop dx ;退出
pop bx
pop ax
ret
dispuib endp
end
readuiw 输入无符号十进制整数(≤65535)
readuiw 输入无符号十进制整数(≤65535)出口:AX=16位数
include io.inc
.model small
.stack
.data
.code
.startup
;readuiw 输入无符号十进制整数(≤65535)出口:AX=16位数
call readuiw
int 3
.exit
end
实现readuiw
.model small
.stack
.data
.code
.startup
;readuiw 输入无符号十进制整数(≤65535)出口:AX=16位数
call readuiw
int 3
.exit
readuiw proc
push bx
push dx
xor bx,bx
r1: mov ah,1
int 21h
cmp al,'0'
jb r2
cmp al,'9'
ja r2
sub al,30h
; bx*10 =bx*8+bx*2 可以通过位移操作实现
shl bx,1
mov dx,bx
shl bx,1
shl bx,1
add bx,dx
xor ah,ah
add bx,ax
jmp r1
r2: mov ax,bx
pop dx
pop bx
ret
readuiw endp
end
dispuiw 显示无符号十进制数据 (≤65535)
dispuiw 显示无符号十进制数据 入口:AX=16位数据
include io.inc
.model small
.stack
.data
.code
.startup
;dispuiw 显示无符号十进制数据 入口:AX=16位数据
mov ax,0ffffh
call dispuiw
.exit
实现dispuiw
.model small
.stack
.data
.code
.startup
;dispuiw 显示无符号十进制数据 入口:AX=16位数据
mov ax,0ffffh
call dispuiw
.exit
dispuiw proc
push ax
push bx
push dx
test al,al ;判断数据是零、正数或负数
jnz dsuiw1
mov dl,'0' ;是零,显示“0”后退出
mov ah,2
int 21h
jmp dsuiw4
dsuiw1:mov bx,10
push bx ;10压入堆栈,作为退出标志
dsuiw2:cmp ax,0 ;数据(商)为零,转向显示
jz dsuiw3
xor dx,dx ;扩展被除数DX.AX 16位除数
div bx
add dl,30h ;余数(0~9)转换为ASCII码
push dx ;数据各位先低位后高位压入堆栈
jmp dsuiw2
dsuiw3: pop dx ;数据各位先高位后低位弹出堆栈
cmp dl,10 ;是结束标志10,则退出
je dsuiw4
mov ah,2
int 21h
jmp dsuiw3
dsuiw4: pop dx ;退出
pop bx
pop ax
ret
dispuiw endp
end