实验一-8086汇编语言上机调试及基本操作.
- 格式:doc
- 大小:331.50 KB
- 文档页数:12
实验一:8086汇编语言上机调试及基本操作
(验证性)
1、实验目的:
(1)掌握常用DEBUG命令: G,D,R,T,U,Q。
(2)掌握工具软件EMU8086。
(3)掌握完整程序设计方法的格式,能正确书写数据段,代码段等。
(4)掌握简单的数值转换算法
2、实验说明:
计算机中的数值有各种表达方式,这是计算机的基础。掌握各种数制之间的转换是一种基本功。
3、程序框图:对于0-999(即000H-3E7H)范围内的二进制数
4、参考程序:
; 将AX中的三位数拆为三个BCD码, 并存入Result 开始的三个单元
DATA SEGMENT; 数据段
RESULT_1 DB 1
RESULT_2 DB 1
RESULT_3 DB 1
DATA ENDS
STACK SEGMENT STACK ; 堆栈段
STA DB 64 DUP(0)
STACK_TOP DB 0
STACK ENDS
CODE SEGMENT; 代码段
ASSUME CS:CODE , DS:DATA , ES:DATA , SS:STACK
START:
MOV AX, DATA
MOV DS, AX ; 设置数据段
MOV AX, STACK
MOV SS, AX ; 设置堆栈段
LEA SP, STACK_TOP ; 设置栈顶指针
MOV AX, 2afH
MOV CL, 100
DIV CL
MOV RESULT_1, AL ; 除以100, 得百位数
MOV AL, AH
MOV AH, 0
MOV CL, 10
DIV CL
MOV RESULT_2, AL ; 余数除以10, 得十位数
MOV RESULT_3, AH ; 余数为个位数
MOV AX,4C00H ; 返回DOS
INT 21H ;
CODE ENDS
END START ; 最后一行要按回车键
5、实验及报告要求:
1)用合适的编辑软件编辑以上源文件并存入合适目录;要求补充注释未注释的
伪指令和指令;
2)分别在DOS和Windows下编译、连接生成可执行文件,比较两个环
境下生成的机器码的长度和内容;试指出第2、5、7、10、14条指令的IP和机器码。
3)分别在debug和emu8086下调试该可执行文件,给出程序运行时的各段
地址(CS=?,DS=?SS=?ES=?)举例说明debug的t,d,g,u等命令操作方法并对寄存器的变化作出解释;试改变被转换的三位数,并解释转换过程中标志寄存器中各标志位的结果;如何观察转换结果的变化?4)写出完整的实验报告,特别是“实验结果”与“实验总结体会”部分,是评分的
主要依据。
5)实验总结中要求结合实验中的经验、教训或体会对汇编语言格式、调试方法
和微机原理学习方法作出总结。
6、思考题:
1)用单步执行命令t运行程序,运行到mov ax, 4c00h,int 21h指令后,cs和
IP寄存器内容前后有何变化?产生变化的原因是什么?
2)试写出将BCD转换成二进制码的汇编程序。
【实验辅导资料】
1 汇编语言程序的上机过程
在计算机上运行汇编语言程序的步骤是:
1.用编辑程序建立ASM源文件;
2.用MASM程序把ASM文件转汇编成OBJ文件;
3.用LINK程序把OBJ文件转连接成EXE文件;
4.用DOS命令直接键入文件名就可执行该程序。
图1 汇编语言程序的建立及汇编过程
1.检查源程序;
2.测出源程序中的语法错误,并给出出错信息;
3.产生目标文件(.OBJ),并可给出列表文件(同时列出汇编语言源程序和
机器语言目标程序的文件,称之为.LST文件)和交叉索引文件(列出程序中使用的符号、变量和标号以及引用情况,称之为.CRF文件)。
4.展开宏指令。
1.1建立汇编语言的工作环境
为运行汇编语言程序至少要在磁盘上提供以下文件:
1.编辑程序,如EDIT.EXE
2.汇编程序,如MASM.EXE
3.连接程序,如LINK.EXE
4.调试程序,如
1.2 汇编语言源程序上机过程
1.建立汇编源程序ASM文件
2.汇编产生OBJ文件
3. 链接产生EXE文件
4. 程序的调试和执行
5. 生成EXE或COM文件
2 汇编语言程序格式
存储器的物理地址由段基址和偏移地址组合而成,任何一个逻辑段,无论是代码段,数据段,堆栈段,附加段都必须进行段定义,以便连接程序把不同段和模块连接成一个可执行程序。此外,还必须明确段和段寄存器之间的关系,这可使用段分配语句来完成。
1、段定义语句
4个逻辑段不一定全部要定义,通常代码段和数据段是必须的,附加段可以省略。但当代码段中使用了串指令,必须设置附加段作目标串基址用,附加段也可用来存放数据,增大数据段容量。
一般程序结构:
(1)代码段:存放程序执行的指令
(2)数据段:存放程序所需的数据
(3)堆栈段:存放程序执行的临时信息
数据段定义格式:
DATA SEGMENT ; 数据段
RESULT_1 DB 1
RESULT_2 DB 1
RESULT_3 DB 1
DATA ENDS
附加段的定义:
EXTRA SEGMENT
DEST_BUFFER DB 50 DUP (‘?’)
EXTRA ENDS
堆栈段的定义:
STACK SEGMENT STACK ; 堆栈段
STA DB 64 DUP(0)
STACK_TOP DB 0
STACK ENDS
2、段分配语句
在8086/8088系统中存储器采用分段结构,各段容量≦64K字节,用户可以设置多个逻辑段,但只允许4个逻辑段同时有效,段分配语句用来完成将逻辑段分别定义成代码段、数据段、堆栈段和附加段。
由于ASSUME伪指令只指定某个段分配给哪个段寄存器,并将代码段的段基址自动装入CS寄存器中,而不能自动把其它段基址装入相应的段寄存器中,所以在代码段的开始要有一段初始化程序完成这一工作。对堆栈段来说除了将段基址送入SS寄存器外,还要将栈顶偏移地址置入堆栈指示器SP中。
ASSUME CS:段名, DS:段名, ES:段名, SS:段名
(一)DOS下的汇编调试: