1

我在 x86 平台上学习汇编语言并制作了一个简单的程序来添加前五个数字并将值打印到屏幕上。下面是我的代码

section .data
x db "value=%d" ,10,0
tc db "value is =%d" ,10,0
section .text
global main
extern printf

main:
mov ebx, 1
mov ecx,0
well_done:
add ecx ,ebx
push ebx
 push x

call printf
add esp,4
pop ebx
inc ebx


cmp ebx ,6

jnz well_done

push ecx
push tc
call printf
add esp,8
ret

但我得到的输出低于

value=1
value=2
value=3
value=4
value=5
value is =0

谁能告诉我我做错了什么

4

1 回答 1

3

ECX寄存器在CDECL调用约定中是调用者保存的,这意味着如果你想在函数调用中保留它的值,你(调用者)必须自己保存和恢复它。

于 2013-06-13T10:35:47.210 回答