7.5.6 寄存器的保护与恢复
优质
小牛编辑
141浏览
2023-12-01
7.5.6 寄存器的保护和恢复
保护寄存器说明子句的说明格式:
USES 寄存器列表
该说明子句要求汇编程序为其生成保护和恢复寄存器的指令序列,即:在进入子程序执行指令之前,把寄存器列表中的寄存器压进堆栈,在结束子程序执行时,把先前压进堆栈的寄存器弹出,以达到保护寄存器的目的。
寄存器列表:列举出在子程序中需要保护的寄存器名,即:在子程序开始时需要把内容进栈的寄存器名。若有多个寄存器名,则在寄存器名之间要用“空格”来分开。
例如:
Dsip | PROC USES AX DX, FUNC:WORD, MSG:PTR BYTE | ||
MOV | DX, MSG | ||
MOV | AX, FUNC | ||
INT | 21H | ||
RET | |||
Disp | ENDP |
汇编程序在处理该子程序时,会根据子句USES的作用,在第一条指令“MOV DX, MSG”之前,插入把寄存器AX和DX进栈的指令序列,即:
PUSH AX
PUSH DX
而在返回指令RET之前插入把寄存器DX和AX的值弹出的指令序列,即:
POP DX
POP AX
注意:若子程序含有多个RET或IRET指令,那么,汇编程序在每个RET或IRET指令前都将增加相应的弹出堆栈指令序列。
从子句USES的功能来看,它与前面7.4节“寄存器的包含与恢复”中所用的方法完全一致,所不同的是:用USE子句进行寄存器保护和恢复的代码是由汇编程序自动产生的,程序员不用关心如何去做,有点象高级语言的编程风格,而7.4节中的代码则是由程序员自己来安排的。