汇编指令集简介

0x01 寄存器

​ 寄存器不严谨的可以分为通用寄存器和专用寄存器。

​ 以 32 位寄存器为例:

通用寄存器有:eax、ebx、ecx、edx,它们可以在所有地方使用。

这四个并不是完全就是 “ 通用 ” ,它们还有各自的习惯用法。

源变址寄存器目标变址寄存器有:esi、edi。esi 的作用是存放要处理的数据的内存地址,edi 的作用是存放处理后的数据的内存地址。

栈相关的寄存器有:SS、ebp、esp。其中 esp 存放的是栈顶的地址(高地址),ebp 相应的是存放栈底(低地址)的位置。

栈随着存储内容的增加,是向低地址增长,即 ebp 中的地址不断减小。

SS 是用在 16 位寄存器中的,32 位寄存器中虽有,但一般设为常量

代码段相关的寄存器有:CS、eip。其中 CS 存放代码段的基址,32 位寄存器中基本不用,设为常量,eip 是存放下一条指令地址的寄存器。

数据段相关的寄存器有:DS。常与 esi 一起使用。

附加段相关的寄存器有:ES。常与 edi 一起使用。

eflag 标志寄存器表示了指令执行中的一系列相关信息。

对于 64 位寄存器,其寄存器是将 8 个exx 寄存器改为 rxx ,同时增加了 8 个新寄存器:r8,r9,r10,r11,r12,r13,r14,r15。

使用方法基本参照 32 位寄存器

fastcall 传参寄存器:rcx,rdx,r8,r9(64 位系统中只有 fastcall 约定了)

scratch 寄存器:rbx,r12,r13,r14,r15(这些寄存器可以随意修改)

0x02 指令简介

​ 汇编指令有很多,常用的汇编指令有:

  • 传送指令
    • 常见的有 mov、lea、push、pop
  • 算术指令
    • 例如加减乘除,位运算等
  • 逻辑指令
    • 逻辑与或非等运算
  • 串操作指令
    • 与字符串相关的指令,如字符串的拷贝、比较、长度计算等等
  • 控制转移指令
    • 有条件跳转指令、无条件跳转指令、中断指令
  • 处理机控制指令
    • 关机、重启等
  • 汇编指令操作对象
    • 立即数(常数、常量)、内存、寄存器

0x03 指令集

​ 实际上指令集分为两种:复杂指令集(CISC)、精简指令集(RISC)。

​ 精简指令集:提供了有限的操作,大多数指令在一个周期内完成,指令长度固定,各个指令使用频率相差不大。

​ 复杂指令集:提供了庞大的操作,不同指令消耗时间差别较大,指令长度不定,各个指令使用频率相差很大。

0x04 指令集区别

​ 两种指令集各有优缺点,所以两者的应用方向也都各有不同。

​ 对与 CISC 而言其优点是高性能,但缺点也就是高功耗,这些个优缺点使得其更加适合于放在 PC 端上的 CPU 设计之中;
​ 与之相对的 RISC 的优缺点又是相反的优点是低功耗,高效能,带来的缺点就是其性能较低,使得其更加适合与放在电池容量较小智能移动设备(如:手机,智能手表等)上。

​ 两中指令集体系各自都有一个较为突出的指令集架构, CISC 的代表即为 Intel 的 X86 架构,多数应用于 PC 端中;RISC 的代表即为 ARM 架构。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值