原创 首页 逆向

x86 汇编基础:寄存器与标志位

LinJHS 0

寄存器

不同的寄存器(32 位、16 位、8 位的对应关系,F 的个数就是位数除以 4,也就是对应的十六进制掩码宽度):

32 位

16 位

8 位

功能简述

EAX

AX

AL / AH

累加器

EBX

BX

BL / BH

基址

ECX

CX

CL / CH

计数

EDX

DX

DL / DH

数据

ESI

SI

—

源变址

EDI

DI

—

目的变址

EBP

BP

—

栈帧基指针

ESP

SP

—

栈顶指针

注:SI、DI、BP、SP 没有拆成 8 位的形态。

例如:

32位:EAX   FFFF FFFF
16位:AX         FFFF
8 位:AL           FF
8 位:AH         FF

汇编结构

16 位 MASM 的程序骨架(下面这份模板遵循 CC 4.0 BY-SA 版权协议,原文链接在文末):

;版权声明:以下代码遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
;原文链接:https://blog.csdn.net/weixin_46285416/article/details/116637114
DATAS SEGMENT   ;数据段
    ;此处输入数据段代码
DATAS ENDS

CODES SEGMENT   ;代码段
    ASSUME CS:CODES,DS:DATAS        ;数据段给DS,代码段给CS
START:          ;开始代码
    MOV AX,DATAS    ;需要先把DATA给AX寄存器,然后再从AX给DS,DATA不能直接给DS
    MOV DS,AX
    ;此处输入代码段代码
    MOV AH,4CH      ;结束语句
    INT 21H

CODES ENDS      ;代码段结束
    END START   ;结束代码

标志寄存器里面的六个寄存器

进位标志 CF (Carry Flag)

进位标志 CF 主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为 1 ,否则其值为 0 。

使用该标志位的情况有:

  • 多字(字节)数的加减运算

  • 无符号数的大小比较运算

  • 移位操作

  • 字(字节)之间移位

  • 专门改变 CF 值的指令

  • ……

奇偶标志 PF (Parity Flag)

奇偶标志 PF 用于反映运算结果中"1"的个数的奇偶性。如果"1"的个数为偶数,则 PF 的值为 1 ,否则其值为 0 。

利用 PF 可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。

辅助进位标志 AF (Auxiliary Carry Flag)

在发生下列情况时,辅助进位标志 AF 的值被置为 1 ,否则其值为 0 :

  • 在字操作时,发生低字节向高字节进位或借位时;

  • 在字节操作时,发生低 4 位向高 4 位进位或借位时。

零标志 ZF (Zero Flag)

零标志 ZF 用来反映运算结果是否为 0 。如果运算结果为 0 ,则其值为1,否则其值为 0 。在判断运算结果是否为 0 时,可使用此标志位。

符号标志 SF (Sign Flag)

符号标志 SF 用来反映运算结果的符号位,它与运算结果的最高位相同。

在微机系统中,有符号数采用补码表示法,所以,SF 也就反映运算结果的正负号。运算结果为正数时,SF 的值为 0 ,否则其值为 1 。

溢出标志 OF (Overflow Flag)

溢出标志 OF 用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF 的值被置为 1 ,否则,OF 的值被清为 0 。

对以上6个运算结果标志位,在一般编程情况下,标志位 CF、ZF、SF 和 OF 的使用频率较高,而标志位 PF 和 AF 的使用频率较低。


参考资料:

  1. 【狂神说】最通俗易懂的计算机底层教学,二进制到汇编学习! https://www.bilibili.com/video/BV1ni4y1G7B9

  2. 计算机基础知识 https://article.itxueyuan.com/rx3g21

  3. 汇编程序模板 CSDN 原文 https://blog.csdn.net/weixin_46285416/article/details/116637114

分享
如果这篇文章帮到你,可以请我喝一杯茶。

微信扫码打开

请我喝杯茶

如果这篇文章帮到你,可以请我喝一杯茶。

微信收款码
在商城请我一杯