Вход AT & T в маске - PullRequest
       63

Вход AT & T в маске

0 голосов
/ 18 ноября 2011

Я пытаюсь создать простую программу паролей в сборке AT & T, но у меня проблемы с маскировкой ввода.Я хочу, чтобы, когда пользователь вводит символы, они отображаются на экране как звездочка ».В синтаксисе Intel это относительно просто:

mov ah, 08h
int 21h

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

При этом команда intel считывает ввод, не повторяя его, и вместо этого печатает звездочку.Я пытаюсь решить эту проблему в синтаксисе AT & T, и у меня возникли некоторые проблемы.

Любой вклад будет принята с благодарностью.Заранее спасибо.

1 Ответ

0 голосов
/ 27 марта 2012

Пожалуйста, исправьте меня, если я ошибаюсь:

В сборке 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 изменилсяпорядок назначения-источника для инструкций с двумя входами.

Т.е. AT & T:

movl <source>, <dest>

, а в синтаксисе Intel это будет:

mov <dest>, <source>

Любые исправления приветствуютсякак я все еще учусь.

...