① MOV AX,1234H 立即数寻址 ② MOV AX,BX 寄存器寻址 ③ MOV AX,[SI] 寄存器间接寻址 物理地址为0B10OH ④MVAX,[1234H 直接寻址 物理地址为0C234H ⑤ MOV AX,[BX+400H 基址寻址 物理地址为OB700H ⑥ MOV AX,[BX+SI] 基址加变址寻址 物理地址为0B40OH ⑦ MOV AX,[BX+DI+0400H]带位移的基址加变址寻址物理地址为0B900H 2.解: SF ZF AF PF CF OF ① ADDAX,BX(AX)=8410H 01001 ② SUBAX,BX(AX=5C2EH 000100 ③ ANDAX,BX(AX)=101H 00*100 ④ORAX,BX (AXF73FFH 00*100 ⑤ XORAX,BX(AX=63EEH 100 ⑥ IMUL BL (AXF FE2FH ⑦ MUL BH (AX)=024DH ⑧ SHRAX,2 AXF IC07H 00*01 ⑨ SARAX,2 (AX)=1C07E 00 01 ① SHLAX,2 (AXF CO7CH 0*01 *表示该标志位未定义 3解: ①下一条将要执行的指令地址为10750010 ②下一条将要执行的指令地址为1075:1000 ③下一条将要执行的指令地址为1075:1000 注:此题错的同学比较多,实际上,指令 JMP 1000H 意味着转移到的地址就是1000H,但是在该指令对应的机器语言编码中地址值并 不是1000H,而是当前IP加递增值与l000之间的差(偏移量),该偏移量按8 位或16位进行编码,这取决于差的大小 下面是用 Debug对该指令进行验证的过程:
1. 解: ①MOV AX, 1234H 立即数寻址 ②MOV AX, BX 寄存器寻址 ③MOV AX, [SI] 寄存器间接寻址 物理地址为 0B100H ④MOV AX, [1234H] 直接寻址 物理地址为 0C234H ⑤MOV AX, [BX+400H] 基址寻址 物理地址为 0B700H ⑥MOV AX, [BX+SI] 基址加变址寻址 物理地址为 0B400H ⑦MOV AX, [BX+DI+0400H] 带位移的基址加变址寻址 物理地址为 0B900H 2. 解: SF ZF AF PF CF OF ①ADD AX, BX (AX)= 8410H 1 0 1 0 0 1 ②SUB AX, BX (AX)= 5C2EH 0 0 0 1 0 0 ③AND AX, BX (AX)= 1011H 0 0 * 1 0 0 ④OR AX, BX (AX)= 73FFH 0 0 * 1 0 0 ⑤XOR AX, BX (AX)= 63EEH 0 0 * 1 0 0 ⑥IMUL BL (AX)= FE2FH * * * * 1 1 ⑦MUL BH (AX)= 024DH * * * * 1 1 ⑧SHR AX, 2 (AX)= 1C07H 0 0 * 0 1 * ⑨SAR AX, 2 (AX)= 1C07H 0 0 * 0 1 * ⑩SHL AX, 2 (AX)= C07CH 1 0 * 0 1 * *表示该标志位未定义 3.解: ① 下一条将要执行的指令地址为 1075:0010 ② 下一条将要执行的指令地址为 1075:1000 ③ 下一条将要执行的指令地址为 1075:1000 注:此题错的同学比较多,实际上,指令 JMP 1000H 意味着转移到的地址就是 1000H,但是在该指令对应的机器语言编码中地址值并 不是 1000H,而是当前 IP 加递增值与 1000H 之间的差(偏移量),该偏移量按 8 位或 16 位进行编码,这取决于差的大小。 下面是用 Debug 对该指令进行验证的过程:
F区 :\WINDOW S>debug 303 MP1000 BP=0000 1000D=0000 NV UP EI PL N 注意用T命令执行MP1000H指令后,IP的值已经变为1000,因此下一条将要 执行的指令地址为1075:1000,其物理地址为10750H 再注意到JMP100OH的机器码为E9FD0C,其中E9为操作码,操作数为FD0C, 这是一个三字节的指令,因此IP的递增值为3,当前IP加递增值为303H,303H 与1000H之间的差为OCFD,该值在指令的机器码中被编码为FDOC 由汇编语言指令到机器语言的翻译工作是由汇编程序(汇编器)完成的,我们可 以不管这一过程 以后遇到这样的题,直接给出结果就可以了,至于指令对应的机器码,不管也罢
注意用 T 命令执行 JMP 1000H 指令后,IP 的值已经变为 1000,因此下一条将要 执行的指令地址为 1075:1000,其物理地址为 10750H 再注意到 JMP 1000H 的机器码为 E9FD0C,其中 E9 为操作码,操作数为 FD0C, 这是一个三字节的指令,因此 IP 的递增值为 3,当前 IP 加递增值为 303H,303H 与 1000H 之间的差为 0CFD,该值在指令的机器码中被编码为 FD0C 由汇编语言指令到机器语言的翻译工作是由汇编程序(汇编器)完成的,我们可 以不管这一过程 以后遇到这样的题,直接给出结果就可以了,至于指令对应的机器码,不管也罢