微机原理及接口技术实验一
- 格式:doc
- 大小:59.50 KB
- 文档页数:9
微机原理与接口技术实验报告
班级: 学号: 姓名:
实验日期:2010-10-17 预习报告成绩: 实验成绩:
实验一 系统认识实验
一、 实验目的
掌握微型计算机汇编软件调试源程序的基本操作。熟悉传送类指令、简单运算类指令来编写汇编语言源程序,掌握调试过程及实验结果分析。
二、 实验内容
1、 从3500H内存单元开始建立0~15共16个数据(建立的数据为00H,01H~09H,0AH~0FH),并运行之,检查记录结果。
实验程序清单:
DATA SEGMENT
ORG 3500H ;设定起始偏移地址
MEM1 DB 16 DUP(?)
DATA ENDS
CODE SEGMENT ;定义代码段
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV DI,3500H ;设数据区首址
MOV CX,0010H ;字节数送入CX
MOV AH,00H
SAHF ;清标志寄存器
MOV AL,00H
A1: MOV [DI],AL ;写入一字节
ITC DI ;修改地址指针
INC AL ;修改数据
LOOP A1 ;未填完转移
MOV AH,4CH
INT 21H
CODE ENDS ;代码段结束
END START
2、 如果1建立的数据为BCD码表示的十进制数据(即建立的数据为00H,01H-09H,10H-15H),修改上述程序并完成调试,检查记录结果。
实验程序清单:
DATA SEGMENT
ORG 3500H
MEM1 DB 16 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DI,3500H
MOV CX,0010H
MOV AH,00H
SAHF
MOV AL,00H
DAA
A1: MOV [DI],AL
INC DI
INC AL
DAA
LOOP A1
MOV AH,4CH
INT 21H
CODE ENDS
END START
3、 编程完成1+2+3+4+5+6+7+8+9求和运算。调试运行程序,并记录结果。
实验程序清单:
DATA SEGMENT
MEM1 DB 16 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DI,3500H
MOV CX,0010H
MOV AH,00H
SAHF
MOV AL,00H
A1: DAA
MOV [DI],AL
INC DI
INC AL
LOOP A1
MOV BX,3500H
MOV AH,0
MOV AL,0
DAA
MOV CX,9
SUM: ADD AL,DS:[BX+1]
DAA
INC BX
LOOP SUM
MOV AH,4CH
INT 21H
CODE ENDS
END START
4、 将内存3500H单元开始存放的0-9共10个字节数传递到3600H单元开始的数据区中(可分同一段中传送和段间传送)。
提示:改程序应该编写数据段,从3500H开始存放0-9共10个数;从3600H定义10个字节单元,准备接收数据。数据段定义如下:
实验程序清单:
DATA SEGMENT
ORG 3500H
MEM1 DB 0,1,2,3,4,5,6,7,8,9
ORG 3600H
MEM2 DB 10 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DI,3500H
MOV BX,3600H
MOV CX,10
S1: MOV AL,DS:[DI]
MOV DS:[BX],AL
INC DI
INC BX
LOOP S1
MOV AH,4CH
INT 21H
CODE ENDS
END START
思考题:
1、 如果上述数据段定义中没有ORG语句,则从什么内存地址开始存放数据?
2、 如果采用字数据传送,请修改程序,并调试运行程序,记录运行结果
3、 如果采用串传送指令(MOVSB,MOVSW),请修改程序,并调试程序,记录运行结果。
提示:如果使用MOVSB,MOVSW指令,要将原始数据串的段基地址放入DS寄存器,节后数据的目的串段基地址放入ES寄存器,可以使DS和ES设置成同一个段基地址(即逻辑段重叠);也可以设置成不同的逻辑段,即数据段和附加数据段
三、 实验方法和步骤
Ⅰ. 实验步骤
1. 输入源程序
打开WINDOWS环境下的汇编开发环境,输入源程序。在桌面上双击快捷方式图标“Masm for Windows集成实验环境”。出现其界面,其中右侧是源程序模板,按提示输入编写好的源程序。
在右侧窗口给出了段结构模板,根据模板输入源程序。模板中的段名可以自己修改定义,没有涉及的段可省略不写。
输入汇编语言源程序后,保存程序(规定扩展名为.asm ),使用ALT+X返回集成软件环境。
2. 汇编
编译/汇编成目标文件,单击运行菜单下“编译成目标文件(OBJ)”,等待系统汇编,汇编成功后,汇编信息显示于屏幕下面的窗口中,显示编译成功,则可进行第3步。如果显示错误提示信息,则返回第1步修改源程序后再汇编,直到无错误为止。
3. 连接
连接生成可执行文件。单击运行菜单下的“生成可执行文件(EXE)”,等待系统对汇编生成的.obj文件进行连接,连接成功后,生成相应的可执行文件(.EXE),信息显示于屏幕下方的窗口上。如果连接成功,则显示生成*.EXE文件成功,进行下一步DEBUG调试。否则,返回第1步,再汇编、连接,直到无错误信息为止。
4. 在DEBUG调试环境下进行程序的调试过程
通过DEBUG调试可以检查程序每一条指令及程序执行结果,以便查错和纠错。单击运行菜单下的“DEBUG调试”命令,则进入DEBUG调试环境,并将上述生成的可执行文件自动装入内存。
(1)反汇编。要确定你装入的程序在内存的位置,可通过反汇编来确定。反汇编是显示装入内存的汇编语言程序及其机器指令在内存的情况,在DEBUG命令提示符“-”下键入U并回车,操作过程如下:
-U↙回车;从当前IP指令指针开始反汇编。即刚装入内存的指令开始反汇编;或者
-U 0000↙回车;从起始偏移地址0000H开始反汇编,即刚装入内存的指令开始反汇编。
1) 键入U命令后,屏幕显示刚装入的汇编程序。
2) 当源程序较长时,再次键入U并回车,继续显示后面的程序,直到屏幕上出现该调试程序的结尾语句,例如上述的INT 21,其后的语句不是本程序的。
3) 在反汇编出来的程序中,符号地址已经用当前内存的实际地址表示,段寄存器已经装入了具体的段基址。
4) 数据和地址全部用十六进制表示,省略H不显示。
5) 第1、2列,为程序装入内存所在的物理地址,用逻辑地址形式表示,即段基地址:偏移地址。注意:不同计算机的软硬件环境不同,装入内存的物理地址可能会不同。
6) 第3列,为汇编语言指令语句对应的机器代码,4、5列为其助记符指令,但所有的符号都用实际地址或值表示。
7) 第1~10行为所编写的程序。
(2)运行程序。确定程序在内存中的位置后,就可以运行程序了。运行程序可以用单步运行、设断点运行和连续运行三种方式,具体操作如下。
1) 单步运行。单步运行是每运行一条指令后显示当前所有寄存器的内容以及下一条待执行指令。在“-”提示符下键入T=0000并回车,表示从偏移地址0000H开始执行下一条语句。屏幕显示CPU所有寄存器的内容,仅需查看与程序有关寄存器的结果。
继续执行下一条指令,在“-”提示符下键入T并回车,再执行下一条指令;反复键入T命令,就可一步一步地运行,直至程序最后一句语句为止。
2) 连续运行。在“-”提示符下键入G=0000 0017 并回车(系统默认段基址CS情况下,可不写段基址),该命令表示从偏移地址0000开始连续执行到0017结束。
3) 屏幕将会显示执行到0016H,停止在0017H时CPU各寄存器的值,最后一行显示暂停执行行的语句。
(3)内存单元内容显示。程序结束后,使用D命令可以查看某内存区域的内容。在DEBUG系统提示符“_”下键入DDS:3500并回车可查看0B61:3500H单元开始的内存单元数据。其中,0B61是DS的内容,在命令中也可以直接输入数据段基址值,3500是DI的内容。内存内容显示时,每行16个字节,用16进制表示,前8个字节和后8个字节用“_”区分。
(4)内存单元内容的修改。若要修改内存单元的内容,使用E命令,可进行如下操作,例如,将内存3500~3507单元的内容修改为FFH,在DEBUG系统提示符“_”下键入“EDS:3500”并回车。修改过程:首先显示3500单元原来内容00,键入新内容FF,按空格键显示下一单元(3501)单元内容00,键入新内容FF,如此往复。若要退出修改,按回车键。
用D命令查看已修改内存单元,看看内容是否已有变化。
(5)程序运行结束,请分析和记录运行结果。
四、 实验结果与数据分析