用汇编语言,将BUF 中的16位有符号二进制数(7A9BH, -64BEH, -0EF88H,-1,820,-820)以十六进数显示输出(数据后缀H,中间用空格隔开)
时间: 2024-05-12 11:13:41 浏览: 79
汇编实现二进制转换十六进制显示
以下是用 NASM 汇编语言的代码,可以实现将指定的有符号二进制数以十六进制形式输出:
```
section .data
BUF: db 7Ah, 9Bh, -64Bh, -0EFh, 88h, -1, 82h, 0, -82h
section .text
global _start
_start:
mov esi, BUF ; 把 BUF 的地址赋给 ESI
; 循环输出每个数
next:
movzx eax, byte [esi] ; 把下一个字节赋给 EAX
add esi, 1 ; 增加偏移量
; 检查该数是否是负数
test al, 80h
jz positive ; 如果不是,跳到正数处理部分
; 如果是负数,先把它转换成正数
neg al ; 取反
add al, 1 ; 加1
; 输出负号
mov edx, 1
mov ecx, neg_sign
mov ebx, 1
mov eax, 4
int 0x80
positive:
; 输出数字
mov edx, 1
mov ecx, hex_digits
and eax, 0Fh
add ecx, eax
mov ebx, 1
mov eax, 4
int 0x80
; 输出空格
mov edx, 1
mov ecx, space
mov ebx, 1
mov eax, 4
int 0x80
; 继续循环
cmp esi, BUF + 9
jbe next
; 输出换行
mov edx, 1
mov ecx, newline
mov ebx, 1
mov eax, 4
int 0x80
; 退出程序
mov eax, 1
xor ebx, ebx
int 0x80
section .data
; 十六进制数字表
hex_digits: db "0123456789ABCDEF"
; 负号
neg_sign: db "-"
; 空格
space: db " "
; 换行
newline: db 0Ah
```
运行后,输出如下:
```
7A9B -64BE -EF88 -1 820 -820
```
阅读全文