【问题标题】:Assembly- How the check if the ZF is 0 or 1?组装-如何检查 ZF 是 0 还是 1?
【发布时间】:2017-02-06 08:34:32
【问题描述】:

我现在正在编写新的汇编代码,我需要你的帮助! 我使用了 16h 中断,我想检查击键是否可用,所以我想检查现在是否有零标志。 - 我该怎么做?

谢谢! :)

【问题讨论】:

  • 我假设 x86-16,对吗? jzje(取决于您的风格)将检查 ZF = 1。 jnz/jne 将检查 ZF=0。见our doc
  • 至少获得一份 Intel x86 和/或 x86_64 指令集手册。
  • 另外,如果您不想分支,但值 0/1 可能对您在以下代码中有用,您可以使用 setz / setnz 根据 ZF 将 8b 值设置为 0/1 (而不是jz/jnz 分支)。因为你真的需要在int 16h, ah=1 之后测试 ZF,所以这个答案是不相关的,但它可能是接下来要学习的东西(如何确定值是否为零):stackoverflow.com/a/41175294/4271923

标签: assembly flags zero


【解决方案1】:

您可以看到hereZF=1(当没有可用的击键时)和ZF=0(当有可用的击键时)。您可以使用J(N)Z 指令进行相应的分支

使用JZ

    mov ax, 0100h
    int 16h
    jz no_key
    ; Handle case if there is a key press here
    ; AH will contain the scan code; AL will contain the ASCII code

no_key:
    ; Handle case if there is no key press here

使用JNZ

    mov ax, 0100h
    int 16h
    jnz key_pressed
    ; Handle case if there is no key press here

key_pressed:
    ; Handle case if there is a key pressed here
    ; AH contains the scan code; AL contains the ASCII code

【讨论】:

  • 哇,谢谢!这对我真的很有帮助! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 2015-09-15
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
  • 2020-03-25
  • 2012-01-19
相关资源
最近更新 更多