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。
对于代码#2XOR EAX,EAX
将把EAX寄存器设置为0。它是否设置了任何标志?如果不是,JNZ
指令如何确定是否跳转?
最后,为什么人们要检查EAX
是否为0?请帮我一个更简单详细的解释,我还是一个初学者。
TEST
和XOR
是用于对操作数执行逻辑操作的逻辑指令。
测试指令(比较操作数)
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接口的编译时检查。 该行对程序的执行没有