在 8086 中将标志值存储在变量中 - 汇编语言

问题描述

我想问一下,是否有任何明确且简单的方法来存储标志的值,例如(进位标志、辅助标志、奇偶标志、零标志、溢出标志、签名标志等? ) 在变量中,例如;

.data
 carry_flag db 0
 auxiliary_flag db 0
 zero_flag db 0

我已经研究了很多,但找不到在 8086 处理器的变量中“存储”标志值的方法。我们当然可以使用任何调试器(例如AFD Debugger)查看标志,但是如果我们想在运行时存储它们并在结束时将它们显示用户怎么办?程序。

请提出一种简单的方法来将所有这些标志的值从标志寄存器存储到 8086 汇编语言 - MASM 中的变量中。

先谢谢你!

解决方法

我想问一下是否有任何明确且简单的方法将标志的值存储在变量中

最简单的方法是使用循环。接下来的代码片段将在字节大小的变量中存储 8086 上可用的 9 个标志。如果标志为 OFF,则为 0,如果标志为 ON,则为 1。

允许 3 个未使用的数据字节(更简单)

.data
  CF db 0
     db 0
  PF db 0
     db 0
  AF db 0
     db 0
  ZF db 0
  SF db 0
  TF db 0
  IF db 0
  DF db 0
  OF db 0

  ...

  pushf
  pop     dx
  mov     di,offset CF
  mov     cx,12
  cld
More:
  shr     dx,1
  mov     al,0
  rcl     al,1
  stosb
  dec     cx
  jnz     More

没有未使用的数据字节(适合连续显示)

.data
  CF db 0
  PF db 0
  AF db 0
  ZF db 0
  SF db 0
  TF db 0
  IF db 0
  DF db 0
  OF db 0

  ...

  pushf
  pop     dx
  mov     di,12
  mov     bx,0FD5h     ; Mask of defined flags
  cld
More:
  shr     dx,1
  shr     bx,1
  jnc     Skip          ; Bit does not correspond to a defined flag
  stosb
Skip:
  dec     cx
  jnz     More