|
发表于 2020-3-31 00:15:01
|
显示全部楼层
>1。书上说,双操作数的指令(比如mov)“必有”一个“寄存器”操作数,但是书上又说可以用立即数对存储器附值。mov mem,imm;两个操作数都不是寄存器啊?
第一句应改为:书上说,双操作数的指令(比如mov)“至多”有一个“段寄存器”操作数。没有也是可以的。所以mov mem,imm;没问题。
>2。+0,-0的八位机器数:原码分别是:00000000,10000000
反码是:00000000,11111111这个我能理解,负数的补码不是反码除符号位以外的取反加一吗?那么-0应该是:110000000(一共9位根本不能用八为机器数表示)啊。为什么书上说 -0 的补码是00000000(8位)呢?还有-128的反码是101111111(因为是9位所以8位机器码不能表示-128的反码),那么补码就改是反码加一等于
11000000(同样是9位啊)为什么书上是等于10000000(8位)。
0没有正负之分,如果硬要分应该归为正数的范围,就是说0的原码补码都是:00000000.
128表示为9位二进制数是:1 0000 0000,所以8位能表示的最大正数是1111 1111,-128取反时是对128的二进制数:1 0000 0000取反,得:0 1111 1111。取8位即1111 1111,1111 1111 + 1=1 0000 0000.8位补码即取1 0000 0000的低八位,也就是0000 0000
>3。mov ax,[ax,bx]
上面那条指令对源操作数是什么寻址方式?
如果是用MASM,意思是用AX,BX两个寄存器的值的和作为内存操作数的地址,将这个内存地址内的值付给AX。属于特殊的寄存器间接寻址,也可以叫做变址寻址。
>4。常量占内存吗?
不占用。
>5.mov al,c0h
add al,al
执行上面的语句后al=80h 但是c0h+c0h本该等于180h
那么对于标志位的影响是按80h来影响还是180h ??
1010 0000
+1010 0000
----------
J 0100 0000
"J"表示第八位向第九位产生的进位,ADD AL,AL后,AL=0100 0000b,即80H。运算产生的结果以及进位都对标志寄存器产生影响,所以对标志位产生影响的是180h。
|
|