0
我想通過調用打印字符串字符char,通過調用匯編代碼中的printf,但打印第一個字符後,我得到分段錯誤,我不明白爲什麼發生,請有人可以幫助請??爲什麼在x86中調用printf時會出現分段錯誤?
section .rodata
lc:
DB "%c", 10, 0
section .text
align 16
global my_func
extern printf
my_func:
push ebp
mov ebp, esp ; Entry code - set up ebp and esp
pusha ; Save registers
mov ecx, dword [ebp+8] ; Get argument (pointer to string)
incr:
cmp byte [ecx], 0
jz end
movzx eax, byte [ecx]
push eax
push lc
call printf
add esp, 8
inc ecx
jmp incr
end:
popa ; Restore registers
mov esp, ebp ; Function exit code
pop ebp
ret
'eax','ecx'和'edx'是_caller-saved_寄存器。所以你不應該依賴任何這些寄存器的值在一個函數調用中被保留。 – Michael 2015-04-04 15:55:23