我是靠谱客的博主 犹豫期待,最近开发中收集的这篇文章主要介绍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

最后

以上就是犹豫期待为你收集整理的04 指令及其表示大纲的全部内容,希望文章能够帮你解决04 指令及其表示大纲所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部