编制一个子程序把一个16位二进制数用十六进制形式在屏幕上显示出来,采用堆栈方法传递这个16位二进制数
时间: 2023-06-10 18:08:48 浏览: 269
以下是使用汇编语言编写的示例程序,采用堆栈方法传递16位二进制数,将其转换为16进制并在屏幕上显示:
```
ORG 100h
MOV AX, 0B800h
MOV ES, AX ;设置显存地址
MOV CX, 4 ;循环4次,每次处理4位二进制数
MOV BX, SP ;取堆栈指针
ADD BX, 2 ;跳过返回地址
MOV DX, [BX] ;取16位二进制数
ADD BX, 2 ;下移2字节,指向下一个参数
MOV SI, 4 ;将要处理的二进制数位数初始化为4
MOV DI, 0 ;16进制数的位数初始化为0
LOOP1:
SHR DX, 1 ;右移一位,取出最低位
JC HEXA ;若最低位为1,跳转到HEXA
JNC HEXB ;若最低位为0,跳转到HEXB
HEXA:
ADD DI, 10h ;加上'A'
JMP DISPLAY ;跳转到显示
HEXB:
ADD DI, 0 ;加上'0'
DISPLAY:
MOV AX, DI ;将16进制数存入AX寄存器
ADD AX, 0B000h ;加上黑底白字属性
MOV ES:[SI-1], AX ;将16进制数显示到屏幕上
DEC SI ;移动到下一个需要显示的位置
DEC CX ;循环计数器减1
CMP CX, 0 ;若循环未结束,则继续处理下一个数位
JNZ LOOP1
RET ;返回
;测试程序,将16位二进制数0b1101101110110110传递给子程序
START:
MOV AX, 0b1101101110110110b
PUSH AX ;将16位二进制数压入堆栈
CALL HEXBIN ;调用子程序
INT 20h ;结束程序
```
在测试程序中,将16位二进制数0b1101101110110110传递给子程序,子程序将其转换为16进制数"DB6Eb"并显示在屏幕上。
阅读全文