Ausgabedatenregisterwert in NASM
neuer Typ hier, und schon habe ich eine Frage.
Ich passe den in Jeff Duntemanns Assembly-Büchern verwendeten Beispielcode an und möchte einen in einem Datenregister gespeicherten ganzzahligen Wert auf dem Terminal ausdrucken.
Der folgende Code bewirkt, dass die Zeichenfolgen in Ordnung ausgedruckt werden, der Wert in ECX in Ordnung verschoben wird, wenn jedoch Folgendes erreicht wird:
pop ecx
mov eax,4
mov ebx,1
mov edx, ecx
int 80h
Es zeigt den Inhalt von edx nicht auf dem Terminal an, obwohl ich glaube, dass ich es mit mov eax, 4 usw. angewiesen habe.
Kann mir jemand einen "Hinweis" geben (Wortspiel beabsichtigt)?
Referenzcode (geändert am 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: Wenn mein Zeileneinzug nicht funktioniert, würde ich gerne wissen, wie ich ihn verbessern kann. IMHO Learning Assembly wird attraktiver, sobald Sie den anfänglichen Lern-Buckel überwunden haben :)