1 / 22

汇编语言程序设计

汇编语言程序设计. 实验教程. 汇编语言程序设计的实验环境. 硬件环境: 微型计算机( Intel x86 系列 CPU )一台。 软件环境: Windows 98/2000 操作系统 任意一种文本编辑器( EDIT 、 NOTEPAD 等) 汇编程序( MASM.EXE 或 TASM .EXE ) 连接程序( LINK .EXE 或 TLINK .EXE ) 调试程序( DEBUG .EXE 或 TD .EXE ) 本实验建议汇编程序使用 TASM .EXE ,连接程序使用 TLINK .EXE 。.

coral
Download Presentation

汇编语言程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 汇编语言程序设计 实验教程 保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn

  2. 汇编语言程序设计的实验环境 • 硬件环境: 微型计算机(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) 秦晓梅 E-Mail:qinxm@dl.cn

  3. 问题:系统中含有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) 秦晓梅 E-Mail:qinxm@dl.cn

  4. 上机步骤 • 1.确定源程序的存放目录 • 建议同学在C(或D)盘建立一个工作子目录,将汇编语言常用的软件装入工作子目录之下。同学在工作子目录下,完成编辑、汇编和连接等项操作,生成的用户文件也存放在工作子目录之下。 • 2 .建立ASM源程序 • 在DOS环境下键入:EDIT↙ • 这条命令执行EDIT.EXE程序,自动进入编辑状态,屏幕顶部显示主菜单,底部行显示提示信息,中间的22行为编辑窗口,用户使用编辑命令逐行输入源程序。编辑后文件存盘时,要键入“Alt+F”键打开File菜单,选择其中的Save功能,并通过会话给出文件名(注意:文件名为.ASM 后缀),才能将编辑后的文件存盘。 保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn

  5. 3、用TASM.EXE汇编源程序产生目标文件 源程序建立后,要使用汇编程序对源程序文件汇编。汇编过程中,汇编程序对源程序进行两次扫描,检查其语法错误,如果没有语法错误,则根据程序员的要求生成目标(OBJ)文件、列表文件(LST)和交叉引用文件(CRF)。 如果源文件有错误,汇编程序会指出错误的行号和错误的原因。源程序的错误有两种类型:警告Warning(警告不影响程序的运行,但可能会得出错误的结果)和错误Error(对于错误,汇编程序将无法生成OBJ文件)。如果出现了严重错误,你必须重新进入EDIT编辑器,根据错误的行号和错误的原因来改正源程序中的错误,直到汇编没有错为止。 注意:汇编程序只能指出程序的语法错误,而无法指出程序的逻辑错误。 • 方法:TASM F1.ASM↙ (其中, F1.ASM为源程序名) 保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn

  6. 4、用TLINK.EXE产生可执行文件 • 经过汇编之后生成的目标文件(OBJ)不能在PC机上运行,必须经过连接程序的连接和定位才能生成可执行文件。 • 方法:TLINK F1.OBJ↙ • 如果没有错误,LINK就会建立一个F1.EXE文件。如果OBJ文件有错误,LINK会指出错误的原因。对于无堆栈警告信息,可以不予理睬,它不影响程序的执行。如果连接时有其他错误,要检查并修改源程序,重新汇编、连接,直到正确。 保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn

  7. 5、执行程序 • 建立了可执行文件后,就可以直接在DOS下运行此程序。 • 方法:F1.EXE↙ • 程序运行结束后,返回DOS。如果运行结果正确且程序已把结果直接显示在屏幕上,那么程序运行结束时结果也就得到了。如果程序不显示结果,则只能通过调试的方法来纠正程序执行中的错误。 保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn

  8. 实验一 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) 秦晓梅 E-Mail:qinxm@dl.cn

  9. (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) 秦晓梅 E-Mail:qinxm@dl.cn

  10. 三、实验说明 • 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) 秦晓梅 E-Mail:qinxm@dl.cn

  11. 命令接受状态,CPU将不断地到内存取指令、执行指令,使用户失去对系统的控制,出现死机。为避免这种情况,可在用户程序段结束前加上一小段返回DEBUG功能的程序段,或用断点方式运行,以避免出现死机。命令接受状态,CPU将不断地到内存取指令、执行指令,使用户失去对系统的控制,出现死机。为避免这种情况,可在用户程序段结束前加上一小段返回DEBUG功能的程序段,或用断点方式运行,以避免出现死机。 • 4、8086/8088CPU在开机后执行的第一条指令在内存FFFF:0H开始处。 • 5、可读写内存RAM的内容可修改,而只读内存ROM的内容不能修改,故命令E未能将数字01H填入F000:200H~22FH的内存中,内存F000:200H~22FH的内容填写前后保持不变。 • 6、中断指令INT N是指令系统中较复杂的一条指令,结合教材中对中断指令的介绍,利用DEBUG来学习,加强对中断指令的执行过程、中断向量表、中断向量和中断子程序等内容的理解。 保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn

  12. 实验二 汇编语言程序设计 • 例题:编制程序,使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) 秦晓梅 E-Mail:qinxm@dl.cn

  13. 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) 秦晓梅 E-Mail:qinxm@dl.cn

  14. 作业题 • 要求在全面掌握课堂示例程序的基础上,完成以下程序设计: • 1、用减奇数法开平方。(算法:N个自然数中的奇数之和等于N的平方。) • 2、求一个长度为8的无符号字节序列中的最大值和最小值。 • 3、编写程序,计算20个成绩的平均值,并以十进制表示,将结果显示在屏幕上。显示格式要求如下: • 第一行显示20个成绩; • 第二行显示AVERAGE SCORE=所求得的平均成绩。 • 此程序要求用标准的段定义伪指令编写。 保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn

  15. 实验三 指令系统与寻址方式 • 一、编写指令时,应注意以下几个问题: • 1、注意区别立即寻址方式和直接寻址方式。 • 如:MOV AX,300;将数据300送入AX 寄存器 • MOV AX,[300];将数据段中的300单元的内容送入AX寄存器。 保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn

  16. 2、使用 寄存器间接寻址时应注意和寄存器寻址方式的区别。2、使用 寄存器间接寻址时应注意和寄存器寻址方式的区别。 • 如:MOV AX,BX;BX中的内容传送到AX • MOV AX,[BX];数据段中BX所指示的地址中的内容送AX • 3、在双操作数指令中,源操作数和目的操作数的地址不能同时为存储器地址。 • 如:M1和M2为两个存储器变量 • 则ADD M1,M2是错误指令。 保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn

  17. 4、段跨越前缀可修改操作数所在的段。 • 如:MOV DL,MESS1[SI];源操作数地址为: (DS)×16 +(SI)+ OFFSET MESS1 • MOV DL,ES:MESS2[SI];源操作数地址为: (ES)×16 +(SI)+ OFFSET MESS2 • 应注意:段跨越前缀不能使用CS。 • 5、代码段寄存器CS不能用作指令的目的寄存器。 保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn

  18. 二、正确使用指令系统,关键要清楚每条指令的功能以及它们规定或限制使用的寄存器。二、正确使用指令系统,关键要清楚每条指令的功能以及它们规定或限制使用的寄存器。 • 1、指令对地址还是对地址中的内容进行操作,这一点要严格加以区分。 • 如:LEA BX,MESS;(BX)←MESS的偏移地址 • MOV BX,OFFSET MESS;(BX)←MESS的偏移地址 • MOV BX,MESS;(BX)←字变量MESS中的内容 保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn

  19. 2、使用指令时,要清楚指令隐含的操作寄存器。2、使用指令时,要清楚指令隐含的操作寄存器。 • 如在乘法和除法指令中,只指出源操作数地址,但要清楚目的操作数必须存放在(AX)或(AL)中(乘法),或(AX)、(DX:AX)中(除法)。又如串指令(MOVS、STOS、LODS、CMPS、SCAS),它们的寻址方式也是隐含的 ,指令规定操作是在数据段中SI所指示的地址和附加段中DI所指示的地址之间进行串处理的;在存取串时,AL是隐含的存取寄存器。 保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn

  20. 十进制调整指令(DAA、DAS、AAA、AAS、AAM、AAD)也隐含地使用了AL寄存器。十进制调整指令(DAA、DAS、AAA、AAS、AAM、AAD)也隐含地使用了AL寄存器。 • 类似这些在指令语句中不反映出隐含操作数的指令还有换码指令XLAT、循环指令LOOP、LOOPE、LOOPNE等,它们都要求预先在规定的寄存器内设置好操作数地址或计数值。 • 3、对有符号数或无符号数的操作应正确选择相应的条件转移指令。 保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn

  21. 4、用移位指令来倍增或倍减一个值是很方便的,但要注意对有符号数和无符号数所使用的指令应是不同的。4、用移位指令来倍增或倍减一个值是很方便的,但要注意对有符号数和无符号数所使用的指令应是不同的。 • 如 (AX)=8520H,当(AX)为无符号数时, (AX)/2可用指令SHR AX,1,结果为(AX)=4290H。 • 当(AX)为有符号数时, (AX)/2应用指令SAR AX,1,结果为(AX)=0C29H。 保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn

  22. 5、标号是程序中指令的符号地址,要注意和变量(数据符号)的区别。5、标号是程序中指令的符号地址,要注意和变量(数据符号)的区别。 • 如定义VAR是一个变量,LAB是程序中的一个标号,则JMP LAB指令的转移地址为LAB,而JMP VAR是一条非法指令。 保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn

More Related