Content #
同一个负数,其表现形式略有差别。比如十进制数-3,它在8 位运算中是 11111101,即0xFD;在16 位运算中,则是1111111111111101,即0xFFFD。在计算机中,-3 是用0 减去3 得到的,在8 位运算中只能保留结果的低8 位,即 11111101(0xFD);在16 位运算中只能保留结果的低16 位,即 1111111111111101(0xFFFD)。很显然,一个8 位的有符号数,要想用16 位的形式来表示,只需将其最高位,也就是用来辨别符号的那一位(几乎所有的书上都称之为符号位,实际上这并不严谨),扩展到高8 位即可。
处理器专门设计了两条指令来做这件事:cbw(Convert Byte to Word)和 cwd(Convert Word to Double-word)。
cbw #
cbw 没有操作数,操作码为98。它的功能是,将寄存器AL 中的有符号数扩展到整个AX。如果AL 中的内容为01001111,那么执行该指令后,AX 中的内容为 0000000001001111;如果AL 中的内容为10001101,执行该指令后,AX 中的内容为1111111110001101。
cwd #
cwd 也没有操作数,操作码为99。它的功能是,将寄存器AX 中的有符号数扩展到DX:AX。
如果AX 中的内容为0100111101111001,那么执行该指令后,DX 中的内容为 0000000000000000,AX 中的内容不变;
如果AX 中的内容为1000110110001011,那么执行该指令后,DX 中的内容为 1111111111111111,AX 中的内容同样不变。