2013-12-09 130 views
0

在DOS大會,我們可以這樣做:如何打印一個ASCII字符?

mov dl, 41h 
mov ah, 02h 
int 21h 

但如何對Linux的NASM x86彙編?

+0

使用帶有'fd' == 1('stdout')和'count' == 1的'sys_write'系統調用。你會怎麼做取決於你是寫32位還是64位位代碼。有關32位示例,請參見[本頁](http://asm.sourceforge.net/intro/hello.html)。 – Michael

+0

不,我想打印單個字符而不是字符串.. – user2972135

+5

然後讓字符串包含一個字符。 – icbytes

回答

1
section  .data 

msg  db 'H' 
len  equ $ - msg 


section  .text 
global  _start 

_start: 

mov  edx,len 
mov  ecx,msg 
mov  ebx,1 ;file descriptor (stdout) 
mov  eax,4 ;system call number (sys_write) 
int  0x80 

mov  eax,1 ;system call number (sys_exit) 
int  0x80 

寫的單個字符可能不會產生所需的輸出,因爲這取決於終端設置,它可以被緩存,所以你可能需要刷新輸出,以確保它無論你寫出現。

以下是linux 32 Bit system calls的列表。

+0

'sys_write'永遠不會被緩衝的I/O。我認爲你正在討論像'printf'這樣的C stdio函數和寫入緩衝區,但這就是庫中的所有用戶空間。 write()永遠不會被「緩存」,並且只有在終端被阻塞時(例如通過xon/xoff流量控制:'^ S'和'^ Q')纔會延遲。 –