我目前正在开始使用NASM并且想知道如何使用十六进制的NASM输出寄存器的内容。 我可以用
输出eax的内容section .bss
reg_buf: resb 4
.
.
.
print_register:
mov [reg_buf], eax
mov eax, SYS_WRITE
mov ebx, SYS_OUT
mov ecx, reg_buf
mov edx, 4
int 80h
ret
假设eax包含0x44444444,则输出将为“DDDD”。显然,每对“44”被解释为“D”。我的ASCII表批准了这一点。
但是如何让我的程序输出实际的寄存器内容(0x44444444)?
答案 0 :(得分:1)
这就是我被教导的方式..
.
.
SECTION .data
numbers: db "0123456789ABCDEF" ;; have initialized string of all the digits in base 16
.
.
.
;;binary to hex
mov al , byte [someBuffer+someOffset] ;; some buffer( or whatever ) with your data in
mov ebx, eax ;; dealing with nybbles so make copy for obtaining second nybble
and al,0Fh ;; mask out bits for first nybble
mov al, byte [numbers+eax] ;; offset into numbers is the hex equiv in numbers string
mov byte [someAddress+someOffset+2], al
;;store al into a buffer or string or whatever it's the first hex number
shr bl, 4 ;; get next nybble
mov bl, byte [numbers+ebx] ;; get the hex equiv from numbers string
mov byte [someAddress+someOffset+1], bl
;;place into position next to where al was stored, this completes the process,
;;you now have your hexadecimal equivalent output it or whatever you need with it
.
.
.
答案 1 :(得分:0)
您需要先将寄存器格式化为文本字符串。最简单的API可能是itoa
,然后是您的写入调用。您需要为此分配一个字符串缓冲区才能工作。
如果你不想在汇编中这样做,你可以制作一个快速的C / Python / Perl / etc程序来从程序中读取并输出所有输出文本。