3
私はアセンブリー(x86、linux)から始めて楽しいものです。私は上記のコードを持つ2つの問題を抱えている条件ジャンプが行われていません
section .text
global _start
_start:
pop ebx ;argc
dec ebx
test ebx,1
jne print_string
exit:
mov ebx,0
mov eax,0
int 0x80
print_string:
mov edx,len
mov ecx,msg
mov ebx,1
mov eax,4
int 0x80
call exit
section .data
msg db "Ok, no arg was passed",0xa
len equ $ - msg
を:これはちょうど私がコマンドラインからの引数を渡されていない場合、それはメッセージを出力し、それが後に終了かどうかを確認する私の非常に最初の小さなプログラムであり、 :
jne
は取得されません。私はdec
の後にebx
が0x00と等しいことをgdbで確認しましたが、test
命令ではEFLAGSは変更されません。- exit syscallが終了しません。 print_stringが終了を呼び出していると出後は何度も何度もをprint_stringそこに行くように、代わりに出て行くの私はちょうど、私のメッセージは、無限ループに印刷されました。
ここで何が起こっているのですか?また、コードに関する他の勧告も歓迎されます。ありがとう。
'test'は、あなたが何を考え実行しません。 'cmp'が必要です。また、あなたは 'je'ではなく' jne'を望みます。 'exit'のシステムコール番号は0ではなく1です。 – Jester
これは正常です。私はより良い情報源を読む必要があると思われる。あなたがジャンプやcmpのための良いリファレンスを投稿することに興味があるなら、私はそれを正しいものとしてマークすることを嬉しく思います... – roirodriguez
"x86命令テスト"のような通常google検索は、HTMLバージョンの命令の1つにつながりますリファレンスガイド、[http://x86.renejeschke.de/](http://x86.renejeschke.de/)と同様のものです。時にはそれらには小さな不正確さが含まれていることがありますが、通常、何かが期待どおりに機能していないかどうかをチェックするのはデバッガと一緒です。デバッガが短くなったバージョンが間違っていることを証明したときだけ、正式なインテルのドキュメント(インテルのWeb上で自由に入手可能なpdf)を掘り下げたり、いくつかのクイックリファレンスをクロスチェックしてください。 ASMのプログラミングでは、両方を使用することが不可欠です:debugger + docs – Ped7g