2.1 寻址方式与基本指令实验
2.1.1 实验目的
1、熟悉 80x86 寻址方式及基本指令的功能,进一步理解和巩固课堂学习内容。
2、掌握汇编语言程序设计上机过程, 掌握汇编语言源程序结构,为后续汇编语言程序设计打好基础。
3、熟悉 Microsoft 的 DEBUG 或 Borland 的 Turbo DEBUG 调试工具的使用方法
2.1.2 实验预习要求
1、认真阅读本书第一部分第 1 章,熟悉汇编语言程序设计上机步骤。
2、认真阅读本书第三部分,熟悉 DEBUG 调试工具的使用方法。
3、复习 80x86 操作数寻址方式及基本指令(数据传送、算术运算和逻辑运算等)。
4、了解实验内容,并在实验前根据课堂所学知识回答有关问题(个别取决于程序实际运行环境的问题
除外),以便在实验时进行验证。
2.1.3 实验内容
1、读懂下列源程序,使用 EDIT 生成名为 EX11.ASM 的源程序,汇编生成 EX11.OBJ 文件和 EX11.LST
文件,连接生成 EX11.EXE 文件;用 EDIT 打开 EX11.LST 文件,了解.LST 文件包含的信息;使用
DEBUG 调试工具单步执行 EX11.EXE 程序,注意观察 IP 值的变化,并回答下列问题。
(1)程序装入后,代码段寄存器 CS 的内容为________H,代码段第一条可执行指令 MOV
AX,
DATA 对应的机器代码为__________H,它是一个________字节指令,注意观察执行该指令时
IP 值的变化情况,该指令源操作数 DATA 的寻址方式是__________,其值为__________。
(2)执行完 MOV DS, DATA 指令后,数据段寄存器 DS 的内容为________H,源程序在数据段中
定义的数据 82H、68H 和 88H 被装入的存储单元的物理地址分别为________H、________H 和
________H。
(3)程序中第一条 ADD AL, [BX] 指令对应的机器代码为__________H,它是一个________字节
指令,注意观察执行该指令时 IP 值的变化情况;该指令中源操作数的寻址方式为__________,
该操作数所在存储单元的逻辑地址(DS): (BX)为__________,其物理地址为__________H;执
行完该指令后(AL)=______H,CF=______,OF______,ZF______,SF______,AF______,
PF______;若两操作数为无符号数,计算结果是否正确_______?若两操作数为带符号数,计
算结果是否正确________?若计算结果正确,结果是正数还是负数______?
(4)执行完第二条 ADD AL, [BX] 指令后(AL)=______H,CF=______,OF______,ZF______,
SF______,AF______,PF______;若两操作数为无符号数,计算结果是否正确_______?若两
操作数为带符号数,计算结果是否正确________?
(5)指令 MOV SUM, AL 中目的操作数的寻址方式为__________。该指令执行完后,注意观察
(DS):0003H 单元中值的变化,该单元的值变为________H。
DATA
DATA
CODE
DB ?
SEGMENT
NUM DB 82H, 68H, 88H
SUM
ENDS
SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV
MOV
MOV
AX, DATA
DS, AX
BX, OFFSET NUM
AL, [BX]
BX
AL, [BX]
BX
AL, [BX]
SUM, AL
AH, 4CH
21H
MOV
INC
ADD
INC
ADD
MOV
MOV
INT
ENDS
END START
CODE
2、读懂下列源程序;编辑、汇编、连接生成 EX12.ASM、EX12.OBJ、EX12.LST、EX12.EXE 文件;使
用 DEBUG 单步执行 EX12.EXE 文件,并回答以下问题。
(1)代码段的前三条指令 MOV AX, STACK、MOV SS, AX 和 MOV SP, LENGTH STL 的功能为
堆栈初始化,试问执行完这三条指令后,堆栈栈底所在单元的逻辑地址(SS): (SP)为________;
执行 PUSH AX 指令后堆栈指针寄存器(SP)=______H,此时,(SS): (SP+1)和(SS): (SP)单元的
值为_______H;执行完 PUSH BX 后(SP)=______H,此时,(SS): (SP+1)和(SS): (SP)单元的值
为_______H;执行完 POP AX 后(SP)=______H;执行完 POP BX 后(SP)=______H;此时
(AX)=______H,(BX)=______H。请读者通过对堆栈操作指令执行情况的观察,进一步掌握进、
出栈操作过程。
(2)执行 ADD AX, BX 指令后(AX)=________H,CF=______,OF______,ZF______,SF______,
AF______,PF______(注意考虑 PF 值与计算结果高 8 位有无关系);若两操作数为无符号数,
计算结果是否正确_______?若两操作数为带符号数,计算结果是否正确________?
(3)执行 AND AX, BX 指令后(AX)=________H,CF=______,OF______,ZF______,SF______,
AF______,PF______。
STACK SEGMENT stack
STL DW 100H DUP(?)
STACK ENDS
CODE
SEGMENT
ASSUME
CS:CODE,SS:STACK
START: MOV
MOV
MOV
AX, STACK
SS, AX
SP, LENGTH STL
;表达式“LENGTH STL”的功能为计算 STL 中定义的变量的个数,
;汇编后其值为 100H ,详见教材 5.2.2
MOV
MOV
PUSH
PUSH
ADD
POP
POP
AND
MOV
AX, 0101101100001010B
BX, 0100110010100011B
AX
BX
AX, BX
AX
BX
AX, BX
AH,4CH
CODE
21H
INT
ENDS
END START
3、指出下列指令的错误原因,上机运行,观察汇编程序(MASM.EXE)给出的出错信息,改正后再上机
验证。
(1) MOV
(3) MOV
(5) ADD
(7) PUSH
(9) MOV
有关常见汇编错误的详细内容见本书第三部分第 3 章“汇编语言程序常见汇编错误分析”。
BP, BL
[BX],20H
AX,[SI+DI]
2000H
CS,AX
(2) MOV
(4)
INC
(6) SHL
(8) POP
(10) MOV
[BX],[BP]
[SI]
AX,3
AL
DS,1000H
2.1.4 实验报告要求
1、写出任务 1 和任务 2 中所有问题的正确答案;对实验前做错或做不出来的问题,说明通过上机操作
对这些问题有哪些新的认识。
2、写出任务 3 中 10 条错误指令的错误原因,对可以改正的指令给出其正确形式,并分别记录汇编程序
对每条错误指令给出的出错信息。
3、简要说明汇编语言程序设计的步骤,每一步使用什么工具软件,生成什么类型的文件。
4、写出实验小结,内容包括实验心得(收获)、实验中遇到的问题及解决办法、不足之处或今后应注意
的问题等。