汇编:二进制数据输入输出

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值