AT&T汇编基础指令(更新中)

1. 指令后缀所表示的操作位数:

        指令助记符的最后一个字母表示了指令操作的位数

        例如 movl %eax, %ebx表示将寄存器eax 中的内容存放到寄存器ebx中,最后的" l "表示操作的位数为32位(32bit),其他指令后缀所代表的位数如下表所示。

后缀名

对应英文

操作位数(bit

指令示例

b

Byte

8

movb %al, %bl

w

Word

16

movw %ax, %bx

l

Long word

32

movl %eax, %ebx

q

Quad words

64

movq %rax, %rbx

2. 基础运算符介绍:

        汇编语言的指令的基本格式为: <指令助记符>  <操作数src>  <操作数dst>  ;<注释>

        其中操作数的种类有三种:寄存器,内存地址,立即数,左边的操作数为源操作数,右边的操作数为目标操作数,两个操作数不能同为内存地址。注释由分号 ; 申明。

        示例:     

movl %eax, %ebx    ; 将寄存器eax中的内容存放到ebx中
movl %eax, (%ebx)  ; 将寄存器eax中的内容存放到ebx寄存器中的值指向的内存地址中
movl $32 , %ebx    ; 将立即数32存放到寄存器中

3. 内存寻址介绍:

        内存寻址的一般表现形式:Imm( rb , ri , s ),其中Imm表示偏移的立即数,rb为内函基地址的寄存器,ri为变地址寄存器,s为比例因子,地址的计算公式为:

        addr = Imm + rb + ri * s

        例:

movl $0x8000, %ebx            ; 将立即数0x8000(16进制)存入寄存器ebx中
movl $0x3, %ecx               ; 将立即数0x3(16进制)存入寄存器exc中
movl %eax, -32(%ebx, %ecx, 4) ; 将寄存器eax中的内容存放到 -32 + 0x8000 + 0x3 * 4中

4. 一些算数运算符介绍:

inc    ; increase      累加,类似于i++
dec    ; decrease      累减,类似于i--
neg    ; negative      取反,逐位取反再+1
add    ; addition      加法
sub    ; subtraction   减法
mul    ; multiply      无符号数乘法
imul   ;               有符号数乘法
div    ; division      无符号数除法
idiv   ;               有符号数除法,(在汇编中乘除法会尽量被优化为位移运算)

5. 其他的一些指令:

        lea : 降label对应的地址装入寄存器中

        举例:

.section .data           ;定义数据段
value1:
    .string	"String\n"

leal value1, %esi        ;将数据段value1的地址存入寄存器esi中
movl $value1, %esi        ; “$+段名” 同样表示取段地址,因而本式同上面的式子等价 

你可能感兴趣的:(c++,linux)