CTF相关

汇编学习02

2026-06-06 #CTF知识分享

一、状态寄存器

PSW程序状态字寄存器为16位寄存器,由条件码标志和控制标志构成

条件码:

  • OF:溢出标志。溢出时为1,否则置0f
  • SF (Sign Flag):符号标志。结果为负时置1,否则置0
  • ZF (Zero Flag):零标志。结果为0 ZF 位置1,否则置0
  • CF (Carry Flag):进位标志。进位时置1,否则置0
  • AF (Auxiliary carry Flag):辅助进位标志。记录运算时第三位 (半个字节) 产生的进位置。有进位时1,否则置0
  • PF (Parity Flag):奇偶标志。操作数中1的个数为偶数时置1,否则置0

控制标志位:

  • DF (Direction Flag):方向标志。在串处理指令中控制信息的方向
  • IF (Interrupt Flag):中断标志
  • TF (Trap Flag):陷阱标志

huibian1

二、直接标志转移

指令格式 机器码 测试条件 如…则转移 指令格式 机器码 测试条件
JC 72 C=1 有进位 JNS 79 S=0 正号
JNC 73 C=0 无进位 JO 70 O=1 有溢出
JZ/JE 74 Z=1 零/等于 JNO 71 O=0 无溢出
JNZ/JNE 75 Z=0 不为零/不等于 JP/JPE 7A P=1 奇偶位为偶
JS 78 S=1 负号 JNP/IPO 7B P=0 奇偶位为奇

三、间接标志转移 (8位寻址)

指令格式 机器码 测试格式 如…则转移
JA/JNBE(比较无符号数) 77 C或Z=0 >  高于/不低于或等于
JAE/JNB(比较无符号数) 73 C=0 >=  高于或等于/不低于
JB/JNAE(比较无符号数) 72 C=1 <  低于/不高于或等于
JBE/JNA(比较无符号数) 76 C或Z=1 <=  低于或等于/不高于
JG/JNLE(比较带符号数) 7F (S异或O)或Z=0 >  大于/不小于或等于
JGE/JNL(比较带符号数) 7D S异或O=0 >=  大于或等于/不小于
JL/JNGE(比较带符号数) 7C S异或O=1 <  小于/不大于或等于
JLE/JNG(比较带符号数) 7E (S异或O)或Z=1 <=  小于或等于/不大于

四、无条件转移

操作码 伪码指令 含义
EB  cb JMP rel8 相对短跳转(8位),使rel8处的代码位下一条指令
E9  cw JMP rel16 相对跳转(16位),使rel16处的代码位下一条指令
FF  /4 JMP r/m16 绝对跳转(16位),下一指令地址在r/m16中给出
FF  /4 JMP r/m32 绝对跳转(32位),下一指令地址在r/m32中给出
EA  cb JMP ptr16:16 远距离绝对跳转, 下一指令地址在操作数中
EA  cb JMP ptr16:32 远距离绝对跳转, 下一指令地址在操作数中
FF  /5 JMP m16:16 远距离绝对跳转, 下一指令地址在内存m16:16中
FF  /5 JMP m16:32 远距离绝对跳转, 下一指令地址在内存m16:32中

五、七种寻址方式

1.立即寻址:

操作数包含在指令里,作为指令的一部分,跟在操作码后存放在代码段。

这种操作数称为立即数,可以是8位,也可以为16位

1
2
MOV AX, 1234H
#则 AX = 1234H

2.寄存器寻址:

操作数在CPU内部的寄存器中,指令指定寄存器型号

对于16位操作数,可以是AX, BX, CX, DX, DI, SI, SP, BP

对于8位操作数,可以是AL, AH, BL, BH, CL, CH, DL, DH

由于操作数就在寄存器中,无需访问存储器来取得操作数 –> 较高的运算数度

3.直接寻址:

操作数在寄存器中,指令直接包含有操作数的有效地址 (偏移地址)

所以操作数的地址由DS加上指令中直接给出的16位偏移得到。

若采用段超越前缀,则操作数也可包含在数据外段的其他段中

1
2
3
MOV AX, [8054]		#如(DS) = 2000H
(AX) = 3050H #(物理地址 = 20000 + 8054 = 28054H)
28054H里的内容为3050H

4.寄存器间接寻址:

操作数在寄存器中,其有效地址在SI, DI, BX, BP其中之一里。

一般情况下,若有效地址在SI, DI, BX中,则以DS段寄存器的内容为段值;若有效地址在BP中,则以SS段寄存器的内容为段值。

5.寄存器相对寻址:

操作数在存储器里,其有效地址为基址寄存器 (BX、BP)或者变址寄存器 (SI、DI)的内容加上指令给定的8位/16位位移量之和

一般情况下,若SI, DI, BX中的内容作为有效地址的一部分,则引用的段寄存器为DS;若BP中的内容作为有效地址的一部分,则所引用的段寄存器为SS

在指令中给定的8位/16位位移量采用补码形式表示。在计算有效地址时,若位移量为8位,则会被带符号扩展成为16位

下面指令中,源操作数采用寄存器相对寻址,引用的段寄存器为SS

1
MOV BX, [BP-4]

下面指令中,目的操作数采用寄存器相对寻址,引用的段寄存器为ES

1
MOV ES:[BX+5], AL

6.基址+变址寻址:

操作数在寄存器中,操作数的有效地址由基址寄存器之一的内容 + 变址寄存器之一的内容

一般情况下,若BP中内容作为有效地址的一部分,以SS中内容为段值,否则以DS为段值

下面指令中,目的操作数采用基址+变址寻址,引用的段寄存器为DS

1
MOV DS:[BP+SI], AL

而在下面指令中,源操作数采用基址+变址寻址,引用的为ES

1
MOV AX, ES:[BX+SI]

这种寻址方式使用数组/表格处理,用基址寄存器存放首地址,用变址寄存器定位数组各元素,反之也可

7.相对基址+变址寻址:

操作数在存储器中,其有效地址由基址寄存器之一的内容 + 变址寄存器之一的内容 + 指令中给定的8位/16位位移量得到

一般情况下,如果BP中内容作为有效地址的一部分,则以SS段寄存器中的内容为段值,否则以DS段寄存器中的内容为段值。

在计算有效地址时,若位移量为8位,则会被带符号扩展为16位

当所得有效地址操作FFFFH时,取其64K的模

六、另:指令集架构 (处理器架构)

是计算机体系结构中与程序设计相关的部分,包含基本数据类型、指令集、寄存器、寻址模式、存储体系、中断、异常处理、外部 I/O,常见的架构如下:

  • x86的32位 -> IA32 CISC

    Intel的 32 位架构 (IA-32),是 8086 架构的衍生版本,可支持32位运算

  • x86的64位 -> x86-64 / x64 / amd64 CISC

  • IA64

    该架构与x86以及x86-64不相容,不多见

  • ARM架构 RISC

    主要应用于移动端、嵌入式,价格低,能耗低

  • MIPS架构 RISC

    龙芯,用于电子产品、网络设备、商业设备

  • PowerPC架构 RISC

    曾用于Xboxmac的处理器和服务器等

评论
分享