无符号10进制输入输出

本文详细介绍了在汇编语言中实现无符号十进制整数的输入输出方法,包括读取和显示8位及16位无符号整数的具体过程,通过位移操作实现乘法,并使用中断调用进行字符输入和ASCII码转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值