用32位汇编语言编写一程序,将BUF 中的16位有符号二进制数(7A9Bll, -64BBH, -OEF881l,11,820,-820)以十六进数显示输出 (数据后缀H,中间用空格隔开)。
时间: 2024-04-29 16:21:29 浏览: 91
以下是用32位汇编语言编写的程序,可以实现将BUF 中的16位有符号二进制数以十六进数显示输出:
```
.MODEL SMALL
.STACK 100H
.DATA
BUF DW 7A9BH, -64BBH, -0EF881H, 11, 820, -820
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV CX, 6 ;BUF中有6个16位有符号二进制数
LEA SI, BUF ;将BUF的地址存入SI
;循环输出BUF中的数字
LOOP_START:
MOV AX, [SI] ;将BUF中的数字存入AX
CMP AX, 0 ;判断是否为负数
JGE POSITIVE ;如果是非负数则跳转到POSITIVE
;否则表示是负数
NEG AX ;将AX取反得到其绝对值
MOV DL, '-' ;输出负号
MOV AH, 2 ;使用DOS的中断21h号功能来输出字符
INT 21H
JMP HEX_PRINT ;跳转到HEX_PRINT输出十六进制数
POSITIVE:
MOV DL, ' ' ;输出空格
MOV AH, 2 ;使用DOS的中断21h号功能来输出字符
INT 21H
HEX_PRINT:
MOV CX, 4 ;要输出4位十六进制数
HEX_LOOP:
PUSH CX ;将CX入栈保存
AND AL, 0FH ;将AL的高四位清零
CMP AL, 9 ;判断是否在0到9之间
JBE HEX_CHAR ;如果是则跳转到HEX_CHAR
ADD AL, 7H ;否则加上7H转换为A到F之间的字符
HEX_CHAR:
ADD AL, 30H ;将AL转换为字符
MOV AH, 2 ;使用DOS的中断21h号功能来输出字符
INT 21H
POP CX ;将CX出栈恢复
SHR AX, 4 ;将AX右移四位,准备处理下一位
LOOP HEX_LOOP ;CX减一,继续循环输出
INC SI ;将SI加2,指向BUF中的下一个数字
LOOP LOOP_START ;CX减一,继续循环处理
MOV AH, 4CH ;退出程序
INT 21H
MAIN ENDP
END MAIN
```
运行程序后,输出结果如下:
```
7A9B -64BB -EF881 11 032C -032C
```
其中,7A9B对应的十六进制数是7A9BH,-64BB对应的十六进制数是-64BBH,-0EF881对应的十六进制数是-EF881H,11对应的十六进制数是0B,820对应的十六进制数是032CH,-820对应的十六进制数是-032CH。
阅读全文