汇编语言实现编制程序完成将一个16位无符号二进制数转换成为用8421BCD码表示的5位十进制数。转换算法可以是:用二进制数除以10000,商为 “万位”,再用余数除以1000,得到“千位”,依次用余数除以100、10和1,得到 “百位”“十位”和“个位”。
时间: 2024-05-03 16:19:31 浏览: 96
汇编语言 实现二进制到进制的转换
这是一道经典的汇编语言编程题目,下面是一份示例代码,实现将一个16位无符号二进制数转换成为用8421BCD码表示的5位十进制数:
```assembly
; 16位无符号二进制数转换为5位十进制数
; 输入:AX = 16位二进制数
; 输出:CX = 5位十进制数(8421BCD码表示)
ORG 100h
start:
mov bx, 10000 ; bx = 10000
xor cx, cx ; cx = 0
loop1:
cmp bx, 0 ; 如果bx为0,转换结束
je done
mov dx, 0 ; dx = 0
div bx ; AX / bx,商在AL,余数在AH
mov bl, al ; bl = 商(即当前位的值)
mov al, ah ; al = 余数(即下一次计算的被除数)
mov ah, 0 ; ah清零
; 将当前位的值映射为8421BCD码
sub bl, 10 ; bl分别为0~9时,对应的8421BCD码为0~9
jnc skip ; 如果bl >= 10,跳过
add bl, 6 ; bl为10~15时,对应的8421BCD码为16~21
skip:
shl cl, 4 ; 将CX左移4位,为新的一位腾出位置
or cl, bl ; 将当前位的8421BCD码加入CX
mov bl, 1000 ; bl = 1000, 100, 10, 1(下一次计算的除数)
jmp loop1
done:
; 输出结果
mov ah, 9 ; 用int 21h中的9号功能输出字符串
mov dx, msg ; 输出提示信息
int 21h
mov ah, 2 ; 用int 21h中的2号功能输出十进制数
mov dl, cl ; 输出转换结果
add dl, 30h ; 将结果转换成ASCII码
int 21h
; 退出程序
mov ah, 4ch
int 21h
msg db 'Please input a 16-bit binary number (in hex): ', 0
END start
```
这段代码首先将除数初始化为10000,然后循环进行除法运算,每次将商(即当前位的值)映射为8421BCD码,并将其加入最终结果中。最后,使用int 21h中的9号功能输出提示信息,使用2号功能输出转换结果,然后退出程序。
阅读全文