0
누군가이 코드를 어떻게 설명 할 수 있습니까? 나는 이것을 이해할 줄 알았지 만 분명히 나는 이해하지 못한다.Cant가 어셈블리 어셈블리에서 작동합니다. 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)을 참조하십시오. –