首页 > 编程语言 >常见寄存器与汇编指令

常见寄存器与汇编指令

时间:2023-02-26 18:56:20浏览次数:47  
标签:汇编 src dest 基址 指令 寄存器 SF

学习ctf中RE模块必须掌握的

寄存器

通用寄存器

32位 16位 作用
EAX(累加器) AX 作用于操作数和结果的数据
EBX(基址寄存器) BX DS段中的数据指针
ECX(计数器) CX 用于字符串和循环操作
EDX(数据寄存器) DX 输入/输出指针
EBP(扩展基址寄存器) BP SS段中的栈底指针
ESI(源变址寄存器) SI 字符串操作源指针
EDI(目的变址寄存器) DI 字符串操作的目的指针
ESP(栈指针寄存器) SP SS段中的栈顶指针

另外

EIP(指令寄存器)

作用:指向下一条将要执行的指令

段寄存器

32 16 作用
ECS CS 代码段寄存器,存放代码段的段基址
ESS SS 栈段寄存器,存放栈的段基址
EDS DS 数据段寄存器,存放数据段的段基址
EES ES 附加段寄存器,存放附加数据段的段基址
EFS FS 附加段寄存器,存放附加数据段的段基址
EGS GS 附加段寄存器,存放附加数据段的段基址

程序状态与控制寄存器(状态标志)

1 1 1
CF 进位标志 无符号整数发生溢出时被置为1
ZF 零标志 运算结果为0时,其值为1,否则为零
OF 溢出标志 有符号整数发生溢出时被置为1
SF 符号标志 结果为负,SF=1,结果为非负,SF=0
PF 奇偶标志 二进制1的个数为偶数个时,为1
DF 方向标志位 DF=0时,si,di递增。否则递减

汇编指令

常见指令

数据转移指令 格式 作用
mov mov dest,src 将src处的数据转移至dest处,src,dest可以都是寄存器,或者一个是寄存器另一个是内存引用地址,但不能都是内存引用地址
lea LEA reg,mem 把一个内存变量的有效地址送给指定的寄存器
算数运算指令 格式 作用
ADD ADD dest,src
SUB SUB dest,src
MUL/IMUL MUL value
DIV/IDIV DIV divisor
逻辑运算符 格式 作用
AND AND dest,src
OR OR dest,src
XOR XOR dest,src 异或
NOT NOT eax 取反
  • 循环指令

LOOP

LOOP 标号;
LOOPW 标号;
LOOPD 标号;

  • 栈操作指令

push

一个字进栈,系统自动完成两步操作:SP<-SP-2,(SP)<-操作数;一个双字进栈 两步操作ESP<-ESP-4,(ESP)<-操作数

POP

弹出一个字,系统自动完成两步操作:操作数<-(SP),SP<-SP+2;
弹出一个双字,系统两步操作:操作数<-(ESP),ESP<-ESP+4;

  • 函数相关

call:子程序调用

ret:返回指令

  • 中断指令

int:中断会告诉cpu停止线程的执行

  • 比较指令

cmp:比较dest,和src,相当于减操作,不保存结果。然后对标志位产生影响

cmp dest,src

条件转移指令

指令 含义 测试条件
je/jz 相等/结果为零 ZF=1
jne/jnz 不等/结果不为零 ZF=0
js 结果为负 SF=1
jns 结果非负 SF=1
jo 结果溢出 OF=1
jno 结果未溢出 OF=0
jp 奇偶位位1 PF=1
jnp 奇偶位不为1 PF=0
无符号数 含义 测试条件
jb/jnae/jc 低于/不高于等于/有借位 CF=1
jnb/jae/jnc 不低于/高于等于/无解位 CF=0
jna/jbe 不高则转移 CF=1或ZF=1
ja/jnbe 高于则转移 CF=0或ZF=0
有符号数 含义 测试条件
jl/jnge 小于则转移 SF=1且OF=0
jnl/jge 不小于则转移 SF=0且OF=0
jle/jng 小于等于则转移 SF=0或OF=1
jnle/jg 高于则转移 不小于等于则转移

技巧

j-Jump	转移
e-Equal	相同的
n-Not	不
b-Below	小于
a-Above	大于
l-less	更小
g-Greater	更大
s-Sign	负
c-carry	进位为1时
p-Parity	奇偶位为1,1的个数偶数个
o-Overflow	溢出
z-Zero	零

参考

汇编金手指
链接:https://pan.baidu.com/s/1vyBbYJ-niJM2DRbm1ZDQdA
提取码:1234

汇编语言第三版
链接:https://pan.baidu.com/s/13LZVNQEDizsMJrtc7O294g?pwd=1234
提取码:1234

标签:汇编,src,dest,基址,指令,寄存器,SF
From: https://www.cnblogs.com/-Lucky-/p/17157290.html

相关文章

  • GIT初学者详细指令学习
    参考网站:https://www.liaoxuefeng.com/wiki/896043488029600基础概念1.自定义名字和邮箱号gitconfig--globaluser.name“yourname”gitconfig--glob......
  • stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
    文章目录​​一、STM32串口常用寄存器和库函数​​​​1.1常用的串口寄存器​​​​1.2串口相关的库函数​​​​1.3状态寄存器(USART_SR)​​​​1.4数据寄存器(USART_D......
  • 899~900 Maven 指令的生命周期,概念模型图
    Maven指令的生命周期maven对项目构建过程分为三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,这三套生命周期分别是:CleanLifecy......
  • 如何在VC++ 6.0中实现拖动指令改变执行路径?
    前文提要:在VC6.0之后出现的VS系列开发工具都具有的调试功能:移动指针更改执行流,VC6不支持这个UI操作。调试程序暂停时,源代码或“反汇编”窗口边距处的黄色箭头标记要运......
  • 1.2 CPU是寄存器的集合体
    1.程序是把寄存器当作对象来描述的。2.汇编语言采用助记符来编写程序。3.机器语言是指CPU可以直接解释和执行的语言。  通过上面这个代码例子可以看出:机器语言级别......
  • 第十章 通过汇编语言了解程序的实际构成
        计算机CPU能直接解释运行的只有本地代码(机器语言)程序。用C语言等编写的源代码,需要通过各自的编译器编译后,转换成本地代码。    在加法运算的本地代码......
  • Linux查询CPU,内存,硬盘使用率以及网卡流量指令
    Linux查询CPU,内存,硬盘使用率以及网卡流量指令1.获取cpu使用率//cpu`top-b-n1|fgrep"Cpu"|awk'{print100-$8}'`2.获取内存使用率//内存`free-m|fgrep......
  • Vue3自定义指令
    Vue3自定义指令自定义指令的定义:自定义指令是用来操作DOM的,尽管vue推崇数据驱动视图的理念,但并非所有情况都适合数据驱动。自定义指令就是一种有效的补充和拓展,不仅仅......
  • Unity下简易字符串指令调试
    Unity下简易字符串指令调试输入相应的字符串命令即可调用特定的方法,比如让角色等级提升,生成特定数量的Boss等usingSystem;usingUnityEngine;usingSystem.Collectio......
  • 第十章通过汇编语言了解程序的实际构成
    这一章所讲的的是通过汇编语言来理解程序的运行过程。汇编语言的源文件的扩展名通常用“.asm”来表示。汇编语言的源代码,是由转换成本地代码的指令和针对汇编器的伪指令构......