大纲
- 汇编与c之间的数据类型
- 常见的汇编语法(AT&T)
汇编语言的数据格式 字 2byts
c声明 | Intel数据类型 | 汇编代码后缀 | 大小(字节x86-32) |
---|---|---|---|
char | 字节 | b | 1 |
short | 节 | w | 2 |
int | 双字 | l | 4 |
unsigned | 双字 | l | 4 |
char * | 双子 | l | 4 |
long int | 双字 | l | 4 |
double | 双精度 | l | 8 |
long long int | - | - | |
float | 单精度 | s | 4 |
long double | 扩展精度 | t | 10/12 |
c声明 | Intel数据类型 | 汇编代码后缀 | 大小(字节x86-64) |
---|---|---|---|
char | 字节 | b | 1 |
short | 节 | w | 2 |
int | 4字 | q | 4 |
unsigned | 4字 | q | 4 |
char * | 双子 | l | 8 |
long int | 双字 | l | 8 |
double | 双精度 | l | 8 |
long long int | - | 4 | |
float | 单精度 | q | 4 |
long double | 扩展精度 | t | 16 |
常见的汇编语法(AT&T)
mov: source地址会访存
movl Source,Dest; 不可以 movl (%eax),(%ebx); 部可以两个操作数都是内存地址
复制代码
1
2
3
4
5
6
7movl $0x4,%eax; movl $-147,(%eax) ==> *p = -147;
movsl 带符号为扩展
movzl 零扩展
cmovl 条件转移指令 gcc -march=i686 gcc 3.4.4
复制代码
1
2
3
4cmovl Src, Dec; 如果上一个条件满足,则将src传入dec,不满足则dec传入src
地址计算指令
复制代码
1
2
3leal Src,Dest 进行的地址计算 传递地址
栈操作指令
复制代码
1
2
3
4
5pushl %ebp 将old%ebp入栈,然后movl -4(%esp),%esp pop %eax 将%esp所指向的值放入%eax中 ,然后movl 4(%esp),%esp
算术操作指令
双操作数
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26### addl Src,Dest ### subl Src,Dest Dest = Dest - Src ### imull Src,Dest ### sall Src,Dest 左移 ### sarl Src,Dest 算术右移 --补符号位 ### shrl Src,Dest 逻辑右移 ---补零号 ### xorl Src,Dest 异或 ### andl Src,Dest 与 ### orl Src,Dest 或
单操作数
复制代码
1
2
3
4
5
6
7
8
9
10
11
12incl dest 自加 decl dest 自减 negl dest 负号 notl dest 取反
- CF carry clag 进位
- 用于检测无符号整数运算溢出
- ZF zero flag 等于零
- SF sign flag 符号位
- OF overflow flag 溢出位
- 补码运算的溢出(带符号整数运算)
跳转指令
JX | Condition | DEscription | 大小(字节x86-64) |
---|---|---|---|
jmp | 1 | ||
je | ZF | ||
jne | ~ZF | ||
js | SF | ||
jns | ~SF | ||
jg | (SF^OF)&ZF | ||
jge | ~(SF^OF) | ||
jl | (SF^OF) | ||
jle | SF^OF) | ZF | ||
ja | ~CF&ZF | ||
jb | CF | ||
复制代码
1
2
3set:读取条件码,并存入** 字节寄存器 **
SetX | Condition | Description |
---|---|---|
-sete | ZF | |
-setne | ~ZF | |
-sets | SF | |
-setns | ~SF | |
-setb | CF | Above(Unsigned) |
-seta | ~CF&ZF | Below(Unsigned) |
-setl | (SF^OF) | signed |
-setg | (SF^OF)&ZF | sign |
-setge | ~(SF^OF) | sign |
-setle | SF^OF) | ZF | sign |
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21trick:其实只需要记住常用的几条就行了 如 cmpl a,b; jg L0; 就是当b-a >0时 跳 L0 cmpl a,b; jl L0; 当 b-a <= 0时 跳转 L0 cmpl a,b; jz L0 当 b-a = 0 时 跳转L0
如果有需要可以参考
https://www.cnblogs.com/jokerjason/p/9578646.html
最后
以上就是犹豫期待最近收集整理的关于04 指令及其表示大纲的全部内容,更多相关04内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复