下载后可任意编辑Linux 下的汇编与 Windows 汇编最大的不同就是第一个操作数是原操作数,第二个是目的操作数,而 Windows 下却是相反。1、 基本操作指令简单的操作数类型说明,一般有三种,(1)立即数操作数,也就是常数值。立即数的书写方式是“$”后面跟一个整数,比如$0x1F,这个会在后面的具体分析中见到很多。(2)寄存器操作数,它表示某个寄存器的内容,用符号 Ea 来表示任意寄存器a,用引用 R[Ea]来表示它的值,这是将寄存器集合看成一个数组 R,用寄存器表示符作为索引。(3)操作数是存储器引用,它会根据计算出来的地址(通常称为有效地址)访问某个存储器位置。用符号 Mb[Addr]表示对存储在存储器中从地址 Addr 开始的b 字节值的引用。通常可以省略下标 b。图 1 表示有多种不同的寻址模式,一个立即数偏移 Imm,一个基址寄存器 Eb,一个变址或索引寄存器 Ei 和一个伸缩因子 s。有效地址被计算为 Imm+R[Eb]+R[Ei]*s,对于这中寻址方式,我们可以在数组或者结构体中进行对元素进行访问时会用到。操作数类型格式操作数值名称立即数$ImmImm立即数寻址寄存器EaR[Ea]寄存器寻址寄存器ImmM[Imm]绝对寻址寄存器(Ea)M[R[Ea]]间接寻址寄存器 Imm(Eb)M[Imm+R[Eb]](基址+偏移量)寻址寄存器 (Eb,Ei)M[R[Eb]+R[Ei]]变址寻址寄存器M[Imm+R[Eb]+R[Ei]]寄存器(,Ei, s)M[R[Ei] * s]伸缩化的变址寻址寄存器Imm(,Ei, s)M[Imm+R[Ei] * s]]伸缩化的变址寻址寄存器(Eb,Ei, s)M[R[Eb]+R[Ei] * s]伸缩化的变址寻址寄存器Imm(Eb,Ei, s)M[Imm+R[Eb]+R[Ei] * s]伸缩化的变址寻址下载后可任意编辑图 1 操作数格式注:操作数可以是立即数值、寄存器值或是来自存储器的值,伸缩因子必须是1、2、4、或者是 8。 从上面的图我们就可以大致了解操作数的类型了。在操作指令中,最频繁使用的指令是执行数据传送的指令。对于传送指令的两个操作数不能都指向存储器位置(我的理解是一般存储器存储的都是地址,不能够对地址和地址进行操作)。将一个值从一个存储器位置拷到另一个存储器位置需要两条指令——第一条指令将源值加载到寄存器中,第二条将该寄存器值写入到目的位置。下面给出源操作数和目的操作数的五种可能组合。1、movl $0x4050, %eax 立即数——寄存器 2、movl %ebp, %esp 寄存器——寄存器 3、movl (%edi, %ecx), %eax 存储器——寄存器4、movl $-17, (%esp) 立即数——存储器5、 movl %eax, -...