8086、8088汇编语言程序设计实验指导书.doc

上传人:椰子壳 文档编号:5013710 上传时间:2020-01-28 格式:DOC 页数:31 大小:198KB
返回 下载 相关 举报
8086、8088汇编语言程序设计实验指导书.doc_第1页
第1页 / 共31页
8086、8088汇编语言程序设计实验指导书.doc_第2页
第2页 / 共31页
8086、8088汇编语言程序设计实验指导书.doc_第3页
第3页 / 共31页
8086、8088汇编语言程序设计实验指导书.doc_第4页
第4页 / 共31页
8086、8088汇编语言程序设计实验指导书.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《8086、8088汇编语言程序设计实验指导书.doc》由会员分享,可在线阅读,更多相关《8086、8088汇编语言程序设计实验指导书.doc(31页珍藏版)》请在三一文库上搜索。

1、仰恩大学电子工程系实验教材系列8086/8088汇编语言程序设计实验指导书 电子工程系 编2011年1月27安全用电须知安全用电是实验中始终需要注意的重要问题。为了做好实验,确保人身和设备的安全,实验时,必须严格遵守下列安全用电规则: (1) 接线、改接、拆线都必须在切断电源的情况下进行,即“先接线后通电,先断电再拆线“。 (2) 在电路通电情况下,人体严禁接触电路不绝缘的金属导线或连接点等带电部位。万一遇到触电事故,应立即切断电源,进行必要的处理。(3) 实验中,特别是设备刚投入运行时,要随时注意仪器设备的运行情况, 如发现有超量程、过热、异味、异声、冒烟、火花等,应立即断电,并请老师检查。

2、 (4) 实验时应精神集中,同组者必须密切配合,接通电源前须通知同组同学,以防止触电事故。 (5) 电机转动时,防止导线、发辫、围巾等物品卷入。 (6) 了解有关电器设备的规格、性能及使用方法,严格按额定值使用。注意仪表的种类、量程和连接使用方法,例如,不得用电流表或万用表的电阻档,电流档去测量电压;电流表、功率表的电流线圈不能并联在电路中等等。(7) 请穿绝缘胶鞋进入实验室。目 录第一部分 8088/8086汇编语言上机实验指导 一、上机实验目的 1二、上机前的准备 1三、用“记事本”编辑汇编的源程序 1四、MASM.EXE编译程序的运行 1五、LINK.EXE 生成可执行文件的运行 2六、

3、DEBUG.EXE 调试程序的运行 2七、Masm for Windows集成实验环境 3第二篇 汇编语言程序设计上机实验实验一:运行一个简单的汇编语言源程序4实验二:DEBUG命令的使用 6实验三:变量的属性 8实验四:DOS功能的调用与延时程序 11实验五: 综合实验 14实验六:串操作实验 19实验七:子程序设计实验 23第一部分 8088/8086汇编语言上机实验指导 一、上机实验目的1初步了解8086/8088汇编程序的基本结构,利用Windows XP附件的记事本编辑简单的汇编语言源程序,形成扩展名为 .ASM 的文本文件格式(即汇编源程序)。2. 学习宏汇编程序MASM.EXE

4、,连接程序LINK.EXE,调试程序 DEBUG .EXE的使用。3. 在微机上、在“Masm for Windows集成实验环境”下,运行并调试8086/8088汇编源程序。二、上机前的准备1. PC机的操作系统可以是Windoes98,也可以是Windows XP等操作系统。 2硬盘上安装“Masm for Windows集成实验环境”软件。或者含有MASM、LINK、DEBUG等文件的MASM5文件夹。(Windows XP自带DEBUG文件,因此应删除MASM5文件夹中的DEBUG文件,否则会产生冲突。)3. 学习MASM、LINK、DEBUG三个文件的使用方法。4. 准备好上机的源程

5、序,并认真去读懂它。(注:下面介绍的不是“Masm for Windows集成实验环境”软件的使用方法,而是直接在DOS状态下,使用MASM、LINK、DEBUG三个文件的方法。首先应将MASM5文件夹安装在C盘或D盘的根目录下)三、用“记事本”编辑汇编的源程序1. 用“记事本”编辑好源文件LH, LH假设为李华同学的源程序文件名(下同),则文件名是LH.ASM ,文件的扩展名一定要用.ASM。然后保存在C:MASM5的文件夹中。2编辑源程序时,注意不要有空行、光标也不要超过最后一行。四、MASM.EXE编译程序的运行 MASM.EXE编译程序主要目的是生成扩展名为.OBJ的目标文件。在DOS

6、状态下,进入MASM5文件夹中,即屏幕显示C:MASM5。此时键入MASM,回车后屏幕显示:Source filename.ASM:键入.ASM文件的文件名,如下:Source filename.ASM:LH (回车)Object filenameLH.OBJ: (回车)Source listing NUL.LST:LH(回车)如果LH.ASM文件正确,会生成目标文件(LH.OBJ)与列表文件(LH.OBJ)。汇编的目的是要形成目标文件,即机器代码文件,也就是LH.OBJ文件。该文件不是文本文件,因此用编辑软件是看不到的,看到的只是一些乱码。列表文件(LH.OBJ)是非常重要的一个文件,它将一

7、条汇编语句指令与一条机器码指令对应起来,并且给出了这条指令偏移地址的首地址。它对程序的分析非常有用,而且有助于汇编语言的学习。五、 LINK.EXE 连接程序的运行LINK.EXE 连接程序的主要目的是生成扩展名为.EXE可执行程序。在C:MASM5子目录下,键入LINK,回车后屏幕显示:Object modules.OBJ: 键入OBJ文件名,如下:Object Modules.OBJ:LH (回车)Run File LH.EXE: (回车)List File NUL.MAP:LH (回车)扩展名为.EXE程序是在DOS状态下的可执行程序。你只要键入LH.EXE文件的文件名LH就可以运行程序

8、。 扩展名为.MAP的LH.MAP程序是映像文件。六、DEBUG.EXE 调试程序的运行DEBUG是调试程序,它是可以对EXE可执行程序进行调试。在DOS状态下,键入:C:MASM5DEBUG LH.EXE回车后屏幕显示: - 上面的-是DEBUG状态下的提示符,表示目前系统在DEBUG的控制之下。我们主要学习DEBUG的Q,R,U,G,D,E,F,T 命令。这些命令的使用方法是在-提示符后键入相应命令的字母,如:-Q回车后就立即返回DOS状态。上面各命令分别解释如下:1 -Q 表示退出DEBUG状态。2 -R 显示CPU中除FLAG寄存器外的14个寄存器的内容,对于FLAG寄存器只显示它的O

9、F,DF,IF,SF,ZF,AF,PF,CF的状态。它是用两个字母来表示是0还是1的。表示的字母如下: 标志位名OFDFIFSFZFAFPFCF为1对应符 OV DN EI NGZR AC PE CY、为0对应符 NV UP DI PL NZ NA PO NC 如想查看某一寄存器的内容,可在-R后键入寄存器名,如: -R AX AX 2B6F : 1200 上面第二行2B6F为AX中的内容,第三行冒号后的1200为你键入的要修改的内容。3. -U 它是反汇编调试命令。(选看)因为被调试的程序LH.EXE是机器码语言,必须翻译成汇编语言程序人们才好读懂。注意反汇编的范围是在本段内。该命令有下面三

10、种格式: -U -(它是将当前CS:IP所指的地址开始的机器码反汇编32个字节指令。) -U地址 -(地址是反汇编开始的地址,可以是偏移地址也可以是逻辑地址。如:-U 2A 002A是反汇编开始的偏移地址 -U 11D0:0100 11D0:0100是反汇编开始的逻辑地址 ) -U 地址1 地址2 -(从地址1反汇编到地址2,如: -U 10 5F 从当前段的偏移地址0010反汇编到005F -U 01F5:10 5F 从01F5段的0010偏移地址开始反汇编到本段的005F为止4. -G 它是设置断点及启动程序运行命令。它有三种格式: -G -(断点是程序结束,它从当前CS:IP所指地址开始

11、直到程序结束。) -G=地址 -(从指定的地址开始直到程序结束) -G=地址1 地址2 -(从指定的地址1开始运行到地址2结束)5. -D 它是显示内存单元内容命令。它有两种格式: -D地址 -(显示从当前地址开始的内存128个字节的内容,如: -D DS:00 显示从DS所表示的数据段段地址,偏移地址0000开始的128个字节的内容) -D地址1 地址2 -(显示从地址1开始到地址2所有单元的内容,如: -D DS:00 FF 显示从DS所表示的数据段段地址,偏移地址0000开始到偏移地址为00FF结束的所有单元的内容)6. -E 一次修改一个内存单元内容命令。格式为: -E 地址 -(命令

12、输入后显示该地址所指示单元的内容,此时可键入要修改的内容。修改后可按回车键或空格键,按回车键为结束修改,按空格键可继续修改下一单元的内容)7. -F 将内存中若干个连续单元赋与同一数值,也就是修改。常用该命令给内存某一区域清零。如: -F DS:00 3F 00 -(将地址为DS:0000DS:003F的64个单元内容设为00H,也就是对这64个单元清零)8. -T 执行一条或多条指令的命令,也可称为单步执行命令。格式: -T -(命令后面没有参数,表示执行当前CS:IP为地址所指的一条指令) -T地址 -(执行地址所指的一条指令) -T地址|n -(执行以当前地址开始的n条指令)七、Masm

13、 for Windows集成实验环境Masm for windows 集成实验环境是针对汇编语言初学者的特点开发的一个简单易用的汇编语言学习与实验软件,现在已全面支持最新操作系统VISTA,支持DOS的16/32位汇编程序和Windows下的32汇编程序,它具有错误信息自动定位、关键字实时帮助并且在帮助中动画演示汇编指令的执行过程、语法着色、无限次撤消与恢复、WORD式的查找、替换、定位、支持中文、长文件名等功能。(具体操作可参看此软件的帮助文件)第二篇 汇编语言程序设计上机实验实验一:运行一个简单的汇编语言源程序 1实验目的: 1)通过运行一个简单的汇编语言源程序,了解8086/8088汇编

14、语言源程序的逻辑结构。 2)初步掌握汇编语言源程序上机汇编、调试、运行的过程。 2实验程序: 下面是一个16位二进制加法的源程序:STACK SEGMENT PARA STACKSTACK DW 256 DUP(?) ; 设置堆栈段 TOP LABEL WORDSTACK ENDSDATA SEGMENT DTA DW 2C3BH DTB DW 0A6DFH ; 设置数据段 DTC DW ?DATA ENDSCOSEG SEGMENTASSUME CS:COSEG,SS:STACK,DS:DATA ;规定COSEG是代码段,STACK堆栈段,DATA是START: MOV AX,STACK ;

15、数据段 MOV SS,AX ;设置堆栈段的段地址 MOV AX,TOP MOV SP,AX ;设置堆栈指针 MOV AX,DATA ; MOV DS,AX ;设置数据段段地址 MOV BX, DTA MOV CX, DTB ;16位二进制加法 ADD BX, CX MOV DTC, BX MOV AH,4CH INT 21H ;返回DOS操作系统COSEG ENDS END START 3目标文件与列表文件 汇编后要生成目标文件(.OBJ文件),列表文件(.LST文件)。最重要的是目标文件,它是源程序的机器码文件,它将通过LINK 文件的连接生成可以运行的执行文件,即.EXE文件。汇编后生成的

16、列表文件(也就是.LST 文件)如下,列表文件是为程序的设计者进行观察、分析用的。1 Microsoft (R) Macro Assembler Version 5.00 2 0000STACK SEGMENT PARA STACKSTACK 3 0000 0100 DW 256 DUP(?) 4 0200 TOP LABEL WORD 5 0200STACK ENDS 6 0000DATA SEGMENT 7 0000 2C3B DTA DW 2C3BH 8 0002 A6DF DTB DW 0A6DFH 9 0004 ? DTC DW ? 10 0006DATA ENDS 11 0000C

17、OSEG SEGMENT ASSUME CS:COSEG,SS:STACK,DS:DATA 12 0000 B8 - RSTART: MOV AX,STACK 13 0003 8E D0 MOV SS,AX 14 0005 36: A1 0200 R MOV AX,TOP 15 0009 8B E0 MOV SP,AX 16 000B B8 - R MOV AX,DATA 17 000E 8E D8 MOV DS,AX 18 0010 8B 1E 0000 R MOV BX, DTA 19 0014 8B 0E 0002 R MOV CX, DTB 20 0018 03 D9 ADD BX,

18、CX 21 001A 89 1E 0004 R MOV DTC, BX 22 001E B4 4C MOV AH,4CH 23 0020 CD 21 INT 21H 24 0022 COSEG ENDS 25END START 在上面的列表文件中的第2224行是列表程序的核心部分,这一部分对应着用户源程序重要执行的代码段。我们观察第20行:20 0018 03 D9 ADD BX, CX “0018(16进制)”是“ADD BX, CX”这条指令在代码段中的偏移地址,它的段地址要通过连接后生成的.EXE文件在运行时由操作系统来决定。“03D9”是这条指令的机器码,“03”是操作码,表示进行加法

19、运算。“D9”是操作码字节,它表示源操作数是“CX寄存器”,目的操作数是“BX寄存器”。再观察第12行:12 0000 B8 - RSTART: MOV AX,STACK 偏移地址是“0000”,表示“MOV AX,STACK”是代码段的第一条指令,“B8”是操作码,表示要将堆栈段“STACK”的段地址给“AX寄存器”。“- R”表示浮动的地址,因为堆栈段的段地址要通过连接运行时由操作系统来决定。 4上机操作1). 编辑: 用“记事本”编辑好上例源文件存在C:目录下. TEST1.ASM2). 汇编: 在Masm for Windows集成实验环境中打开TEST1.ASM 文件, 然后在点击运

20、行项, 在其下拉菜单中点击编译成目标文件(OBJ), 如果你输入的文件完全正确,将在下面的栏中显示:编译源程序C: TEST1.ASM编译成功3). 连接: 在Masm for Windows集成实验环境中点击运行项, 在其下拉菜单中点击生成可执行文件(EXE), 如果你输入的文件完全正确,将在下面的栏中显示:编译源程序C: TEST2.ASM生成EXE文件成功 4). 调式: 在Masm for Windows集成实验环境中点击运行项, 在其下拉菜单中点击DEBUG调试, 在屏幕上出现如下信息: - (1) 用 U 命令观察文件,注意文件的终止地址.(2) 用 T 命令观察命令执行情况,单步

21、执行.(3) 用 G 命令运行程序 : -G 00 终止地址(4) 用 D 命令观察内存的情况: -D DS:00 5)在 DEBUG状态下,用 E 命令改变两个加数的大小,再运行后, 用同样方法观察运算结果。 5. 思考题: 如何编写32位的加法(或减法)程序?实验二:DEBUG命令的使用1实验目的: DEBUG的R,U,G,D,E,F,T,Q命令的使用方法。 1) -R 显示CPU中除FLAG寄存器外的14个寄存器的内容, 如想查看某一寄存器的内容,可在-R后键入寄存器名,如: -R AX AX 2B6F : 1200 上面第二行2B6F为AX中的内容,第三行冒号后的1200为你键入的要修

22、改的内容。2). -U 它是反汇编调试命令。 -U -(它是将当前CS:IP所指的地址开始的机器码反汇编32个字节指令。) -U 地址1 地址2 -(从地址1反汇编到地址2,如: -U 00 2F 从当前段的偏移地址0000反汇编到002F 3). -G 它是设置断点及启动程序运行命令。 4). -D 它是显示内存单元内容命令。它有两种格式: -D地址 -(显示从地址开始的内存128B的内容,如: -D DS:00 显示从DS段地址,偏移地址0000开始的128个字节的内容) 5). -E 一次修改一个内存单元内容命令。格式为:-E 地址 6). -F 将内存中若干个连续单元赋与同一数值,也就

23、是修改。常用该命令给内存某一区域清零。如: -F DS:00 3F 00 -(将地址为DS:0000DS:003F的64个单元内容设为00H)7). -T 称为单步执行命令。格式: -T -(命令后面没有参数,表示执行当前CS:IP为地址所指的一条指令) -T地址 -(执行地址所指的一条指令) 8). Q 表示退出DEBUG状态。 2实验程序: 将自然增减的31个数据(00H-0FH-00H)写入内存, 内存的首地址为20000H, 源程序如下:STACK SEGMENT STACK DW 64 DUP(?) ;设置堆栈段 STACK ENDSCODE SEGMENTASSUME CS:COD

24、E, SS:STACK MAIN PROC FARSTART: MOV AX,2000H ;数据段段地址 MOV DS,AX MOV SI,0 ;数据段偏移地址 MOV CL,0FH ; XOR AX,AX ; 0AXA1: MOV SI, AL INC AL INC SI ;递增000FH DEC CL JNZ A1 ;CL=0, 结束循环 MOV CX, 10HA2: MOV SI, AL INC SI DEC AL ;递减0F-00H LOOP A2 ;CX=0, 结束循环 INT 20H ;程序结束MAIN ENDPCODE ENDS END START上机操作:1). 编辑: 用“记

25、事本”编辑好源文件存在C:目录下. TEST2.ASM2). 汇编: 在Masm for Windows集成实验环境中打开TEST2.ASM 文件, 然后在点击运行项, 在其下拉菜单中点击编译成目标文件(OBJ), 如果你输入的文件完全正确,将在下面的栏中显示:编译源程序C: TEST2.ASM编译成功3). 连接: 在Masm for Windows集成实验环境中点击运行项, 在其下拉菜单中点击生成可执行文件(EXE), 如果你输入的文件完全正确,将在下面的栏中显示:编译源程序C: TEST2.ASM生成EXE文件成功 4). 调式: 在Masm for Windows集成实验环境中点击运行

26、项, 在其下拉菜单中点击DEBUG调试, 在屏幕上出现如下信息: - (1) 用 U 命令观察文件,注意文件的终止地址.(2) 用 T 命令观察命令执行情况,单步执行.(3) 用 G 命令运行程序 : -G 00 1F(4) 用 D 命令观察内存的情况: -D DS:003. 思考题: 在实验程序TEST2.ASM基础上,写出将内存单元(0000H000FH)的内容送到(0030H003FH)的程序, 并存在C:目录下. TEST21.ASM。实验报告中写出汇编及连接通过的源程序, 写出用DEBUG观察到内存(0000H003FH)的内容。实验三:变量的属性1. 实验目的:1) 通过本实验初步

27、了解汇编语言源程序的结构。认识和理解变量的五个属性-SEG,OFFSET,TYPE,LENGTH,SIZE。主要是前面三个属性。 2) 学会在DEBUG下调试程序,了解变量在内存中存放的情况。2. 上机程序:下面是列表程序(去掉了一些不重要的部分),下面列表程序的右边部分是要从键盘输入的源程序。 1 NAME PROPERTY OF VAIRIABLE 2 0000 STACK SEGMENT PARA STACKSTACK ;堆栈段的起始伪指令 3 0000 00C8 STAPN DB 256 DUP(?) ;设置堆栈区的长度 TOP=LENGTH STAPN ;使堆栈指针指向栈底 8 00

28、C8 STACK ENDS ;堆栈段中止的伪指令 9 0000 DATA SEGMENT ;数据段的起始伪指令 10 0000 20 DATA1 DB 20H ;本数据段有11个变量 11 0001 A204 FF00 DATA2 DW 0A204H,-100H 12 0005 FD 05 DATA3 DB (-1*3),(15/3) 13 0007 45230100 DATA4 DD 12345H 14 000B 30 31 32 33 DATA5 DB 0123 15 000F 4142 0043 0044 DATA6 DW AB,C,D 16 0015 ? DATA7 DB ? 17 0

29、016 ? DATA8 DD ? 18 001A 000D DATA9 DB 10 DUP(?) 22 0027 0003 DATA10 DB 2 DUP(0CH,0DH,2 DUP(00,0EEH) 31 0039 0002 DATA11 DW 2 DUP(?) 35 003D DATA ENDS ;数据段中止的伪指令 36 0000 COSEG SEGMENT ;码段(程序段)开始伪指令 37 ASSUME CS:COSEG,SS:STACK,DS:DATA,ES:DATA 38 0000 B8 - R START: MOV AX,STACK ;将堆栈段的段地址给SS 39 0003 8E

30、 D0 MOV SS,AX 40 0005 B8 00C8 MOV AX,TOP ;将堆栈指针给SP 41 0008 8B E0 MOV SP,AX 42 000A B8 - R MOV AX,DATA ;将数据段的段地址给DS 43 000D 8E D8 MOV DS,AX 44 000F 8E C0 MOV ES,AX ;将数据段的段地址给ES 45 0011 BB - R MOV BX,SEG DATA4 ;将DATA4的段地址给BX 46 0014 89 1E 001A R MOV WORD PTR DATA9,BX ;BX中的内容给DATA9 47 0018 BB 0007 R MO

31、V BX,OFFSET DATA4 ;DATA4的偏移地址给BX 48 001B 89 1E 001E R MOV WORD PTR DATA9+2,BX ;BX中的内容给DATA92 49 001F B2 04 MOV DL,TYPE DATA4 ;DATA4的类型给DL 50 0021 88 16 0022 R MOV DATA9+4,DL ;DL中的内容给DATA94 51 0025 B2 01 MOV DL,LENGTH DATA4 ;DATA4的长度给DL 52 0027 88 16 0023 R MOV DATA9+5,DL ;DL中的内容给DATA95 53 002B B2 04

32、 MOV DL,SIZE DATA4 ;DATA4的尺寸给DL 54 002D 88 16 0024 R MOV DATA9+6,DL ;DL中的内容给DATA96 55 0031 B1 03 MOV CL,LENGTH DATA10 ;DATA10的长度给CL 56 0033 88 0E 0025 R MOV DATA9+7,CL ;CL中的内容给DATA97 57 0037 B1 03 MOV CL,SIZE DATA10 ;DATA10的尺寸给CL 58 0039 88 0E 0026 R MOV DATA9+8,CL ;CL中的内容给DATA98 59 003D A1 0001 R M

33、OV AX,DATA2 ;变量DATA2的内容给AX 60 0040 03 06 0003 R ADD AX,DATA2+2 ;(AX)变量DATA22给AX 61 0044 A3 0039 R MOV DATA11,AX ;AX中的内容给变量DATA11 62 0047 8B 16 0001 R MOV DX,DATA2 ;变量DATA2的内容给DX 63 004B 2B 16 0003 R SUB DX,DATA2+2 ;(DX)变量DATA22给DX 64 004F 89 16 003B R MOV DATA11+2,DX ;DX中的内容给变量DATA112 65 0053 B4 4C

34、MOV AH,04CH ;准备返回DOS 66 0055 CD 21 INT 21H ;返回DOS 67 0057 COSEG ENDS ;码段到此结束的伪指令 68 END START ;程序到此结束的伪指令3. 实验成功后认真填写下表:变量名称偏移地址内容变量名称偏移地址内容变量名称偏移地址内容 注:实验中,先将数据填入上表,然后再抄在实验报告上。 4. 实验课作业 作业题:X,Y分别为32位二进制数:X= 43D8 B920H ;Y= 2B4E F912H 编写程序计算:Z = X + Y 作业指导:堆栈段、数据段、结束部分的格式如下,只须编写计算Z=X+Y的程序,填写在其中:NAME Z=X+YSTACK SEGMENT PARA STACKSTACK STAPN DB 200 DUP(?) TOP=LENGTH STAPNSTACK ENDSDATA SEGMENT X DD 43D8B920H Y DD 2B4EF912H Z DD ?DATA ENDSCOSEG SEGMENT ASSUME CS:COSEG,SS:STACK,DS:DATA,ES:DATASTART: MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV AX,DATA MOV DS,AX MOV ES,AX

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1