Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 测试说明-它是如何工作的?_Assembly - Fatal编程技术网

Assembly 测试说明-它是如何工作的?

Assembly 测试说明-它是如何工作的?,assembly,Assembly,我想了解以下装配线: TEST DL,DL JE SHORT 6C250EDF 因此,在DL中,我们有字符“C”。实际上,值43是43的ANSCII代码。 我知道测试就像和,但在测试中我们不存储结果 但奥利德伯格表示,这一跳跃并未发生。这怎么可能?43和43是相等的,对吗? 那么,为什么不跳呢 我的第二个问题是:如何在C代码中转换它?您是对的,测试对其操作数执行逻辑AND,但是您的JE测试检查零标志,并且当AND的结果为零时,测试指令设置ZF,这仅在DL为零时发生: 在这里,您的代码正在测试D

我想了解以下装配线:

TEST DL,DL
JE SHORT 6C250EDF
因此,在DL中,我们有字符“C”。实际上,值43是43的ANSCII代码。 我知道测试就像和,但在测试中我们不存储结果

但奥利德伯格表示,这一跳跃并未发生。这怎么可能?43和43是相等的,对吗? 那么,为什么不跳呢


我的第二个问题是:如何在C代码中转换它?

您是对的,测试对其操作数执行逻辑AND,但是您的JE测试检查零标志,并且当AND的结果为零时,测试指令设置ZF,这仅在DL为零时发生:


在这里,您的代码正在测试DL-ise是否等于null;

如果您想要比较是否相等,并且使JE有意义,那么您需要使用CMP。测试仅在结果为0时设置Z标志。不是,是43。JZ是JE的别名,在这里使用JZ是有意义的。啊,好的。这意味着对于测试DL,DL(DL=43)的ZF为0。只有当ZF=1时才会跳转,这里不是这样,对吗?所以,如果我试着转换成C语言,那么我会写这样的东西:if((43&43)==0){…}在惯用的C语言中,你只需要说
if(dl==0){…}
TEST
指令只是设置条件寄存器的一种方便方法。好的,感谢您使用惯用C语言进行解释。它也很有帮助。。