《汇编语言程序设计的实验环境及实验步骤》由会员分享,可在线阅读,更多相关《汇编语言程序设计的实验环境及实验步骤(161页珍藏版)》请在金锄头文库上搜索。
1、第一章第一章 汇编语言程序设计的实验环境及实验步骤汇编语言程序设计的实验环境及实验步骤知识提要:知识提要:本章主要进行汇编语言实验环境及实验步骤,涉及到的知识点包括: 1、汇编语言源程序编写好以后, 必须经过下列几个步骤才能在机器上运行: (1) 编辑源程序(生成.ASM 文件) (2) 汇编源程序(.ASM .OBJ) (3) 连接目标程序(.OBJ .EXE ) (4) 调试可执行程序(使用调试程序 Debug 调试生成的.EXE 文件) (5) 运行程序输出结果。 2、 Windows 环境下的汇编语言集成编程环境的使用实验一实验一 DOSDOS 环境下的汇编语言编程环境使用环境下的汇编
2、语言编程环境使用( (基础与验证型)基础与验证型)一、实验要求和目的1、掌握汇编语言程序设计的基本方法和技能; 2、熟练掌握使用全屏幕编辑程序 EDIT 编辑汇编语言源程序; 3、熟练掌握宏汇编程序 MASM 的使用; 4、熟练掌握连接程序 LINK 的使用。二、软硬件环境1、硬件环境:微机 CPU 486 以上,500MB 以上硬盘,32M 以上内存; 2、软件环境:装有 MASM 5.0、DEBUG、LINK、EDIT、CREF.EXE 和 EXR2BIN.EXE 等应用程序。三、实验涉及的主要知识单元1、汇编语言源程序的汇编过程汇编语言源程序的汇编过程是是利用汇编程序(MASM)对已编辑
3、好的源程序文件(.ASM)进行汇编, 将源程序文件中以 ASCII 码表示的助记符指令逐条翻译成机器码指令,并完成源程序中的伪指令所指出 的各种操作,最后可以建立 3 个文件:扩展名为 .OBJ 的目标文件、扩展名为 .LST 的列表文件和扩展名 为 .CRF 的交叉索引文件。目标文件是必须建立的,它包含了程序中所有的机器码指令和伪指令指出的 各种有关信息,但该文件中的操作数地址还不是内存的绝对地址,只是一个可浮动的相对地址。列表文 件(.LST)中包含了源程序的全部信息(包括注释)和汇编后的目标程序,列表文件可以打印输出,可供调试检查用。交叉索引文件(.CRF)是用来了解源程序中各符号的定义
4、和引用情况的。.LST 和.CRF 两个 文件不是必须建立的,可有有无,可以通过汇编时的命令加以选择。 在对源程序文件(ASM 文件)汇编时,汇编程序将对 ASM 文件进行两遍扫描,若程序文件中有语法错 误,则结束汇编,汇编程序将指出源程序中存在的错误,这时应返回编辑环境修改源程序中的错误,再 经过汇编,直到最后得到无错误的目标程序,即 OBJ 文件。因此,汇编程序的主要功能可以概括为以下 三点: (1) 检查源程序中的语法错误,并给出错误信息;(2) 产生目标程序文件(OBJ 文件),并可给出列 表文件(.LST 文件);(3) 展开宏指令。 汇编程序是系统提供的用于汇编的系统软件,目前常用
5、的汇编程序有 Microsoft 公司推出的宏汇编 程 MASM(MACRO ASSEMBLER)和 BORLAND 公司推出的 TASM(TURBO ASSEMBLER)两种。Microsoft 公司推出有 宏汇编程序 MASM 和小汇编程序 ASM 两种,二者的区别在于:MASM 有宏处理功能,而 ASM 没有宏处理 功能,因此,MASM 比 ASM 的功能强大,但 MASM 需要占据较大的内存空间,当内存空间较小时(如 64 KB),只能使用 ASM。 2、目标程序的连接过程汇编后产生的目标程序(OBJ 文件)并不是可执行程序文件(EXE 文件),还不能直接运行,它必须通过 连接程序(L
6、INK)连接成一个可执行程序后才能运行。连接程序进行连接时,其输入有两个部分:一是目 标文件(.OBJ),目标文件可以是一个也可以是多个,可以是汇编语言经汇编后产生的目标文件,也可以 是高级语言(例如 C 语言)经编译后产生的目标文件;另一是库文件(.LIB),库文件是系统中已经建立的, 主要是为高级语言提供的。连接后输出两个文件,一是扩展名为 .EXE 的可执行文件,另一个是扩展名为 .MAP 的内存分配文件,它是连接程序的列表文件,又称为连接映像(Link Map),它给出每个段在存储器 中的分配情况,该文件可有可无。连接程序给出的“无堆栈段的警告性错误”并不影响程序的运行。所 以,到此为
7、止,连接过程已经结束,可以在操作系统下执行该.EXE 程序了。3、汇编语言和 DOS 操作系统的接口编写的汇编语言源程序是在 DOS 环境下运行时,必须了解汇编语言是如何同 DOS 操作系统接口的。用编辑程序把源程序输入到机器中,用汇编程序把它转换为目标程序,用连接程序对其进行连接和 定位时,操作系统为每一个用户程序建立了一个程序段前缀区 PSP,其长度为 256 个字节,主要用于存 放所要执行程序的有关信息,同时也提供了程序和操作系统的接口。操作系统在程序段前缀的开始处(偏 移地址 0000H)安排了一条 INT 20H 软中断指令。INT 20H 中断服务程序由 DOS 提供,执行该服务程
8、序后, 控制就转移到 DOS,即返回到 DOS 管理的状态。因此,用户在组织程序时,必须使程序执行完后能去执 行存放于 PSP 开始处的 INT 20H 指令,这样便返回到 DOS,否则就无法继续键入命令和程序。 DOS 在建立了程序段前缀区 PSP 之后,将要执行的程序从磁盘装入内存。在定位程序时,DOS 将代 码段置于 PSP 下方,代码段之后是数据段,最后放置堆栈段。内存分配好之后,DOS 就设置段寄存器 DS 和 ES 的值,以使它们指向 PSP 的开始处,即 INT 20H 的存放地址,同时将 CS 设置为 PSP 后面代码 段的段地址,IP 设置为指向代码段中第一条要执行的指令位置
9、,把 SS 设置为指向堆栈的段地址,让 SP 指向堆栈段的栈底,然后系统开始执行用户程序。为了保证用户程序执行完后能返回到 DOS 状态,可使 用如下两种方法。 (一)标准方法 首先将用户程序的主程序定义成一个 FAR 过程,其最后一条指令为 RET。然后在代码段的主程序 (即 FAR 过程)的开始部分用如下三条指令将 PSP 中 INT 20H 指令的段地址及偏移地址压入堆栈: PUSHDS ;保护 PSP 段地址 MOV AX,0 ;保护偏移地址 0 PUSH AX 这样,当程序执行到主程序的最后一条指令 RET 时,由于该过程具有 FAR 属性,故存在堆栈内的两 个字就分别弹出到 CS
10、和 IP,从而执行 INT 20H 指令,使控制返回到 DOS 状态。返回 DOS 的标志就是 程序运行完后出现一个 DOS 的标识符,如 C:。 (二)非标准方法 也可在用户的程序中不定义过程段,只在代码段结束之前(即 CODE ENDS 之前)增加两条语句: MOV AH,4CH INT 21H 则程序执行完后也会自动返回 DOS 状态。 此外,由于开始执行用户程序时,DS 并不设置在用户的数据段的起始处,ES 同样也不设置在用户 的附加段起始处,因而在程序开始处使用以下方法重新装填 DS 和 ES 的值使其指向用户的数据段: MOV AX,段名 MOV 段寄存器名,AX;段寄存器名可以是
11、 DS、ES、SS 之一 四、实验内容与步骤1、实验内容编写程序,判断一个年份是否是闰年。2、实验步骤 汇编语言程序设计上机过程如图 1.1 所示。图 1.1 汇编语言程序上机过程(一)用编辑程序 EDIT 建立汇编语言源程序文件(ASM 文件) 例如,编写程序,判断一个年份是否是闰年的汇编语言源程序,可以在 DOS 模式下用编辑程序 EDIT.EXE 建立汇编语言源程序文件 ABC.ASM,注意文件名的扩展名必须是.ASM。也可以在 Windows 2000 或者在 Windows XP 环境下鼠标单击“开始”“运行”,在“运行”中输入“CMD”进入 DOS 模 式,运行 EDIT 软件,例
12、如: C EDIT ABC.ASM 进入 EDIT 的程序编辑画面时,输入汇编语言源程序如下: DATA SEGMENTINFON DB 0DH,0AH,Please input a year: $Y DB 0DH,0AH,This is a leap year! $N DB 0DH,0AH,This is not a leap year! $W DW 0BUF DB 8DB ?DB 8 DUP(?)DATA ENDSSTACK SEGMENT stackDB 200 DUP(0)STACK ENDS (.ASM)EDITMASM (.OBJ) (.EXE)LINK- - CODE SEGME
13、NTASSUME DS:DATA,SS:STACK,CS:CODESTART: MOV AX,DATAMOV DS,AXLEA DX,INFONMOV AH,9INT 21HLEA DX,BUFMOV AH,10INT 21HMOV CL, BUF+1LEA DI,BUF+2CALL DATACATECALL IFYEARSJC A1LEA DX,NMOV AH,9INT 21HJMP EXITA1: LEA DX,YMOV AH,9INT 21HEXIT: MOV AH,4CHINT 21HDATACATE PROC NEARLEA SI,BUF+2MOV BX,0X3:MOV AL ,SI
14、SUB AL ,30HMOV AH,0XCHG AX,BXMOV DX,10DMUL DXXCHG AX,BXADD BX,AXINC SILOOP X3MOV W,BXRETDATACATE ENDPIFYEARS PROC NEARPUSH BXPUSH CXPUSH DXMOV AX,WMOV CX,AXMOV DX,0MOV BX,4DIV BXCMP DX,0JNZ LAB1MOV AX,CXMOV BX,100DIV BXCMP DX,0JNZ LAB2MOV AX,CXMOV BX,400DIV BXCMP DX,0JZ LAB2LAB1: CLCJMP LAB3LAB2: STCLAB3: POP OP CXPOP BXRETIFYEARS ENDPCODE ENDSEND START(二)用汇编程序 MASM 将 ASM 文件汇编成目标程序文件(OBJ 文件)当源程序建立以后,仍以 ABC.ASM 程序为例,我们用汇编程序 MASM 对 ABC.ASM 源程序文件进 行汇编,以便产生机器码的目标程序文件 ABC.OBJ,其操作步骤如下: CMASM ABCMi