main()
{
*(char *)0x2000='a';
*(int *)0x2000=0xf;
*(char far *)0x20001000='a';
_AX=0x2000;
*(char *)_AX='b';
_BX=0x1000;
*(char *) (_BX+_BX)='a';
*(char far *)(0x20001000+_BX)=*(char *)_AX;
}
最后的赋值是多少?
重点分析
*(char *) (_BX+_BX)='a';
*(char far *)(0x20001000+_BX)=*(char *)_AX;
对应汇编如下:
-u 1fa
0B85:01FA 55 PUSH BP
0B85:01FB 8BEC MOV BP,SP
0B85:01FD C606002061 MOV BYTE PTR [2000],61
0B85:0202 C70600200F00 MOV WORD PTR [2000],000F
0B85:0208 BB0020 MOV BX,2000
0B85:020B 8EC3 MOV ES,BX
0B85:020D BB0010 MOV BX,1000
0B85:0210 26 ES:
0B85:0211 C60761 MOV BYTE PTR [BX],61
0B85:0214 B80020 MOV AX,2000
0B85:0217 8BD8 MOV BX,AX
0B85:0219 C60762 MOV BYTE PTR [BX],62
0B85:021C BB0010 MOV BX,1000
0B85:021F 03DB ADD BX,BX
0B85:0221 C60761 MOV BYTE PTR [BX],61
0B85:0224 8BD8 MOV BX,AX
0B85:0226 8A07 MOV AL,[BX]
0B85:0228 33C9 XOR CX,CX
0B85:022A 81C30010 ADD BX,1000
0B85:022E 81D10020 ADC CX,2000
0B85:0232 8EC1 MOV ES,CX
0B85:0234 26 ES:
0B85:0235 8807 MOV [BX],AL
0B85:0237 5D POP BP
0B85:0238 C3 RET
0B85:0239 C3 RET
0B85:023A 55 PUSH BP
0B85:023B 8BEC MOV BP,SP |