现 有 ( DS=2000H ) ,( BX=0100H ),( SI=0002H ),( 20100 ) =12H,( 20101 ) =34H,( 20102 ) =56H,( 20103 ) =78H,( 21200 ) =2AH,( 21201 ) =4CH,( 21202 ) =B7H,( 21203 ) =65H,填入下列指令执行后AX寄存器[1]的内容。MOV AX, 1200H; AX=__ MOV AX, BX; AX=__ MOV AX, [1200]; AX=__ MOV AX, [BX]; AX=__
现 有 ( DS=2000H ) ,( BX=0100H ),( SI=0002H ),( 20100 ) =12H,( 20101 ) =34H,( 20102 ) =56H,( 20103 ) =78H,( 21200 ) =2AH,( 21201 ) =4CH,( 21202 ) =B7H,( 21203 ) =65H,填入下列指令执行后AX寄存器[1]的内容。 MOV AX, 1200H; AX=__ MOV AX, BX; AX=__ MOV AX, [1200]; AX=__ MOV AX, [BX]; AX=__
题目解答
答案
我们来逐条分析题目给出的指令,并计算每条指令执行后 AX 寄存器 的内容。
已知条件:
- 寄存器和内存初始状态[2]:
DS = 2000HBX = 0100HSI = 0002H
- 内存中某些地址的内容(注意:数据以字节为单位存储,且采用小端方式存储,即低地址存低字节):
(20100H) = 12H(20101H) = 34H(20102H) = 56H(20103H) = 78H(21200H) = 2AH(21201H) = 4CH(21202H) = B7H(21203H) = 65H
> 注意:括号表示内存地址中的内容,例如 (20100) 表示地址 20100H 处的字节是 12H。
我们逐条执行以下指令:
1. MOV AX, 1200H
这是一条立即数传送指令,将立即数 1200H 传送到 AX 寄存器。
- 所以,执行后:
AX = 1200H
✅ 答案:AX = 1200H
2. MOV AX, BX
这是寄存器到寄存器的传送。将 BX 寄存器的值传送到 AX。
- 已知:
BX = 0100H - 所以执行后:
AX = 0100H
✅ 答案:AX = 0100H
3. MOV AX, [1200]
这是一条内存传送指令,将内存地址 [1200] 处的一个字(16位,2字节)传送到 AX。
但注意:这里的 [1200] 是一个偏移地址(EA),实际物理地址需要结合段寄存器。
默认情况下,[...] 使用 DS 段寄存器。
DS = 2000H- 偏移地址 =
1200H - 物理地址 =
DS × 16 + 偏移=2000H × 10H + 1200H = 20000H + 1200H = 21200H
所以我们需要从内存地址 21200H 处读取一个字(2字节)送到 AX。
(21200H) = 2AH(低字节)(21201H) = 4CH(高字节)
由于 x86 是小端模式,低字节在前,高字节在后。
所以 AX = 4C2AH
> 解释:低字节是 2AH,高字节是 4CH,组合成字就是 4C2AH
✅ 答案:AX = 4C2AH
4. MOV AX, [BX]
这条指令是寄存器间接寻址,从 [BX] 所指向的地址中读取一个字送到 AX。
BX = 0100H- 段寄存器仍默认为
DS = 2000H - 物理地址 =
DS × 16 + BX=20000H + 0100H = 20100H
从地址 20100H 读取一个字(2字节):
(20100H) = 12H(低字节)(20101H) = 34H(高字节)
所以 AX = 3412H(小端方式)
✅ 答案:AX = 3412H
最终答案汇总:
MOV AX, 1200H→ AX = 1200HMOV AX, BX→ AX = 0100HMOV AX, [1200]→ AX = 4C2AHMOV AX, [BX]→ AX = 3412H
✅ 填入结果:
- MOV AX, 1200H; AX= 1200H
- MOV AX, BX; AX= 0100H
- MOV AX, [1200]; AX= 4C2AH
- MOV AX, [BX]; AX= 3412H
最终答案:
$\boxed{ \begin{aligned}&\text{MOV AX, 1200H; } AX = 1200H \\&\text{MOV AX, BX; } AX = 0100H \\&\text{MOV AX, [1200]; } AX = 4C2AH \\&\text{MOV AX, [BX]; } AX = 3412H\end{aligned} }$
解析
本题主要考查8086汇编语言中不同寻址方式下的数据传送指令对寄存器内容的影响,解题关键在于理解立即数传送、寄存器间传送、直接寻址和寄存器间接寻址的原理,以及物理地址的计算和小端存储模式。
- MOV AX, 1200H
- 这是立即数传送指令,直接将立即数1200H传送到AX寄存器。
- 所以执行后,AX的值就是1200H。
- MOV AX, BX
- 此为寄存器到寄存器的传送指令,把BX寄存器的值传送到AX寄存器。
- 已知BX = 0100H,那么执行后AX = 0100H。
- MOV AX, [1200]
- 这是直接寻址的内存传送指令,要将内存地址[1200]处的一个字(16位,2字节)传送到AX。
- 这里的[1200]是偏移地址(EA),在默认情况下,使用DS段寄存器来计算物理地址。
- 根据物理地址计算公式:物理地址 = DS × 16 + 偏移地址。
- 已知DS = 2000H,偏移地址 = 1200H,将其代入公式可得:物理地址 = 2000H × 10H + 1200H = 20000H + 1200H = 21200H。
- 从内存地址21200H处读取一个字(2字节),已知(21200H) = 2AH(低字节),(21201H) = 4CH(高字节)。
- 由于x86架构采用小端模式,即低字节在前,高字节在后,所以AX = 4C2AH。
- MOV AX, [BX]
- 这是寄存器间接寻址的内存传送指令,从[BX]所指向的地址中读取一个字送到AX。
- 已知BX = 0100H,段寄存器默认使用DS = 2000H。
- 同样根据物理地址计算公式:物理地址 = DS × 16 + BX。
- 代入数值可得:物理地址 = 20000H + 0100H = 20100H。
- 从地址20100H读取一个字(2字节),已知(20100H) = 12H(低字节),(20101H) = 34H(高字节)。
- 按照小端模式,AX = 3412H。