汇编语言,以10进制的方式显示数字

start:
    mov ax,200
    mov dx,0
    mov cx,0
    mov bx,0ah
    test ax , 8000h
    jz p
    neg ax
    mov bx,ax
    mov dl,2dh
    mov ah,2
    int 21h
    mov dx,0
    mov ax,bx
    mov bx,0ah
p:        
    div bx
    inc cl
    add dx,30h
    push dx
    mov dx,0
    cmp ax,0ah
    jnl p
    mov dl,al
    add dl,30h
    mov ah,2h
    int 21h
p2:    pop dx
    mov ah,2
    int 21h
    sub cl,1
    cmp cl,0
    jnz p2
    
    mov ah,4ch
    int 21h

转载于:https://www.cnblogs.com/da-peng/p/5540200.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现方式很多,下面提供一种基于x86架构的汇编实现方式。 假设我们要将以下ASCII码数字串转换为十六进制字符串: ``` input db '12345678' ``` 首先需要准备一个输出缓存区,用于存储转换后的十六进制字符串。可以定义如下变量: ``` output db 8 dup (?) ; 存储转换后的结果 ``` 接下来就是核心的转换代码。下面是一个实现思路: 1. 用 xlat 指令读取 input 中的一个字节。 2. 将读取的字节的高四位右移 4 位,得到对应的十六进制字符。 3. 将读取的字节的低四位与 0x0F 取与运算,得到对应的十六进制字符。 4. 把上述两个十六进制字符分别存储到 output 中。 5. 重复上述过程,直到 input 的末尾。 具体的汇编代码如下: ``` mov si, offset input ; 指向input mov di, offset output ; 指向output mov cx, 8 ;共8个字节 L1: mov al, [si] ; AL = input[i] mov bh, al ; bh暂存高四位 shr al, 4 ; al = input[i] >> 4 call byte [hex_char] ; 转换成十六进制字符 mov [di], al ; 存储到output inc di ; output++ mov al, bh ; al恢复原始值 and al, 0x0F ; al = input[i] & 0x0F call byte [hex_char] ; 转换成十六进制字符 mov [di], al ; 存储到output inc di ; output++ inc si ; input++ loop L1 ; 循环8次 hexit: ; 将十进制数 0-15 转换成十六进制字符 '0'-'F' push ax ; 保存参数 cmp al, 10 jl .less_than_10 ; ax < 10 add al, 'A' - 10 ; ax >= 10, 转换成 'A'-'F' jmp .store_char .less_than_10: add al, '0' ; 转换成 '0'-'9' .store_char: mov ah, 0 ; 存储到 al 指向的地址 stosb pop ax ; 恢复参数 ret hex_char db 0 ; 为了让 call 指令能够正确调用 hexit ``` 最后,就可以查看存储在 output 中的十六进制字符串了: ``` mov dx, offset output mov ah, 9 int 21h ``` 以上代码中使用了 `call byte [hex_char]` 调用了一个子函数 hexit,用于将十进制数转换成十六进制字符。为了让 call 指令能够正确调用 hexit 子函数,需要定义一个跳转表 hex_char,并在程序开始处设置正确的跳转目标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值