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为比例因子,地址的计算公式为:
例:
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 ; “$+段名” 同样表示取段地址,因而本式同上面的式子等价
本文详细讲解了汇编语言中指令后缀表示的位数,基础运算符、内存寻址方式,以及算数运算和特殊指令如lea的作用。通过实例演示,帮助理解寄存器操作、内存地址计算和基本数据类型处理。
2716

被折叠的 条评论
为什么被折叠?



