有没有办法可以比较和跳转一条指令:
C代码:
1. while(i<10)
2. {i++}
汇编代码:(eax=0)(ecx=10)
.while:
cmp eax, ecx
jge .endofwhile
add eax, 1
jmp .while
.endofwhile:
有没有办法可以在一条指令中执行第2行和第3行?
答案 0 :(得分:6)
是的,您可以将测试和分支视为单个指令,并且执行此操作的方法是将它们写为两条指令,使用现代英特尔处理器并遵循一些简单的规则(分支指令必须包含在测试指令结束的相同16字节代码行中,两条指令不能被任何其他指令分开,...)。
该机制称为macro-fusion。更详细的信息,包括适用宏观融合的精确条件,可从Agner Fog的manual,第82页获得。
答案 1 :(得分:6)
有没有办法可以在一条指令中执行第2行和第3行?
如果您允许更改C代码以向后计数:
1. i = 10;
2. while(--i >= 0);
然后你可以使用(单个)LOOP opcode。
LOOP是一个旧的指令,因此它可能在新的(Pentium ++)CPU上被弃用:其中“不赞成”我的意思是“仍然支持,但比使用Pascal的答案中给出的更原始的操作码更慢”。