汇编:二进制数据输入输出
8位二进制输出dispbb
include io.inc
.model small
.stack
.data
.code
.startup
;dispbb 显示8位二进制数据 入口:AL=8位数据
mov al,4cH
call dispbb
.exit
end
实现dispbb
;dispbb 显示8位二进制数据 入口:AL=8位数据
调用功能号输出的时候会影响寄存器ax
;include io.inc
.model small
.stack
.data
.code
.startup
;dispbb 显示8位二进制数据 入口:AL=8位数据
mov al,4cH
call dispbb
.exit
dispbb proc
;逻辑左移指令 SHL reg/mem,1/CL ;逻辑左移:最低位补0,最高位进入CF
;带进位加法指令 ADC
push cx
push dx
push ax
mov cx,8
again:pop ax
shl al,1
push ax
mov dl,0
adc dl,30h
mov ah,2
int 21h
loop again
pop ax
pop dx
pop cx
ret
dispbb endp
end
实现二
dispbb proc
push ax
push cx
push dx
mov cx,8
;不带进位循环左移指令 ROL
again: rol al,1
push ax
and al,01
add al,30h
mov dl,al
mov ah,02
int 21h
pop ax
loop again
pop dx
pop cx
pop ax
ret
dispbb endp
输入8位二进制数据readbb
include io.inc
.model small
.stack
.data
.code
.startup
;readbb 输入8位二进制数据 出口:AL=8位数据
call readbb
.exit
end
实现readbb
;include io.inc
.model small
.stack
.data
.code
.startup
;readbb 输入8位二进制数据 出口:AL=8位数据
call readbb
.exit
readbb proc
push bx
push cx
rb1:xor bx,bx ;BX用于存放二进制结果
mov cx,8 ;限制输入字符的个数
rb2:mov ah,1
int 21h
cmp al,'0'
jb err ;小于0输入错误
cmp al,'1'
ja err ;大于1输入错误
sub al,'0'
shl bl,1
add bl,al
loop rb2
mov al,bl
pop cx
pop bx
ret
err:push ds ;保护DS
mov ax,cs ;因信息保存在代码段,所以需要设置DS=CS
mov ds,ax
lea dx,errmsg
mov ah,9
int 21h
pop ds
jmp rb1
errmsg db 0dh,0ah,'Input error, enter again: $'
readbb endp
end
实现二
readbb proc
push bx
push cx
push dx
xor bx,bx
mov cx,8
;06H 功能直接控制台I/O 入口参数DL=0FFH(输入请求) DL=字符(输出请求)
;出口参数 AL=输入的字符 其中16进制数字以字母开头要以0开头
rdw1:mov ah,06h
mov dl,0ffh
int 21h
jz rdw1
cmp al,30h
jb rdw1
cmp al,31h
ja rdw1
mov ah,06
mov dl,al
int 21h
sub al,30h
shl bl,1
or bl,al
loop rdw1
mov ax,bx
pop dx
pop cx
pop bx
ret
readbb endp
16位二进制数据输入readbw
;readbw 输入16位二进制数据 出口:AX=16位数据
include io.inc
.model small
.stack
.data
.code
.startup
;readbw 输入16位二进制数据 出口:AX=16位数据
call readbb
int 3h ;debug调试用查看ax寄存器的数据
.exit
end
实现readbw
;include io.inc
.model small
.stack
.data
.code
.startup
;readbw 输入16位二进制数据 出口:AX=16位数据
call readbb
int 3h
.exit
readbb proc
push bx
push cx
push dx
xor bx,bx
mov cx,16
;06H 功能直接控制台I/O 入口参数DL=0FFH(输入请求) DL=字符(输出请求)
;出口参数 AL=输入的字符 其中16进制数字以字母开头要以0开头
rdw1:mov ah,06h
mov dl,0ffh
int 21h
jz rdw1
cmp al,30h
jb rdw1
cmp al,31h
ja rdw1
mov ah,06
mov dl,al
int 21h
sub al,30h
shl bx,1
or bl,al
loop rdw1
mov ax,bx
pop dx
pop cx
pop bx
ret
readbb endp
end
16位二进制输出dispbw
dispbw 显示16位二进制数据 入口:AX=16位数据
include io.inc
.model small
.stack
.data
.code
.startup
;readbw 输入16位二进制数据 出口:AX=16位数据
mov ax,1234h
call dispbw
.exit
end
实现
.model small
.stack
.data
.code
.startup
;readbw 输入16位二进制数据 出口:AX=16位数据
mov ax,1234h
call dispbw
.exit
dispbw proc
push ax
push dx
push cx
mov cx,16
again:rol ax,1
push ax
and al,01h
add al,30h
mov ah,02h
mov dl,al
int 21h
pop ax
loop again
pop cx
pop dx
pop ax
ret
dispbw endp
end