0

AT&T Assembly で単純なパスワード プログラムを作成しようとしていますが、入力のマスキングに問題があります。私がしたいのは、ユーザーが文字を入力すると、画面にアスタリスクとして表示されることです。Intel 構文では、比較的単純です。

mov ah, 08h
int 21h

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

これは intel コマンドを使用して、エコーせずに入力を読み取り、代わりにアスタリスクを出力します。AT&T 構文でこの問題を解決しようとしていますが、問題が発生しています。

任意の入力をいただければ幸いです。前もって感謝します。

4

1 に答える 1

0

私が間違っている場合は修正してください:

AT&T アセンブリでは、16 進数は C スタイルで書かれています:0x30の代わりに30h. 8 進数も C と同様で、接頭辞として0.

また、操作するメモリのサイズに応じて、オペランドでそのサイズの接尾辞を使用する必要があります。つまり、32 ビットの長いメモリmovlではなく、次のようになります。mov

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 構文では、2 つの入力を持つ命令のソースと宛先の順序が逆になっています。

つまり、AT&T は次のとおりです。

movl <source>, <dest>

一方、インテルの構文では次のようになります。

mov <dest>, <source>

私もまだ勉強中なので、修正は大歓迎です。

于 2012-03-27T01:13:29.407 に答える