gpt4 book ai didi

c - NASM 中执行循环失败

转载 作者:行者123 更新时间:2023-11-30 14:21:26 24 4
gpt4 key购买 nike

我尝试在 NASM 中编写一个简单的汇编程序,该程序将打印 Hello World 5 次。但执行失败,无限循环打印 hello world。我尝试调试代码,发现 ecx 未正确执行,并且 eax 显示其他值。我的代码如下:

    section .data
msg: db "Hello World",10,0
section .text
global main
extern printf
main: push ebp
mov ebp,esp

mov ecx,0
mov DWORD[esp-4],0x5
mov eax,DWORD[esp-4]
jmp .loop
.loop:
push eax
push ecx
add esp,8

pop ecx
pop eax

cmp ecx,eax
jne .task

jmp .done
.task:
push DWORD msg
call printf
add esp,4

add ecx,1

jmp .loop
.done:
mov esp,ebp
pop ebp
ret

你能帮我指出我的错误吗?

最佳答案

根据X86 calling conventions 、寄存器 EAX、ECX 和 EDX 由调用者保存。在调用 printf 之前保存它们并在之后恢复。

您的代码中还有一个我无法理解的片段(add esp, 8 被push/pop 包围,循环)。我无法在这里提供任何解释,但如果您也不理解它,那么它可能是错误的。

关于c - NASM 中执行循环失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14676521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com