AT& T组件屏蔽输入

时间:2011-11-18 12:08:09

标签: intel assembly att

我正在尝试在AT& T Assembly中创建一个简单的密码程序,但是我在屏蔽输入时遇到了麻烦。我想要发生的是当用户输入字符时,它们在屏幕上显示为星号'。在intel语法中,它相对简单:

mov ah, 08h
int 21h

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

这使用intel命令读取输入而不回显输入,而是打印星号。 我试图用AT& T语法解决这个问题,我遇到了一些麻烦。

任何输入都将不胜感激。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果我错了,请纠正我:

在AT& T程序集中,十六进制是C风格的:0x30而不是30h。八进制也类似于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语法为具有两个输入的指令反转了源 - 目的地顺序。

即。 AT& T是:

movl <source>, <dest>

在英特尔语法中,这将是:

mov <dest>, <source>

欢迎任何更正,因为我还在学习。