实验一-8086汇编语言上机调试及基本操作.

  • 格式:doc
  • 大小:331.50 KB
  • 文档页数:12

下载文档原格式

  / 12
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一: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下的汇编调试: