当前位置: 首页 > 知识库问答 >
问题:

此汇编代码有什么作用?(Test,XOR,日本)

田兴旺
2023-03-14

1.

TEST EAX,EAX
JNZ SHORT program.00407190

2.

XOR EAX,EAX
JNZ SHORT program.00407190

如果我错了,请纠正我。谢谢大家!:)

根据我迄今为止的理解:

< code>JNZ如果不等于零则跳转,它是否跳转取决于< code>ZF是否设置为1。如果是1,它不会跳。否则,它会跳起来。

根据我对代码#1的理解,< code >测试EAX,EAX将检查它是否为零。如果它不等于零(< code>ZF为0),它将跳转到地址00407190。

对于代码#2
XOR EAX,EAX将把EAX寄存器设置为0。它是否设置了任何标志?如果不是,JNZ指令如何确定是否跳转?

最后,为什么人们要检查EAX是否为0?请帮我一个更简单详细的解释,我还是一个初学者。

共有1个答案

东方修谨
2023-03-14

TESTXOR是用于对操作数执行逻辑操作的逻辑指令。

测试指令(比较操作数)

TEST destiny, source

它一点一点地执行操作数的连接,但与AND不同的是,该指令不会将结果放在目标操作数中,它只对标志的状态有影响。

Source Destiny | Destiny
--------------------------
1      1       | 1      
1      0       | 0
0      1       | 0
0      0       | 0    <---

异或指令(异或)

XOR destiny, source 

它的功能是逐位执行两个操作数的逻辑异或运算。

Source Destiny | Destiny
--------------------------
1      1       | 0    <---
1      0       | 1
0      1       | 1
0      0       | 0    <---

如表所示:

< code >异或EAX,EAX会将< code>EAX寄存器设置为零。如果< code>XOR的结果为零,则将设置< code>ZF。所以在这种情况下:(< code>ZF=1)

TEST EAX,EAX不会将结果放入寄存器,它只对ZF的状态有影响。在这种情况下,如果EAX==0,则(ZF=1)

JNZ(JNE)指令(条件跳转)

JNZ label

如果不相等或不为零,它会跳转到tag。如果ZF被停用,则会完成跳转。(ZF=0

 类似资料:
  • 我知道这行代码将某些内容移动到eax寄存器中,但是dword ptr [edx 15Ch]有什么作用? 它是否接受edx中的值并添加15C=Q,然后将地址Q中的值加载到eax中?如果是这样,这个conetxt中的dword ptr是什么意思?

  • 问题内容: 在方法或类范围内,下面的行进行编译(带有警告): 在类范围中, 变量获取其默认值 ,以下给出“未定义引用”错误: 它不是第一个应该以相同的“未定义参考”错误结束吗?还是第二行应该编译?还是我缺少什么? 问题答案: tl; dr 对于 字段 ,是非法的,因为它是对的非法前向引用。您实际上可以通过编写来解决此问题,该文件可以毫无抱怨地进行编译。 对于 局部变量 ,是非法的,因为未在使用前进

  • 问题内容: 我认为解决此问题的最佳方法就是粘贴我的代码: 如果我先点击 编辑按钮 和比 确认编辑 ,我试图获得(作为结果)的页面标签 FINALLY我在这里 不幸的是,这并不发生。我单击“ 编辑”按钮 ,然后单击“ 确认编辑” ,则什么也没有发生。 我怎么了 干杯 用新版本更新 问题答案: 好吧,那变得复杂了。是否将调用该操作还取决于组件或其父项之一的属性的结果。由于Bean在请求范围内,因此默认

  • 问题内容: 我不太确定这是什么意思或在做什么,有人可以详细说明吗? 问题答案: 它接受发送者引用的对象,并尝试将其转换为Player类型。Java对象是强类型的,这意味着您必须声明对象的类型。 如果发件人引用的对象不能转换为Player对象,则将为InvalidCast抛出异常。

  • 问题内容: 我正在尝试计算给定日期的第n个工作日。例如,我应该能够计算给定日期的月份中的第三个星期三。 我已经编写了2个版本的函数,该代码可以做到这一点: 控制台输出 这两个函数中的逻辑显然是错误的,但是我似乎无法找到该错误-任何人都可以发现该代码出了什么问题-以及如何解决该问题以返回正确的值? 问题答案: 您的问题在这里: 首先,您用错误的方式减去东西:您需要从所需的日期减去实际的日期,而不是相

  • 问题内容: 我正在阅读DigitalOcean的golang客户程序。我注意到他们在变量中创建了* Op结构的实例。示例:https: //github.com/digitalocean/godo/blob/master/droplets.go#L32 为什么需要此行? 问题答案: 该行是*DropletsServiceOp满足DropletsService接口的编译时检查。 该行对程序的执行没有