技能培训中心网站建设,南宁做网站方案,永久免费域名注册,手机网站域名绑定一、前缀不同
在 Intel 语法中#xff0c;没有寄存器前缀或立即前缀。 然而#xff0c;在 ATT 中#xff0c;寄存器的前缀是“%”#xff0c;而 immed 的前缀是“$”。 Intel 语法十六进制或二进制即时数据分别带有“h”和“b”后缀。 此外#xff0c;如果第一个十六…
一、前缀不同
在 Intel 语法中没有寄存器前缀或立即前缀。 然而在 ATT 中寄存器的前缀是“%”而 immed 的前缀是“$”。 Intel 语法十六进制或二进制即时数据分别带有“h”和“b”后缀。 此外如果第一个十六进制数字是字母则该值前面带有“0”前缀。
例如下面这个表格 二、 操作数的位置不同
Intel 语法中操作数的方向与 ATT 语法中的操作数方向相反。 在 Intel 语法中第一个操作数是目标第二个操作数是源而在 ATT 语法中第一个操作数是源第二个操作数是目标。 ATT 语法在这种情况下的优势是显而易见的。 我们从左到右读从左到右写所以这种方式很自然。 三、内存操作数的写法不同
上面看到的内存操作数也不同。 在 Intel 语法中基址寄存器包含在[ and ] 中而在 ATT 语法中基址寄存器包含在( and ) 中。 与 Intel 语法相比涉及复杂操作的指令的 ATT 形式非常晦涩难懂。
Intel 语法形式是 segreg:[baseindex*scaledisp]
ATT 语法形式为 %segreg:disp(base,index,scale)
Index/scale/disp/segreg 都是可选的可以简单地省略。如果未指定且指定了索引则比例默认为 1。Segreg 取决于指令以及应用程序是否在实模式或 pmode 下运行。 在实模式下它取决于指令而在p模式下则不需要。 当用于缩放/显示时使用的立即数据不应在 ATT 中添加“$”前缀。
例如下面的表格
如你所见ATT 非常晦涩。
英特尔汇编[baseindex*scaledisp] 明显比ATT汇编disp(base,index,scale) 更容易理解。 四、后缀不同
您可能已经注意到ATT 语法助记符有一个后缀。 该后缀的意义在于操作数的大小。 “l”代表长“w”代表字“b”代表字节。 Intel 语法具有与内存操作数类似的指令即字节 ptr、字 ptr、双字 ptr。 “dword”当然对应于“long”。 这类似于 C 中的类型转换但它似乎没有必要因为所使用的寄存器的大小是假定的数据类型。 最后讲两个单词HEX是16进制的意思Intel汇编的H后缀也是这么来的HEX是Hexadecimal的缩写。Binary是二进制的意思Intel汇编的B后缀是这个单词。