编制一个子程序把一个16位二进制数用十六进制形式在屏幕上显示出来,采用ax寄存器传递这个16位二进制数
时间: 2023-06-11 09:09:33 浏览: 499
以下是使用汇编语言编写的子程序,可以将16位二进制数转换为16进制形式并显示在屏幕上。其中,输入的16位二进制数存储在ax寄存器中。
```
display_hex:
push ax ; 保存寄存器ax的值
push bx ; 保存寄存器bx的值
push cx ; 保存寄存器cx的值
push dx ; 保存寄存器dx的值
mov bx, 0 ; bx用于计数,初始化为0
mov cx, 4 ; cx用于循环,初始化为4,因为一个16位二进制数转换为4位16进制数
mov dx, 0 ; dx用于存储16进制数的值,初始化为0
loop:
rol ax, 4 ; 将ax寄存器向左循环移位4位,以便取出4位二进制数
mov bl, al ; bl用于存储取出的4位二进制数
and bl, 0FH ; 取出bl的低4位
cmp bl, 9 ; 判断bl是否大于9
jbe numeric ; 如果不大于9,跳转到numeric标签
add bl, 7 ; 如果大于9,将bl加上7,转换成A-F的ASCII码值
numeric:
add bl, 30H ; 将bl转换成ASCII码值
shl dl, 4 ; 将dl向左移动4位,以便存储下一个16进制数
or dl, bl ; 将bl的值存储到dl中
inc bx ; bx加1
loop loop ; 循环4次
mov ah, 02H ; 设置显示函数号为2
mov dl, dh ; 将高4位16进制数存储到dl中
int 21H ; 调用21H中断显示dl中的字符
mov dl, dh ; 将低4位16进制数存储到dl中
int 21H ; 调用21H中断显示dl中的字符
pop dx ; 恢复寄存器dx的值
pop cx ; 恢复寄存器cx的值
pop bx ; 恢复寄存器bx的值
pop ax ; 恢复寄存器ax的值
ret ; 返回
```
使用方法如下:
```
mov ax, 1010101010101010B ; 将16位二进制数存储到ax寄存器中
call display_hex ; 调用显示函数
```
阅读全文