0
誰かがこのコードの内容を説明できますか?私はこれを理解したと思ったが、明らかに私はそうではなかった。Cant get ASSEMBLY x64 nasmでループが働いています
global main
extern printf
extern scanf
section .data
numberFormat: db '%d', 10, 0
section .text
main:
push rbp
mov r8, 2
loop:
add r8, 1
mov rdi, numberFormat
mov rsi, r8
mov rax, 0
call printf
cmp r8, 15
jl loop
mov rax, 0 ; normal exit
ret
私の質問は、なぜこのプリントアウトのみ数3の代わりに、すべての数字の3〜15
アセンブルして実行すると、出力によってコードの内容がわかります。重要なこと:Linux x86-64 printfのような可変機能の呼び出し規約と_C_ライブラリのprintfの仕組みを理解するこのコードでも 'ret'の前に' pop rbp'がありませんので、クラッシュする可能性があります –
特にあなたの質問は何ですか?何が問題なの?実行時にリンクに失敗したり失敗したりしますか? –
Windows用の準拠x64ネイティブアセンブリを作成することは難しいことに注意してください。これは、例外の巻き戻しに特定のアライメント規則を従わなければならないためです。 [MSDN](https://docs.microsoft.com/en-us/cpp/build/unwind-helpers-for-masm)を参照してください。 –