Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly IA-32关键字是什么?_Assembly_X86 - Fatal编程技术网

Assembly IA-32关键字是什么?

Assembly IA-32关键字是什么?,assembly,x86,Assembly,X86,IA-32关键字是什么?标签名称有哪些限制?我目前正在用AT&T语法编写汇编代码——奖金:我甚至不知道Intel和AT&T语法之间的区别是什么 编辑:我最想知道哪些限制没有标签,例如,print是允许的标签名称吗 print: pushl %eax pushl $str call printf # output contents of stack according to out string popl %eax # Clean up the stack, remove th

IA-32关键字是什么?标签名称有哪些限制?我目前正在用AT&T语法编写汇编代码——奖金:我甚至不知道Intel和AT&T语法之间的区别是什么

编辑:我最想知道哪些限制没有标签,例如,
print
是允许的标签名称吗

print:
pushl %eax
pushl $str
call printf     # output contents of stack according to out string
popl %eax       # Clean up the stack, remove the parameters of print
jmp end 

您所讨论的限制是特定于汇编程序解析器的,因此如果不告诉您使用的是哪个汇编程序,您就无法以有意义的方式回答这个问题。 对于masm,一般指南是使用
@
作为本地标签,并且标签不能以数字开头。其他汇编器使用类似的规则,但不是必需的,或者它们可能在细节上有所不同

Intel和AT&T语法的主要区别在于赋值是反向的。英特尔使用

 mov    eax, value   ;  eax = value
以及美国电话电报公司使用

mov    value, %eax   ; Move value to eax.
显然还有更多的问题,但这是一个很广泛的回答,所以我建议阅读手册或谷歌


首先,你可以看看这里:再多找一点。

这个问题有点模糊。另外,我建议不要从AT&T语法开始,它是这两种语法中最容易混淆的,尤其是内存操作数。不幸的是,这是大学给我们的标准-我也不知道他们为什么选择AT&T语法。@wowpatrick,区别是一个哲学问题,你如何处理它。Intel使用公式化/数学方法,由此得出
Target=value
,而其他CPU似乎使用更面向语言的方法,您可以说
将值移动到目标
。许多较老的流行CPU都使用这种处理器,而Intel自己制造。考虑到这一点,这使它变得更容易一些,但在两者之间切换时仍然很混乱。我使用gcc在x86linux目标上编译汇编代码。感谢wikipedia文章的链接,我只看了IA-32页面,它非常小。gcc只是一个前端,所以它可能使用nasm。(?)当您将C代码编译到asm时,可以添加
-masm=intel
,以英特尔语法获得汇编程序输出。然而,我不认为nasm可以解决这个问题。不确定,因为我自己不使用nasm。如果你自己编写汇编程序,那么你应该看看nasm的一些教程。如果您编写一个简单的C程序并查看gcc创建的输出,这也会很有帮助。@Devolus:gcc使用gas。在nasm中,您可以通过使用.intel_语法打开它来使用intel语法。当使用gdb查看gcc生成的程序集时,可以使用-diassassblyr intel(gdb命令行)将其打开。但也许我误读了你的评论-英特尔的反汇编风格。诅咒你,电话。:)@根据规则,你读对了。这就是为什么我在它后面加了一个问号,因为我不确定很高兴知道GDB和GAS也可以与Intel语法配合使用。:)