关于汇编语言的带符号数的有关问题,高手请进,急!

在汇编语言的书上有这样一句话:带符号数在机器中用补码形式表示。那么在下列程序语句中(MOV AX,9098H CWD)的9098H是不是某一个带符号数的补码?它最后的结果((DX:AX)=0FFFF9098H)中的F前为什么多了个0?还有一个问题是这样的:(设M=(EDX:EAX),N=(EBX:ECX),比较两个64位数,若M>N,则转向DMAX,否则转向DMIN.M,N记为带符号数),我想问的是其中M,N是不是某两个带符号的补码?其解答过程(先用带符号数转移指令比较高32位,再用无符号转移指令比较低32位)我认为好像有点问题,既然带符号数采用补码表示,那么比较应该全采用带符号转移指令才对呀?望高手详细指点。

1、9098H是一个带符号数的补码,转换成二进制数为10010000 10011000B,它的最高位为1,即符号位为1,所以扩展后为11111111 11111111 10010000 10011000B,对应的十六进制数为FFFF9098H,同时,为了将以A到F开头的十六进制数和变量区分开,因为变量是以字母开头的,所以要将以A到F开头的十六进制数前加一个0(零);
2、M,N分别是两个64位带符号的补码,最高位是它们的符号位,即EDX的最高位是M的符号位,EBX的最高位是N的符号位,而它们的低位是值而没有符号,即EAX和ECX中是M和N两个带符号数补码的低32位值,已经不包括符号位了
所以高32位比较用带符号数操作,低32位比较用无符号数操作是正确的。
注意:EDX:EAX整体表示64位带符号数M;EBX:ECX整体表示64位带符号数N。
M和N这两个64位数分别用两个32位表示,但各自只能有一个符号位,那就是各自的最高位。
温馨提示:答案为网友推荐,仅供参考
相似回答