2013-10-30 26 views
0

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

编辑:我主要想知道哪些限制没有标签,例如,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 
+0

这个问题有点含糊。另外,我建议不要从AT&T语法开始,它是迄今为止最令人困惑的两个,特别是内存操作数。 – harold

+0

不幸的是,这是大学赋予我们的标准 - 我也不知道他们为什么选择AT&T语法。 – wowpatrick

+0

@wowpatrick,这个区别是IMO如何处理它的一个哲学问题。英特尔使用公式化/数学方法,并从中得出“targt = value”,而其他CPU似乎使用更多的面向语言的方法,您可以说“将值移至目标”。许多较老的受欢迎的CPU都使用这个,而英特尔则是自己的。考虑到这一点,它使它变得更容易一些,但在两者之间切换时仍然令人困惑。 – Devolus

回答

1

你所谈论的限制是汇编解析器具体,所以没有告诉其汇编你使用,你可以不回答的meaningfull方式这个问题。 对于masm来说,一般指南是您使用@@作为本地标签,并且标签可能不以数字开头。其他汇编程序使用类似的规则,但不是必需的,或者它们的细节可能会有所不同。

英特尔和AT之间的主要区别& T语法是指定颠倒。英特尔使用

mov eax, value ; eax = value 

和AT & T采用

mov value, %eax ; Move value to eax. 

显然有更多的它,但是这是方式广泛接听这里,所以我建议你阅读手册或谷歌。

想要开始你可以看看这里:http://en.wikipedia.org/wiki/X86_assembly_language#Syntax找到更多。

+0

我正在使用gcc编译x86 linux目标上的汇编代码。感谢您的维基百科文章的链接,我只看了一下IA-32页面,该页面非常小。 – wowpatrick

+0

gcc只是一个前端,所以它可能使用nasm。(?)将C代码编译为asm时,可以添加'-masm = intel'来获取英特尔语法中的汇编程序输出。不过,我不认为nasm可以解决这个问题。不确定,因为我自己不使用nasm。如果你自己编写汇编程序,那么你应该看看nasm的一些教程。如果你编写一个简单的C程序并查看输出的内容,那也是很有帮助的。 – Devolus

+1

@Devolus:gcc使用gas。在nasm中,可以使用.intel_syntax将其切换为intel语法。当用gdb查看gcc生成的汇编时,可以使用-diassassblyr intel(gdb命令行)将其打开。但也许我误解了你的评论。 :) – gnometorule