你能解释一下下面的汇编代码是如何工作的吗?
xor ebx, ebx;
mov bl, byte ptr[ecx];
cmp ebx, 0;
Run Code Online (Sandbox Code Playgroud)
我不明白为什么你将字节移动到bl然后比较ebx而不是bl。
bl是ebx寄存器中低 8 位(位 7-0)的名称。还有bh哪个是 的第 15-8 位ebx,bx是低 16 位(第 15-0 位)。高 16 位没有名称。
这适用于所有的寄存器eax,ebx,ecx和edx。
鉴于它ebx首先被归零,结果代码可能是编译器进行编译的结果,例如:
char ch;
const char str;
int i;
...
ch = str[i];
if (ch == 0) ...
Run Code Online (Sandbox Code Playgroud)
[或者可能只是if (ch)]。
到 32 位的扩展可能是由于“节省空间”或“运行速度更快”,或者在右侧if (ch == 0)有一个int并且需要将值比较为int而不是作为char= 字节的事实- 我不能在没有看到原始源代码的情况下说出哪个 - 即便如此,编译器中的实际代码生成还是相当复杂的一组决定,基于“什么在哪个处理器上运行速度快”和“根据语言的正确性”。
| 归档时间: |
|
| 查看次数: |
5042 次 |
| 最近记录: |