习题5.12 编写1个子程序把一个32位二进制数用8位十六进制形式在屏幕上显示出来,并
时间: 2024-02-25 13:59:12 浏览: 94
对一组无符号数据排序,并设计出显示十六进制数的子程序,调用该子程序将排序的结果显示在显示器上。
3星 · 编辑精心推荐
返回一个字符串表示该十六进制数。以下是代码实现:
```assembly
display_hex:
mov ebx, 0 ; 存储十六进制数
mov ecx, 8 ; 循环计数器,8 位一组
.loop:
rol edx, 4 ; 旋转 edx 的值,以便取出下一个 4 位的二进制数
mov bl, dl ; 将下一个 4 位的二进制数存储到 bl 中
and bl, 0Fh ; 取出 bl 中的低 4 位
cmp bl, 9 ; 判断该位是否为数字
jle .digit ; 若是数字,跳转到 .digit 标签
add bl, 7 ; 若不是数字,加上 7,将其转换成 A~F 的 ASCII 码
.digit:
add bl, '0' ; 将数字转换成对应的 ASCII 码
mov [esi], bl ; 将 ASCII 码存储到字符串中
inc esi ; 将字符串指针加 1
dec ecx ; 循环计数器减 1
jnz .loop ; 如果循环计数器不为 0,继续循环
mov byte [esi], 0 ; 在字符串末尾加上结束符
mov eax, ebx ; 返回十六进制数
ret
```
该子程序使用 `edx` 存储一个 32 位的二进制数,将其转换成 8 位一组的十六进制数,并将其存储到 `ebx` 中。然后将每个十六进制数字转换成对应的 ASCII 码,并存储到一个字符串中。最后返回十六进制数并结束程序。你可以在其他程序中调用该子程序来将一个 32 位的二进制数转换成十六进制数并显示在屏幕上。
阅读全文