已知DS=091DH,SS=1E4AH, AX=1234H, BX=0024H, CX=5678H, BP=0024H, SI=0012H, DI=0032H, (09226H)=00F6H, (09228H)=1E40H,(1E4F6H)=091DH。 执行 LEA BX,20H[BX][SI] M0V AL,2[BX] 问:AL=?
时间: 2023-11-12 10:06:35 浏览: 82
这是一道IT类问题。执行LEA BX,20H[BX][SI]后,BX的值为:
```
BX = BX + 20H + [BX][SI]
```
根据题目中的数值,BX的初始值为0024H,SI的值为0012H,所以:
```
BX = 0024H + 20H + [0024H][0012H]
BX = 0024H + 20H + [0026H]
BX = 0024H + 20H + 091DH
BX = 093CH
```
执行MOV AL,2[BX],即将BX+2处的值赋给AL寄存器,因为BX的值为093CH,所以:
```
AL = (093EH)= F6H
```
所以AL的值为F6H。
相关问题
在实模式下,假设(DS)=091DH,(SS)=1E4AH,(AX)=1234H,(BX)=0024H,(CX)=5678H,(BP)=0024H,(SI)=0012H,(DI)=0032H,(09226H)=00F6H,(09228H)=1E40H,(1E4E6H)=091DH。请分别给出下列各指令或程序段的执行结果。 (1)MOV CL,20H[BX][SI] (2)MOV [BP][DI],CX (3)LEA BX,20H[BX][SI] MOV AX,2[BX]
(1) MOV CL,20H[BX][SI]
这条指令的意思是,将位于地址DS:[BX+SI+20H]处的8位数据传送到寄存器CL中。
根据题目中给出的数据,DS=091DH,BX=0024H,SI=0012H,所以:
DS:[BX+SI+20H]=091D0H+0024H+0012H+20H=091D56H
从地址091D56H中读取数据00F6H,传送到寄存器CL中。
因此,执行结果为CL=00F6H。
(2) MOV [BP][DI],CX
这条指令的意思是,将寄存器CX中的16位数据传送到地址SS:[BP+DI]处。
根据题目中给出的数据,SS=1E4AH,BP=0024H,DI=0032H,所以:
SS:[BP+DI]=1E4A0H+0024H+0032H=1E4F6H
将CX中的数据5678H传送到地址1E4F6H处。
因此,执行结果为1E4F6H处的内存中存储的数据为5678H。
(3) LEA BX,20H[BX][SI] MOV AX,2[BX]
这两条指令一起执行,首先计算地址20H[BX][SI]的值,然后将此值存入BX寄存器中。然后将地址2[BX]的值传送到AX寄存器中。
计算地址20H[BX][SI]的值:
20H[BX][SI]=20H+DS:[BX+SI]
=20H+DS:[0024H+0012H]
=20H+DS:[0036H]
=20H+091D6H
=091D86H
将091D86H存入BX寄存器中。
然后将地址2[BX]的值传送到AX寄存器中。
2[BX]=DS:[BX+2]
=DS:[091D88H]
=091D88H处的内存中存储的数据为1E40H
因此,执行结果为AX=1E40H。
把0、5、10、15、…、5*n、…155依次存放于首址为40H的32个内部存储器单元中
首先,我们需要确定每个数应该存放在哪个内部存储器单元中。由于每个数占用2个字节的存储空间,我们可以将奇数位置作为低字节,偶数位置作为高字节。因此,第一个数0应该存放在40H和41H两个单元中,第二个数5应该存放在42H和43H两个单元中,以此类推。
下表展示了每个数应该存放的内部存储器单元地址。
| 序号 | 数字 | 地址(低字节) | 地址(高字节) |
| --- | --- | --- | --- |
| 1 | 0 | 40H | 41H |
| 2 | 5 | 42H | 43H |
| 3 | 10 | 44H | 45H |
| 4 | 15 | 46H | 47H |
| 5 | 20 | 48H | 49H |
| 6 | 25 | 4AH | 4BH |
| 7 | 30 | 4CH | 4DH |
| 8 | 35 | 4EH | 4FH |
| 9 | 40 | 50H | 51H |
| 10 | 45 | 52H | 53H |
| 11 | 50 | 54H | 55H |
| 12 | 55 | 56H | 57H |
| 13 | 60 | 58H | 59H |
| 14 | 65 | 5AH | 5BH |
| 15 | 70 | 5CH | 5DH |
| 16 | 75 | 5EH | 5FH |
| 17 | 80 | 60H | 61H |
| 18 | 85 | 62H | 63H |
| 19 | 90 | 64H | 65H |
| 20 | 95 | 66H | 67H |
| 21 | 100 | 68H | 69H |
| 22 | 105 | 6AH | 6BH |
| 23 | 110 | 6CH | 6DH |
| 24 | 115 | 6EH | 6FH |
| 25 | 120 | 70H | 71H |
| 26 | 125 | 72H | 73H |
| 27 | 130 | 74H | 75H |
| 28 | 135 | 76H | 77H |
| 29 | 140 | 78H | 79H |
| 30 | 145 | 7AH | 7BH |
| 31 | 150 | 7CH | 7DH |
| 32 | 155 | 7EH | 7FH |
接下来,我们使用汇编语言编写程序,将这些数字存储到对应的内部存储器单元中。
```
ORG 0000H ; 程序起始地址为0000H
MOV DPTR, #0040H ; DPTR指向40H
MOV R0, #0 ; R0计数器清零
MOV R1, #0 ; R1存储器地址低字节
MOV R2, #1 ; R2存储器地址高字节
LOOP:
MOV A, R0 ; A寄存器存储计数器值
MUL AB, #5 ; A = R0 * 5
ADD A, #40H ; A = A + 40H
MOV R1, A ; 存储器地址低字节 = A
MOV A, B ; A寄存器存储乘积的高字节
MOV R2, A ; 存储器地址高字节 = A
; 存储数字到内部存储器单元中
MOV A, R0 ; A寄存器存储计数器值
MOV @R1, A ; 低字节存储计数器值
INC R1 ; 存储器地址低字节加1
MOV A, R0 ; A寄存器存储计数器值
ANL A, #0F0H ; 将计数器值的低4位清零
SWAP A ; 将计数器值的高4位与低4位交换
MOV @R1, A ; 高字节存储计数器值
INC R0 ; 计数器加1
DJNZ R0, LOOP ; 如果计数器不为0,则跳转到LOOP
END ; 程序结束
```
这段程序使用了循环和乘法运算,可以将0、5、10、15、…、155依次存放到首址为40H的32个内部存储器单元中。