Wartość rejestru danych wyjściowych w NASM
nowy facet tutaj, a ja już mam pytanie.
Dostosowuję przykładowy kod używany w książkach montażowych Jeffa Duntemanna i chcę wydrukować wartość całkowitą zapisaną w rejestrze danych do terminala?
Poniższy kod robi, że drukuje łańcuchy w porządku, wrzuca wartość w porządku ECX, ale gdy dojdzie do następujących:
pop ecx
mov eax,4
mov ebx,1
mov edx, ecx
int 80h
Nie wyświetla zawartości edx na terminalu, chociaż myślę, że poleciłem to z mov eax, 4 itd.
Czy ktoś jest w stanie dać mi jakieś „wskazówki” (gra słów przeznaczona)?
Kod do odwołania (zmieniony od 17.06.2012):
SECTION .data
submessage: db "I am subtracting 5 from 10!", 10
msglen: equ $-submessage
ansmsg: db "Answer is:", 10
msglen2: equ $-ansmsg
EOL: db 10
SECTION .bss
msg: resd 2 ; reserve space for 2 dwords
SECTION .text
global _start
_start: nop
;Displays test on shell
mov eax,4 ;print to terminal
mov ebx,1
mov ecx, submessage
mov edx, msglen
int 80h ;"I am subtracting 5 from 10!"
mov eax,4 ;print to terminal
mov ebx,1
mov ecx, ansmsg
mov edx, msglen2
int 80h ;"Answer is..."
;Subtraction operation below:
mov edx, 10
sub edx, 5
mov [msg], edx ; store 5 in msg
; now we need to print msg to terminal
mov eax, 4 ;print to terminal
mov ebx, 1
mov dword [msg+1], 0xa ;helps prints something out!
;Encountered problem here= prints out 'Answe' instead of integer '5'
push dword 2 ; store size of msg
push dword [msg] ; push to stack contents of msg
int 80h
add esp, 3 ;clean stack (2 push calls *4)
int 80h
; I like labels :)
sys_exit: mov eax,1 ;exit status
mov ebx,0
int 80h
nop
PS- Jeśli moje wcięcie linii jest do bani, chciałbym wiedzieć, jak mogę to poprawić; Zespół uczący się IMHO staje się bardziej atrakcyjny, gdy przejdziesz przez wstępną naukę „garb” :)