2015-04-19 58 views
0

假設我們有將Z打印到屏幕上的彙編代碼。如何用機器語言調用printf

pushl $'Z' 
call putchar 
add $4, %esp 

我們怎樣才能在機器語言代碼中編寫它?我已經檢查了gdb中的在線資源和這段代碼,但前者不同意後者,後者每次運行代碼時都會更改。感謝您的幫助。

我正在使用Linux x86。再次,我想說我想知道如何在機器語言代碼中編寫它。

+4

什麼架構? –

+1

爲什麼使用匯編語言? –

+0

機器語言(即十六進制代碼)還是程序集? –

回答

3

使用putchar而不是printfprintf需要一個string,並且您提供了一個char。另外,請記住,您必須在調用函數後立即還原堆棧,因爲printfputchar都使用cdecl調用約定。

pushl $'Z' 
call putchar 
add $4, %esp 
+1

值得注意的是,如果機器是amd64,那麼abi要求第一個參數在%rdi中,而不是在堆棧上,假設您使用的是SysV ABI。 http://en.wikipedia.org/wiki/X86_calling_conventions上x86架構的其他調用約定。 – dho