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

Slides:



Advertisements
Similar presentations
Assembly Language Programming 湛江师范学院 汇编语言程序设计实验课件 主讲教师:王 晓 晔.
Advertisements

广东外语外贸大学 信息科学技术学院 《汇编语言与计算机组成原理》 第一篇 汇编语言 调试程序DEBUG.
输入输出程序设计 输入输出的基本概念 无条件方式输入输出 查询方式输入输出 中断方式输入输出.
第10章 DOS功能调用与BIOS中断调用.
第四章 汇编语言 程序设计 任课教师:王晓甜
本周实验安排 实验内容:(P231)人名排序的例子。
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年10月30日.
第三章 80 x86的指令系统和寻址方式 3.1 指令概述 x86的寻址方式 ( ※ ) 3.3 程序占有的空间和执行的时间
4.1 汇编语言 4.2 顺序结构程序 4.3 分支程序设计 4.4 循环程序设计 4.5 子程序设计
9.1 可编程并行输入/输出接口芯片8255A 9.2 可编程计数器/定时器 可编程串行输入/输出接口芯片8251A
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月26日.
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
汇编语言程序设计 Assembly Language Programming
第三章 寻址方式与指令系统 3.1 寻址方式 一条指令通常由两大部分构成: 操作码 操作数
逆向工程-汇编语言
汇编语言程序设计 吴 向 军 中山大学计算机科学系
第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第四节 Intel 8253在IBM PC机上的应用.
第四章 典型CPU及指令系统举例.
第2章 汇编语言与汇编程序 ——8086/8088指令系统 mov ax,12h call display Jmp 1234h.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月05日.
输入输出与中断 主要内容 CPU与外设之间数据传送方式 中断技术 8086中断系统和中断处理.
第八章 输入输出程序设计 总线 CPU MEM I/O接口 I/O设备.
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
微机原理及应用 主讲:谢维成 西华大学 电气信息学院 1.
第3章 8086/8088指令系统 mov ax,12h call display Jmp 1234h.
微机原理与接口技术 ——80x86微处理器 西安邮电大学 计算机学院 范琳.
第一章 8086程序设计 第二章 MCS-51程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月20日.
汇编语言程序设计课程设计 第一次实验 DEBUG基本命令与数据传输指令
汇编语言程序设计课程设计 第二次实验 DEBUG基本命令与算术运算指令
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第3章 微型计算机输入输出接口 3.1 输入/输出接口 3.2 输入输出数据传输的控制方式 3.3 开关量输入输出接口 欢迎辞.
第六章 子程序结构 §6.1 子程序的设计方法 §6.2 嵌套与递归子程序 §6.3 子程序举例 §6.4 DOS系统功能调用.
逆向工程-汇编语言
第5章 循环与分支程序设计 学习目标: 了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。
4.1 汇编语言程序格式 4.2 MASM中的表达式 4.3 伪指令语句 4.4 DOS系统功能调用和BIOS中断调用
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月19日.
第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程.
C语言程序设计 主讲教师:陆幼利.
得技通电子 问题 1.0 、选择题:本大题共15个小题,每小题1分,共15分,在每小题给出的四个选项中,只有一项符合题目要求,把所选项前的字母填在括号内。
习题3 1、 分别说明下列指令的原操作数和目的操作数各采用什么寻址方式。 设定如下: ①立即寻址 ② ① ②寄存器寻址
第1章 c++概述 1.1 C++语言的简史及特点 1.2 简单的C++程序 1.3 C++语言的基本组成
第九章 BIOS和DOS中断 在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput /output System)例行程序。驻留在ROM中的BIOS给PC系列的不同微处理器提供了兼容的系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来很大方便,程序员不必了解硬件操作的具体细节,直接用指令设置参数,然后中断调用BIOS中的子功能,所以利用BIOS功能编写的程序简洁,可读性好,
姚金宇 MIT SCHEME 使用说明 姚金宇
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
实验七 安全FTP服务器实验 2019/4/28.
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
《微型计算机原理与接口技术》 第4版 王良 宁德师范学院 吴宁 乔亚男 编著 清华大学出版社 出版
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月17日.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
College of Computer Science & Technology
微机原理与接口技术 ——8086微处理器 西安邮电大学 计算机学院 范琳.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月06日.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Python 环境搭建 基于Anaconda和VSCode.
3. 逻辑运算指令 A、简单逻辑操作指令 CLR A. (不影响CY、AC、 OV标志) CPL A
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第6章 子程序结构 在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。 调用子程序的程序称为主调程序或主程序。 2019/7/20 ch6.
微机原理与接口技术 第5章 汇编语言程序设计 西安邮电大学计算机学院 王 钰.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年10月30日.
第四章 UNIX文件系统.
第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程
任课教师:戴开宇 TA:时均帅、谭肖、王安华 程序设计B班 :20-16:50(90分钟)
实验六、COM类型病毒分析实验 实验开发教师: 刘乃琦 谌黔燕.
Presentation transcript:

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

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

保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn 问题:系统中含有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

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

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

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

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

保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn 实验一 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

保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn (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

保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn 三、实验说明 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

保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn 命令接受状态,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

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

保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn 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

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

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

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

保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn 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

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

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

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

保留版权(C) 秦晓梅 E-Mail:qinxm@dl.cn 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

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