设置、清除OF和TF标志的汇编指令

5

是否有汇编指令可以直接“设置”或“清除”Intel的8086 16位标志寄存器中的“OF”和“TF”标志?如果没有,我们应该使用什么伪代码?


在你提出这个问题之前,你有阅读过英特尔手册吗? - DCoder
http://en.wikipedia.org/wiki/Trap_flag - John Dvorak
@DCoder,在发表评论之前,您是否在英特尔手册中找到过这种事情的伪代码?! - mohammad mahed
1个回答

8

http://en.wikipedia.org/wiki/Trap_flag

8086没有直接设置或重置陷阱标志的指令。这些操作是通过将标志寄存器推入堆栈,将陷阱标志位更改为程序员想要的值,然后从堆栈中弹出标志寄存器来完成的。设置陷阱标志的指令如下:

PUSHF ; Push flags on stack
MOV BP,SP  ; Copy SP to BP for use as index
OR WORD PTR[BP+0],0100H ; Set TF flag
POPF  ; Restore flag Register

要重置陷阱标志位,只需用以下指令替换先前序列中的OR指令:
AND WORD PTR[BP+0],0FEFFH

要设置和清除溢出标志,您可以做同样的事情,将0100H替换为0800H,并将0FEFFh替换为0F7FFh

在设置TF之前,请确保知道它的作用。这是一个陷阱。


1
为什么要执行 mov bp,sp 并使用 bp 寄存器,而不是只使用 sp 寄存器执行 or word [sp], 0100h - golem
1
由于8086在16位实模式下运行,因此无法将字作为唯一可能的基寄存器,内存操作数中仅有BX、BP、SI和DI。 - hlide

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接