0
Kann jemand bitte erklären, was ist mit diesem Code? Ich dachte, ich hätte das verstanden, aber anscheinend nicht.Kann keine Schleife in 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
meine Frage ist, warum ist dieser Druck aus nur Nummer 3 anstelle aller Zahlen zwischen 3 und 15
Wenn Sie es zusammenbauen und ausführen, sollte die Ausgabe Ihnen eine gute Idee geben, was der Code tut. Dinge, die wichtig zu wissen sind: Linux x86-64 Aufrufkonvention für variadic Funktionen wie printf und Verständnis, wie die _C_ Bibliothek printf funktioniert Auch fehlt diesem Code ein 'pop rbp' vor dem' ret', so dass Sie wahrscheinlich einen Absturz haben –
Was ist deine Frage speziell? Was ist daran falsch? Kann die Verbindung zur Laufzeit nicht hergestellt werden oder fehlschlagen? –
Beachten Sie, dass das Schreiben von konformer nativer x64-Assembly für Windows eine Herausforderung darstellt, da Sie bestimmte Ausrichtungsregeln für das Ausrollen der Ausnahme einhalten müssen. Siehe [MSDN] (https://docs.microsoft.com/en-us/cpp/build/unwind-helpers-for-masm) –