2011-11-18 99 views
0

我想在AT & T大會上創建一個簡單的密碼程序,但我在屏蔽輸入時遇到了麻煩。我想要發生的是當用戶輸入字符時,它們以星號出現在屏幕上。在Intel語法是比較簡單的:AT&T大會屏蔽輸入

mov ah, 08h 
int 21h 

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

它使用英特爾命令來讀取輸入而不呼應它,而是打印一個星號。 我試圖解決AT & T語法中的這個問題,我遇到了一些麻煩。

任何輸入將不勝感激。 在此先感謝。

+0

您使用的是什麼工具鏈?如果你在例如即使轉換爲AT&T語法,Linux'int 21h'也不起作用。 – user786653

+0

不,我使用int 0x80,代碼運行。我剛在&t – TheoVate

+0

找到一個沒有讀回聲的系統調用時遇到了問題,這是因爲它是特定於平臺的。您應該包含您在其下運行的確切平臺。 32位x86 Linux。答案將與C/C++/etc相同。並可能涉及tcsetattr。見例如[this](http://stackoverflow.com/questions/6856635/hide-password-input-on-terminal)SO問題。 – user786653

回答

0

請糾正我,如果我錯了:

在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> 

任何更正,歡迎,因爲我還在學習爲好。