zl程序教程

您现在的位置是:首页 >  其他

当前栏目

二十二、标志寄存器与栈(代码设计安全,与子程序寄存器安全类似)

安全寄存器代码 设计 类似 标志 二十二
2023-09-14 09:13:26 时间

1、子程序安全调用

    子程序的设计要以保持寄存器值的平衡,栈空间的平衡为原则。
    子程序的设计在必要时候,需要保持标志寄存器的平衡。

2、标志寄存器

    在计算机中,有一个专用16位的寄存器FLAGS(又称:标志寄存器)。
    标志寄存器是按位起作用的,每一位都有专门的含义,记录特定的信息。

    FLAGS寄存器结构:
    0    CF进位(是/否)        CY    NC
    1
    2    PF奇偶(偶/奇)        PE    PO
    3
    4    AF辅助进位(是/否)    AC    NA
    5
    6    ZF零(是/否)        ZR    NZ
    7    SF符号(负/正)        NG    PL
    8    TF
    9    IF中断(允许/关闭)    EI    DI
    10    DF方向(减量/增量)    DN    UP
    11    OF溢出(是/否)        OV    NV
    12
    13
    14
    15

3、标志寄存器与栈

    PUSHF    标志寄存器的值入栈
    POPF    标志寄存器的值出栈

assume cs:code,ds:data,ss:stack
data segment
	dw 256 dup (0H)
data ends

stack segment
    dw 256 dup (0H)
stack ends

code segment
start:
    mov ax,stack
    mov ss,ax
    mov sp,60H

    cld

    mov ax,1234H
    push ax
    
    std
    pushf
    cld

    popf   ;恢复到std
 
    mov ax,4c00H
    int 21H
code ends
end start