汇编语言练习题答案 下载本文

1、有两个16位字1EE5H和2A3CH分别存放在8086微机的存储器的000B0H和000B3H单元中,请用图表示出它们在存储器的存放情况。并读出000B1H字单元的内容。 答案:寄存器的存储情况如下:

000B0H

2、在实模式下,段地址和偏移地址为3017:000A的存储单元的物理地址是什么?如果段地址和偏移地址是3015:002A和3010:007A呢?

答案:段地址和偏移地址为3017:000A的存储单元的物理地址是:3017AH 段地址和偏移地址是3015:002A的存储单元的物理地址是:3017AH 段地址和偏移地址是3010:007A的存储单元的物理地址是:3017AH 这个题目充分验证了结论:同一个内存单元的逻辑地址和物理地址是多对一的关系。 3、如果一个程序已加载到内存,执行之前(CS)=0A7F0H,(IP)=2B40H,试问该程序的第一个字的物理地址是多少?

答案:PA=(CS)*16+(IP)=0A7F00H+2B40H=0AAA40H

4、根据以下要求写出相应的汇编语言指令。

(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中。 (2)把数0B5H与(AL)相加,并把结果送回AL中。

(3)将地址为2B00:0008的内存单元中的字型数据装入AX寄存器。 答案:

(1)ADD DX,AX

(2)ADD AL,0B5H (3)MOV BX,2B00H MOV DS,BX MOV AX,[8]

000B1H 000B2H 000B3H 000B4H

B3 00 E5 1E 5、指出下列指令的错误在哪里:

(1)MOV AH,BX (2)MOV CS,AX (3)ADD AX,DS (4)POP 123AH 答案:

(1)操作数类型不匹配

(2)传送指令中,寄存器CS不能作为目的操作数 (3)加法指令不能对寄存器DS进行操作

(4)出栈指令的操作数不能是常量,可以是除CS之外的段寄存器、16位的通用 寄存器以及字单元。

6、已知(SS)=0FFA0H,(SP)=00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令。试画出堆栈区和SP的内容变化过程示意图(标出存储单元的物理地址)。

答案:(1)8057入栈如下图所示

0FFA0H:00AC

0FFA0H:00AD

0FFA0H:00AE SP 57

0FFA0H:00AF 80 0FFA0H:00B0 (2) 0F79入栈如下图所示

0FFA0H:00AC SP 79

0FFA0H:00AD 0F

0FFA0H:00AE 57

0FFA0H:00AF 80 0FFA0H:00B0 (3)执行一条POP指令后,堆栈情况如图所示:

0FFA0H:00AC 79

0FFA0H:00AD 0F SP 0FFA0H:00AE 57

0FFA0H:00AF 80

0FFA0H:00B0 7、编写源程序实现以下功能:将10000h开始的16个内存单元的内容转移到20000h开始的16个内存单元中,同时将10000h开始的16个内存单元清零。 答案: ASSUME CS:CODE CODE SEGMENT START: MOV AX,1000H MOV DS,AX MOV AX,2000H MOV ES,AX MOV BX,0 MOV CX,10H S: MOV AL,[BX] MOV ES:[BX],AL MOV BYTE PTR [BX],0 INC BX LOOP S CODE ENDS END START

或者是: ASSUME CS:CODE CODE SEGMENT START: MOV AX,1000H MOV DS,AX MOV AX,2000H MOV ES,AX MOV BX,0 MOV CX,8H S: MOV AX,[BX] MOV ES:[BX],AX MOV WORD PTR [BX],0 ADD BX,2 LOOP S CODE ENDS END START