x86中的CWD/CDQ/CQO和CBW/CWDE/CDQE指令
注意不要混淆这几个指令
CWD
: AX
符号位拓展到DX
CDQ
: EAX
符号位拓展到EDX
CQO
: RAX
符号位拓展到RDX
CBW
: AL
符号位拓展到DX
CWDE
: AX
符号位拓展到EAX
CDQE
: EAX
符号位拓展到RAX
CWD
,CDQ
,CQO
常配合除法指令使用。例如对于如下c语言代码
int divide(int a, int b) {
return a / b;
}
在Windows下使用gcc -S test.c -O1 -masm=intel
编译,会生成类似下面的代码
divide:
mov eax, ecx
mov ecx, edx
cdq
idiv ecx
ret