关于汇编指令的一个疑问

来源:百度知道 编辑:UC知道 时间:2024/06/30 19:15:39
Z←((W-X)/5*Y)*2
X、Y、Z、R、W均为存放16位带符号数单元的地址
MOV AX, W

SUB AX, X

CWD

MOV BX, 5

IDIV BX

IMUL Y

SHL AX, 1 ;((DX),(AX))*2

RCL DX, 1

这是对上面问题的汇编编码,我想问下他代码中为什么要用CWD命令?CWD有什么用?

在这个程序中,要做除法IDIV BX 这条指令执行的操作是 dx ax 这个32位的数 除以bx 。而根据前面几条指令,被除数已经有了,就是ax。所以我们要让dx ax这个32位的数 等于 ax 。这样得出来的数才是(W-X)/5。怎么办?
这就是cbd的作用了
是字扩展指令,作用是把字扩展成双字,具体操作是将ax的的符号位扩展到dx中。如果ax的最高位是1 dx就是16个1,如果ax最高位是0,那么dx就是16个0,也就是0. (注意是补码啊)