04 指令及其表示

大纲

  1. 汇编与c之间的数据类型
  2. 常见的汇编语法(AT&T)

汇编语言的数据格式 字 2byts

c声明Intel数据类型汇编代码后缀大小(字节x86-32)
char字节b1
shortw2
int双字l4
unsigned双字l4
char *双子l4
long int双字l4
double双精度l8
long long int--
float单精度s4
long double扩展精度t10/12
c声明Intel数据类型汇编代码后缀大小(字节x86-64)
char字节b1
shortw2
int4字q4
unsigned4字q4
char *双子l8
long int双字l8
double双精度l8
long long int-4
float单精度q4
long double扩展精度t16

常见的汇编语法(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 溢出位
    • 补码运算的溢出(带符号整数运算)

跳转指令

JXConditionDEscription大小(字节x86-64)
jmp1
jeZF
jne~ZF
jsSF
jns~SF
jg(SF^OF)&ZF
jge~(SF^OF)
jl(SF^OF)
jleSF^OF) | ZF
ja~CF&ZF
jbCF
    set:读取条件码,并存入** 字节寄存器 **
SetXConditionDescription
-seteZF
-setne~ZF
-setsSF
-setns~SF
-setbCFAbove(Unsigned)
-seta~CF&ZFBelow(Unsigned)
-setl(SF^OF)signed
-setg(SF^OF)&ZFsign
-setge~(SF^OF)sign
-setleSF^OF) | ZFsign
    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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值