bcd 数转 10 进制 汇编程序
时间: 2023-07-28 10:53:04 浏览: 80
下面是一个汇编程序,用于将BCD码转换为十进制数:
```
org 100h ; 程序起始地址
section .data ; 数据段
bcd dw 0x1234 ; BCD码
section .text ; 代码段
global _start ; 入口函数
_start:
mov ax, [bcd] ; 将BCD码读入寄存器
mov bx, 1 ; 初始化权重为1
mov cx, 0 ; 初始化十进制数为0
mov dx, 0 ; 初始化位数为0
loop:
mov si, dx ; 将位数保存到si寄存器
and si, 3 ; 将位数对4取模,得到当前位的BCD码
shr ax, cl ; 将BCD码右移,使当前位成为最低位
and ax, 0Fh ; 将最低位与0Fh相与,得到当前位的BCD码
mov di, ax ; 将当前位的BCD码保存到di寄存器
add cx, di ; 将当前位的十进制数加到总数中
mov ax, bx ; 将权重保存到ax寄存器
mul di ; 将当前位的BCD码乘以权重
mov bx, ax ; 将乘积保存为新的权重
add dx, 1 ; 将位数加1
cmp dx, 4 ; 如果位数等于4,则退出循环
jne loop ; 否则继续循环
; 此时,cx寄存器中保存的就是转换后的十进制数
; 可以在这里进行输出或其他操作
mov ax, 4C00h ; 调用DOS退出程序
int 21h
```
在上面的程序中,我们使用了循环来处理BCD码的每一位。在每次循环中,我们将BCD码右移,使当前位成为最低位,然后将最低位与0Fh相与,得到当前位的BCD码。接着,我们将当前位的BCD码转换为十进制数,并加到总数中。同时,我们将当前位的BCD码乘以相应的权重,保存为新的权重。最后,我们将位数加1,如果位数等于4,则退出循环。
在程序结束时,cx寄存器中保存的就是转换后的十进制数,可以在这里进行输出或其他操作。
阅读全文