Как распечатать содержимое реестра в Hex - PullRequest
0 голосов
/ 07 июня 2010

В настоящее время я начинаю работу с 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)?

Ответы [ 2 ]

1 голос
/ 18 февраля 2013

Вот как меня учили это делать ..

.
.
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
.
.
.
0 голосов
/ 07 июня 2010

Сначала вам нужно отформатировать регистр как текстовую строку. Самый простой в использовании API, вероятно, будет itoa, за которым следует ваш запрос на запись. Вам понадобится строковый буфер, выделенный для этой работы.

Если вы не хотите делать это в ассемблере, вы можете сделать быструю программу на C / Python / Perl / etc для чтения из вашей программы и сделать весь выводимый текст.

...