請糾正我,如果我錯了:
在AT & T彙編十六進制編寫C語言風格:0x30
代替30h
。八進制也類似於C,前綴爲0
。
並根據您操作的內存大小,您必須在操作數上使用該大小的後綴。這意味着movl
而不是mov
在32位長記憶:
8 bits = b - derived from "byte"
16 bits = w - derived from "word"
32 bits = l - I have no idea why 16 bits is usually a "dword"
64 bits = q - derived from "qword", q for "quad-", so four words in size
也值前面有一個美元標誌:$0x41
(因爲是變量?)和寄存器的前綴爲百分號:%eax
。
所以,如果我讀這正確的代碼應該是:
movl $ah, $0x08
int 0x21
movl $dl, $2ah
movl $ah, $0x02
int $0x21
我無法相信我錯過了這個,當我寫的答案,AT & T語法顛倒了源 - 目的爲了說明有兩個輸入。
I.e. AT & T是:
movl <source>, <dest>
而在英特爾的語法,這將是:
mov <dest>, <source>
任何更正,歡迎,因爲我還在學習爲好。
您使用的是什麼工具鏈?如果你在例如即使轉換爲AT&T語法,Linux'int 21h'也不起作用。 – user786653
不,我使用int 0x80,代碼運行。我剛在&t – TheoVate
找到一個沒有讀回聲的系統調用時遇到了問題,這是因爲它是特定於平臺的。您應該包含您在其下運行的確切平臺。 32位x86 Linux。答案將與C/C++/etc相同。並可能涉及tcsetattr。見例如[this](http://stackoverflow.com/questions/6856635/hide-password-input-on-terminal)SO問題。 – user786653