ここに新しい男がいますが、すでに質問があります。
Jeff Duntemann のアセンブリ ブックで使用されているサンプル コードを適用しています。データ レジスタに格納されている整数値をターミナルに出力したいですか?
以下のコードが行うことは、文字列を正常に出力し、正常に ECX に値をプッシュしますが、次のようになると:
pop ecx
mov eax,4
mov ebx,1
mov edx, ecx
int 80h
mov eax,4 などで指示したと思いますが、端末にedxの内容が表示されません。
「ポインタ」(しゃれた意図)を教えてくれる人はいますか?
参照用コード (2012 年 6 月 17 日修正) :
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-行のインデントがうまくいかない場合は、どうすれば改善できるか知りたいです。最初の学習の「ハンプ」を乗り越えると、IMHO学習アセンブリはより魅力的になります:)