设(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=4CH,(21202H)=B7H,(21203H)=65H,试说明下列各条指令执行完后AX寄存器中的内容是多少?①MOV AX,1200H②MOV AX,BX③MOV AX,[1200H]④MOV AX,[BX]⑤MOV AX,1100H[BX]⑥MOV AX,[BX][SI]⑦MOV AX,1100H[BX][SI]

问题描述:

设(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=4CH,(21202H)=B7H,(21203H)=65H,试说明下列各条指令执行完后AX寄存器中的内容是多少?
①MOV AX,1200H
②MOV AX,BX
③MOV AX,[1200H]
④MOV AX,[BX]
⑤MOV AX,1100H[BX]
⑥MOV AX,[BX][SI]
⑦MOV AX,1100H[BX][SI]

这是计算机组成原理的考试题吧,首先,你这道题肯定抄漏了(21201H)的值,我在解答中把它标注为"XX",你自行替换即可.

解答如下:
①MOV AX,1200H
将十六进制数1200H赋给寄存器AX,执行这条指令后,AX的值为1200H

②MOV AX,BX
将BX寄存器的值赋给寄存器AX,因为BX最初的值为0100H,所以执行这条指令后,AX的值为0100H

③MOV AX,[1200H]
将内存偏移地址1200H处存储的数据存入AX中.按照:“数据段的段地址DS左移4位二进制位后+偏移地址 = 物理地址”的计算公式,可知[1200H]实际对应的物理地址是21200H,因此这条指令就是将(21200H)存储的值赋给AL,将(21201H)存储的值赋给AH,所以执行这条指令后,AX的值是"XX"4CH(你没给出(21201H)的值"XX",一定是抄错了)
④MOV AX,[BX]
这条指令使用了寄存器间接寻址,将BX寄存器中的数值0100H读出来,并以0100H为偏移地址,访问对应该偏移地址0100H的内存区域,即访问物理地址20100H.并将该内存区域(20100H)存储的数12H读出来,将12H赋给AL,再把(20101H)存储的数34H读出来并赋给AH,所以执行这条指令后,AX的值是3412H

⑤MOV AX,1100H[BX]
这条指令使用了相对基址寻址,计算方法:“DS段地址左移4个二进制位+BX中存储的数值+1100H =物理地址”.计算得到的物理地址是20000H+0100H+1100H = 21200H,所以应该将(21200H)存储的数值4CH赋给AL,将(21201H)存储的数值"XX"赋给AH,所以执行这条指令后,AX的值是"XX"4CH

⑥MOV AX,[BX][SI]
这条指令使用了基址变址寻址,计算方法::“DS段地址左移4个二进制位+BX中存储的数值+SI中存储的数值 =物理地址”.计算得到的物理地址是20000H+0100H+0002H = 20102H,所以应该将(20102H)存储的数值56H赋给AL,将(20103H)存储的数值78H赋给AH,所以执行这条指令后,AX的值是7856H

⑦MOV AX,1100H[BX][SI]
这条指令使用了相对基址变址寻址,计算方法:“DS段地址左移4个二进制位+BX中存储的数值+SI中存储的数值+1100H =物理地址”.计算得到的物理地址是20000H+0100H+0002H+1100H = 21202H,所以将(21202H)存储的数值B7H赋给AL,将(21203H)存储的数值65H赋给AH,所以执行这条指令后,AX的值是65B7H