汇编语言程序设计实验教程

  • 格式:ppt
  • 大小:143.00 KB
  • 文档页数:25

下载文档原格式

  / 25
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
保留版权(C) 秦晓梅 EMail:qinxm@dl.cn 13
作业题
要求在全面掌握课堂示例程序的基础上,完成以下程 序设计: 1,用减奇数法开平方.(算法:N个自然数中的奇数 之和等于N的平方.) 2,求一个长度为8的无符号字节序列中的最大值和最 小值. 3,编写程序,计算20个成绩的平均值,并以十进制表 示,将结果显示在屏幕上.显示格式要求如下: 第一行显示20个成绩; 第二行显示AVERAGE SCORE=所求得的平均成绩. 此程序要求用标准的段定义伪指令编写.
保留版权(C) 秦晓梅 EMail:qinxm@dl.cn 14
实验三 指令系统与寻址方式
一,编写指令时,应注意以下几个问题: 1,注意区别立即寻址方式和直接寻址方 式. 如:MOV AX,300;将数据300送入AX 寄存器 MOV AX,[300];将数据段中的 300单元的内容送入AX寄存器.
保留版权(C) 秦晓梅 EMail:qinxm@dl.cn 4
3,用TASM.EXE汇编源程序产生目标文件 源程序建立后,要使用汇编程序对源程序文件汇编. 汇编过程中,汇编程序对源程序进行两次扫描,检查其 语法错误,如果没有语法错误,则根据程序员的要求生 成目标(OBJ)文件,列表文件(LST)和交叉引用文 件(CRF). 如果源文件有错误,汇编程序会指出错误的行号和 错误的原因.源程序的错误有两种类型:警告Warning (警告不影响程序的运行,但可能会得出错误的结果) 和错误Error(对于错误,汇编程序将无法生成OBJ文 件).如果出现了严重错误,你必须重新进入EDIT编 辑器,根据错误的行号和错误的原因来改正源程序中的 错误,直到汇编没有错为止. 注意:汇编程序只能指出程序的语法错误,而无法 指出程序的逻辑错误. 方法:TASM F1.ASM↙ (其中, F1.ASM为源程序 名)
保留版权(C) 秦晓梅 EMail:qinxm@dl.cn 12
LOOP1: MOV AL,BL INC BL MUL BL ADD DX,AX CMP AX,00C8H JNA LOOP1 MOV SUM,DX MOV AX,4C00H;***** INT 21H END START 结果保存在DX寄存器中,SUM单元中也有.用R 或D命令看结果,结果为045FH. 1,TD:在*****处设置断点,观察结果. 2,DEBUG:G1B↙,观察结果.
保留版权(C) 秦晓梅 EMail:qinxm@dl.cn 10
命令接受状态,CPU将不断地到内存取指令,执行指令, 使用户失去对系统的控制,出现死机.为避免这种情况, 可在用户程序段结束前加上一小段返回DEBUG功能的 程序段,或用断点方式运行,以避免出现死机. 4,8086/8088CPU在开机后执行的第一条指令在内存 FFFF:0H开始处. 5,可读写内存RAM的内容可修改,而只读内存ROM 的内容不能修改,故命令E未能将数字01H填入F000: 200H~22FH的内存中,内存F000:200H~22FH的内 容填写前后保持不变. 6,中断指令INT N是指令系统中较复杂的一条指令, 结合教材中对中断指令的介绍,利用DEBUG来学习, 加强对中断指令的执行过程,中断向量表,中断向量和 中断子程序等内容的理解.
保留版权(C) 秦晓梅 EMail:qinxm@dl.cn 8
(3)MOV DS,2010 (4)PUSH AL (5)OUT 900,AL 3,用命令U查看8086/8088CPU在开机后执行的第一条指 令. 4,用命令D查看DS:200~22F和F000:200 ~22F两内存 块的内容,用命令E将数字01H分别填入这两个内存块. 比较填入前后的结果,了解可读写内存RAM和只读内存 ROM的区别. 5,用A命令汇编一条INT 1C指令,用命令T单步执行该 指令,比较指令执行前后CS和IP,堆栈指针SP及堆栈内 容变化情况,了解什么是中断向量表,中断向量和中断 子程序,掌握中断指令的执行过程.
保留版权(C) 秦晓梅 EMail:qinxm@dl.cn 3
上机步骤
1.确定源程序的存放目录 建议同学在C(或D)盘建立一个工作子目录,将 汇编语言常用的软件装入工作子目录之下.同学在工 作子目录下,完成编辑,汇编和连接等项操作,生成 的用户文件也存放在工作子目录之下. 2 .建立ASM源程序 在DOS环境下键入:EDIT↙ 这条命令执行EDIT.EXE程序,自动进入编辑状态, 屏幕顶部显示主菜单,底部行显示提示信息,中间的 22行为编辑窗口,用户使用编辑命令逐行输入源程序. 编辑后文件存盘时,要键入"Alt+F"键打开File菜单, 选择其中的Save功能,并通过会话给出文件名(注意: 文件名为.ASM 后缀),才能将编辑后的文件存盘.
保留版权(C) 秦晓梅 EMail:qinxm@dl.cn 20
4,用移位指令来倍增或倍减一个值是很 方便的,但要注意对有符号数和无符号数 所使用的指令应是不同的. 如 (AX)=8520H,当(AX)为无符 号数时, (AX)/2可用指令SHR AX,1, 结果为(AX)=4290H. 当(AX)为有符号数时, (AX)/2 应用指令SAR AX,1,结果为(AX) =0C29H.
保留版权(C) 秦晓梅 EMail:qinxm@dl.cn 16
4,段跨越前缀可修改操作数所在的段. 如:MOV DL,MESS1[SI];源操作数地 址为: (DS)×16 +(SI)+ OFFSET MESS1 MOV DL,ES:MESS2[SI];源操作 DL ES MESS2[SI] 数地址为: (ES)×16 +(SI)+ OFFSET MESS2 应注意:段跨越前缀不能使用CS. 5,代码段寄存器CS不能用作指令的目的 寄存器.
保留版权(C) 秦晓梅 EMail:qinxm@dl.cn 17
二,正确使用指令系统,关键要清楚每条 指令的功能以及它们规定或限制使用的寄 存器. 1,指令对地址还是对地址中的内容进行 操作,这一点要严格加以区分. 如:LEA BX,MESS;(BX)←MESS 的偏移地址 MOV BX,OFFSET MESS;(BX) ←MESS的偏移地址 MOV BX,MESS;(BX)←字变 量MESS中的内容
保留版权(C) 秦晓梅 EMail:qinxm@dl.cn
7
实验一 DEBUG程序的使用
一,实验目的 1,学习使用DEBUG程序的各种命令. 2,利用DEBUG学习8086/8088CPU指令系统. 3,了解计算机取指令,执行指令的工作过程. 4,掌握用DEBUG调试用户程序的方法. 二,实验任务 1,掌握DEBUG程序的各种命令,重点是A,U,R,D, T,G,Q命令的使用. 2,用命令A汇编下列命令,判断指令正误并说明原因. (1)ROR AX,8 (2)LEA DI,[AX]
保留版权(C) 秦晓梅 EMail:qinxm@dl.cn
6
5,执行程序 建立了可执行文件后,就可以直接在DOS下运行此 程序. 方法:F1.EXE↙ 程序运行结束后,返回DOS.如果运行结果正确且 程序已把结果直接显示在屏幕上,那么程序运行结束 时结果也就得到了.如果程序不显示结果,则只能通 过调试的方法来纠正程序执行中的错误.
保留版权(C) 秦晓梅 EMail:qinxm@dl.cn 19
十进制调整指令(DAA,DAS,AAA, AAS,AAM,AAD)也隐含地使用了AL 寄存器. 类似这些在指令语句中不反映出隐含 操作数的指令还有换码指令XLAT,循环 指令LOOP,LOOPE,LOOPNE等,它们 都要求预先在规定的寄存器内设置好操作 数地址或计数值. 3,对有符号数或无符号数的操作应正确 选择相应的条件转移指令.
汇编语言程序设计
实验教程
保留版权(C) 秦晓梅 EMail:qinxm@dl.cn
1
汇编语言程序设计的实验环境
硬件环境: 微型计算机(Intel x86系列CPU)一台. 软件环境: Windows 98/2000操作系统 任意一种文本编辑器(EDIT,NOTEPAD等) 汇编程序(MASM.EXE或TASM .EXE) 连接程序(LINK .EXE或TLINK .EXE) 调试程序(DEBUG .EXE或TD .EXE) 本实验建议汇编程序使用TASM .EXE,连接程序使用 TLINK .EXE.
保源自文库版权(C) 秦晓梅 EMail:qinxm@dl.cn 5
4,用TLINK.EXE产生可执行文件 经过汇编之后生成的目标文件(OBJ)不能在PC机 上运行,必须经过连接程序的连接和定位才能生成可 执行文件. 方法:TLINK F1.OBJ↙ 如果没有错误,LINK就会建立一个F1.EXE文件.如 果OBJ文件有错误,LINK会指出错误的原因.对于无 堆栈警告信息,可以不予理睬,它不影响程序的执行. 如果连接时有其他错误,要检查并修改源程序,重新 汇编,连接,直到正确.
保留版权(C) 秦晓梅 EMail:qinxm@dl.cn 2
问题: 问题:系统中含有MASM.EXE,LINK.EXE和 DEBUG.EXE程序,试说明如何汇编,连接和 调试一个名为F1.ASM的程序.(8分)—— 2001年考研题 答案: 汇编:MASM F1.ASM↙;以形成二进制目标文件 连接:LINK F1.OBJ ↙;以形成可执行文件 调试:DEBUG F1.EXE ↙ 调试命令:显示寄存器的内容r,检查内存d, 修改内存e,检查代码u,修改代码a,运行g
保留版权(C) 秦晓梅 EMail:qinxm@dl.cn 9
三,实验说明 1,在DEBUG下,用户可对所有寄存器,RAM内存随意 查看和修改,但由于用户对DOS操作系统在内存中存放 情况不了解,可能会将存放有操作系统程序的内存内容 破坏,从而可能引起系统运行异常,往往是出现死机现 象.故建议使用DOS分配给用户的内存可用区,其低端 地址是刚进入DEBUG时,用命令R查看到的CS:IP.涉 及到修改内存的命令有A,E,F,M,L等. 2,初学者在使用DEBUG命令修改内存或执行程序时, 由于多种原因,出现死机是较经常的现象,可按RESET 复位按钮,重新启动系统. 3,用连续执行命令G执行程序时,注意给出执行的首地 址,或查看当前CS和IP值是否为要执行程序段的首地址, 并注意查看执行的指令流程中有无返回DEBUG功能的 程序段,如指令INT 20H或断点设置INT3,否则发出命 令后,很容易出现死机.原因是如无程序段使系统返回
保留版权(C) 秦晓梅 EMail:qinxm@dl.cn 15
2,使用 寄存器间接寻址时应注意和寄存 器寻址方式的区别. 如:MOV AX,BX;BX中的内容传送 到AX MOV AX,[BX];数据段中BX所指 示的地址中的内容送AX 3,在双操作数指令中,源操作数和目的 操作数的地址不能同时为存储器地址. 如:M1和M2为两个存储器变量 则ADD M1,M2是错误指令.
保留版权(C) 秦晓梅 EMail:qinxm@dl.cn 11
实验二 汇编语言程序设计
例题:编制程序,使S=1+2×3+3 ×4+4 ×5+¨ ¨ ¨+N ×(N+1),直到N ×(N+1)项大于200为止. .MODEL SMALL .STACK 200H .DATA SUM DW 00 .CODE START:MOV AX,@DATA MOV DS,AX MOV DX,0001 MOV BL,2
保留版权(C) 秦晓梅 EMail:qinxm@dl.cn 18
2,使用指令时,要清楚指令隐含的操作 寄存器. 如在乘法和除法指令中,只指出源操 作数地址,但要清楚目的操作数必须存放 在(AX)或(AL)中(乘法),或 (AX),(DX:AX)中(除法).又 如串指令(MOVS,STOS,LODS, CMPS,SCAS),它们的寻址方式也是 隐含的 ,指令规定操作是在数据段中SI 所指示的地址和附加段中DI所指示的地 址之间进行串处理的;在存取串时,AL 是隐含的存取寄存器.