mud*_*dge 12 x86 assembly instruction-set
我想学习x86指令集架构.我不是要为x86学习程序集.我想了解机器代码宝贝.
原因是我想为x86编写汇编程序.然后我想编写一个编译成该程序集的编译器.
我知道有英特尔手册和AMD手册涵盖了x86指令集.但那些非常大而且密集.
我想知道是否有一种更平易近人(可能是教程)的方法来学习x86指令集架构.
cla*_*aws 21
好吧,我不同意你的看法.x86的复杂性被误解,因此被夸大了.我不是说这不复杂.肯定是这样但只有在想要编写一个完整的编译器或汇编器时才是这种情况.如果你只是想学习装配.它并不复杂.
让我们分解x86-64架构以证明我的观点.
寄存器:
x86-64指定了很少的寄存器.究竟有多少?让我们列举一下
替代文字http://www.viva64.com/content/articles/64-bit-development/amd64_em64t/01-big.png
寻址方式:
如何引用任何内存位置?
资料来源:http://en.wikipedia.org/wiki/X86#Addressing_modes
可以通过以下公式汇总32位或64位x86处理器上32位地址大小的寻址模式:

可以通过以下公式汇总64位x86处理器上64位代码的寻址模式:

和
RIP + [位移]
操作模式:
这些是它可以运作的模式:
指令系统:
你听到人们说它是一个大的指令集.好吧,有大约500-600条指令.但其中一些是相同的指令,只有很少的变化,如CMPS/CMPSB/CMPSW/CMPSD/CMPSQ.如果你将它们分组,就像这个数字一样,可以达到400条指令
你觉得它很大吗?然后我几乎没有问题.C标准库有多少个函数?POSIX库有多少个函数?那么.NET和Java呢?他们有多少课程和方法?我们必须知道所有的函数/方法/类吗?我们采用什么方法来学习这些库?
从每个人那里学到一些.粗略地浏览所有这些.了解它们的存在并在需要时使用参考.
我们可以在逻辑上将这些说明划分为以下类别:
而已!!多数民众赞成你需要知道的.现在坦率地告诉我.那复杂吗?
只需获得有关x86架构的汇编语言的好书.我个人建议" 使用GNU/Linux for IA32架构进行汇编语言编程 "作者:Rajat Moona,因为它的简短而且非常重要.不浪费你的大部分时间.但它不包括X86-64.
熟悉IA32 for x86-64之后阅读http://csapp.cs.cmu.edu/public/1e/public/docs/asm64-handout.pdf