所以我不知道这条指令的作用,因为我开始组装 这个指令做了什么?
cmp byte ptr [edi],00 add [eax],al
答案 0 :(得分:3)
事实上,这是两个单独的指示:
cmp byte ptr [edi],00
add [eax],al
第一个转到edi
寄存器指示的内存地址&从该地址开始获取第一个字节,然后将其与00=0
进行比较。
第二条指令通过覆盖所有标志而不依赖它们来抛弃第一条指令的结果。
它将al
(8位寄存器)的内容移动到EAX
指向的内存位置,但由于al
是eax
的最低字节,因此它只是就像我们将eax
指向的地址中的最低字节复制到该地址指向的内存位置(我认为这是没有意义的)。
执行前:假设eax=0x00405060
--------------------
Address | Content (1byte)
--------------------
0x00405060 | 00
执行后:eax=0x00405060
(不会更改)
--------------------
Address | Content (1byte)
--------------------
0x00405060 | 60
如果您在执行指令后发现,我们已将地址(60)的最低字节复制到该地址指向的存储单元。