我在閱讀Paul Carter的pcasm書。它使用NASM,一個調用我的彙編代碼的C驅動程序應用程序,以及一個可以輕鬆完成彙編中的基本I/O的伴隨庫。我是否必須初始化從C調用的彙編代碼中的CPU寄存器?
這是我的函數,將在C叫的樣子:
segment .text
global _asm_main
_asm_main:
enter 0,0 ; setup routine
pusha
mov bx, 0034h ; bx = 52 (stored in 16 bits)
mov cl, bl ; cl = lower 8-bits of bx
mov eax, ecx
call print_int
popa
mov eax, 0 ; return back to C
leave
ret
的print_int
功能在eax
打印值存儲爲一個整數。但這種打印出垃圾到stdout:
4200244
如果我使用它之前初始化ECX寄存器0與mov ecx, 0000h
,我會得到預期的輸出:
52
總是需要初始化,如果是的話,是否有一種快速的方法將C或NASM的所有寄存器初始化爲0(或用戶定義的初始化程序)?
我使用XP32,MinGW 4.4.0和NASM 2.09.04。
我想ASM程序員/編譯器只初始化他們要使用的寄存器。我會立即初始化它們,因爲我現在對學習ASM非常感興趣,所以我想避免這些錯誤。我並不打算編寫任何大量的ASM代碼,但我想知道像C這樣的語言是如何在較低級別上工作的。謝謝。 – 2011-02-17 17:22:30