概述
大纲
- 汇编与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); 部可以两个操作数都是内存地址
movl
$0x4,%eax;
movl
$-147,(%eax)
==>
*p = -147;
movsl 带符号为扩展
movzl 零扩展
cmovl 条件转移指令 gcc -march=i686 gcc 3.4.4
cmovl
Src, Dec;
如果上一个条件满足,则将src传入dec,不满足则dec传入src
地址计算指令
leal Src,Dest 进行的地址计算
传递地址
栈操作指令
pushl %ebp
将old%ebp入栈,然后movl -4(%esp),%esp
pop %eax
将%esp所指向的值放入%eax中 ,然后movl 4(%esp),%esp
算术操作指令
双操作数
### 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
或
单操作数
incl
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 | ||
set:读取条件码,并存入** 字节寄存器 **
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 |
trick:其实只需要记住常用的几条就行了
如 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 指令及其表示大纲所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复