微机电子教程 第四章汇编程序设计精.ppt
《微机电子教程 第四章汇编程序设计精.ppt》由会员分享,可在线阅读,更多相关《微机电子教程 第四章汇编程序设计精.ppt(78页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、微机电子教程微机电子教程第四章汇编程序第四章汇编程序设计设计第1页,本讲稿共78页 这样的程序占用内存空间少、执行速度快。所以,汇编语言多用来编写计算机系统程序、实时通信程序、实时控制程序等,也可被各种高级语言所嵌用。2、几种汇编、几种汇编 在IBM PC微机上流行的汇编程序是微软公司的小汇编(ASM)和宏汇编(MASM)两种。(还有TASM、OPTASM)计算机中完成汇编任务的程序被称为汇编程序(ASSEMBLER)它可以:将汇编语言源程序翻译成机器语言程序 能够根据用户要求自动分配存储区域(包括程序区、数据区等);自动地把各种进制数转换成二进制数;把字符转换成ASCII码;计算表达式的值;
2、自动对源程序进行检查,给出错误信息(如非法格式、未定义的助记符、标号、漏掉操作数等)等 第2页,本讲稿共78页上机环境上机环境硬件硬件系统软件系统软件应用软件应用软件操作系统:操作系统:DOS系统系统编辑器编辑器:EDIT.exe编程序编程序:MASM.exe连接程序连接程序:LINK.exe调试程序:调试程序:DEBUG.exe用户开发的程序:用户开发的程序:ABC.exe等等CPU、存储器、存储器(ROM、RAM)、I/O接口、输入、输出设备接口、输入、输出设备3、汇编语言程序上机处理过程、汇编语言程序上机处理过程第3页,本讲稿共78页汇编语言上机过程汇编语言上机过程D:EDITABC.a
3、smD:MASMABC;有语法错,回有语法错,回EDIT下改该程序下改该程序D:LINKABC;有错,回在有错,回在EDIT下改程序下改程序D:ABC运行结果错,回运行结果错,回EDIT下改程序下改程序或在或在DEBUG下调试,找原因。下调试,找原因。D:DEBUGABC.exe编辑源程序编辑源程序 EDITABC.ASM汇编源程序汇编源程序 MASMABC.ASM形成目标程序形成目标程序ABC.OBJ连接目标程序连接目标程序 LINKABC.OBJ有连接错误信息有连接错误信息?形成可执行程序形成可执行程序 ABC.EXE装入可执行程序到内存装入可执行程序到内存,并执行并执行D:subABC下
4、一程序下一程序用用DEBUG调试可执行程序调试可执行程序D:sub DEBUGABC.EXE找到原因找到原因YNYNNYN有汇编错误信息有汇编错误信息?Y运行结果正确运行结果正确?用用DEBUG调试程序查错调试程序查错?第4页,本讲稿共78页4.2汇编语言的程序结构与语句格式汇编语言的程序结构与语句格式4.2.1汇编语言源程序的框架结构汇编语言源程序的框架结构(书P141)一、源程序的结构特点一、源程序的结构特点 1、由若干个逻辑段组成,各逻辑段都有一个段名,由段定义语句(伪指令语句)来定义和说明。源程序中一般具有代码段、堆栈段、数据段和附加数据段。代码段是必不可少的。数据段或附加段用来在内存
5、中建立一个适当容量的工作区用以存放常数和变量,并作为算术运算或I/O接口传送数据的工作区等。堆栈段则在内存中建立一个堆栈区,以便在中断和子程序(或过程)调用及各模块间传递参数时使用。第5页,本讲稿共78页 8086/8088/80286只允许同时使用4种类型的段:代代码码段段(CSCS)、堆堆栈段(栈段(SSSS)、数据段()、数据段(DSDS)和附加段()和附加段(ESES)。80386/80486和Pentium系列允许同时使用6种段,除以上4种段外,还可有FSFS和和GSGS两个附加数据段两个附加数据段。在8086/8088和实实地地址址方方式式下下,每个段的最大长度均为64KB64KB
6、;而在保保护护方方式式下下,80286允许每个段的最大长度为16MB16MB,80386/80486和Pentium系列允许4GB。在一个源程序中每种类型的段又可存在若干个,如几个数据段 2、在代码段起始处,用ASSUME说明各个段寄存器与逻辑段的关系,并在程序开始处设置段寄存器的初值(代码段CS除外)。3、每段由若干语句行组成,每行只能写一条语句,允许续行。整个源程序必须以END来标志执行的结束。在END后的标号START表示程序中运行第一条指令的起始地址。4、每条语句由4个字段构成。各字段间用空格分开。5、每个源程序中必须含有返回DOS的指令语句,以便返回DOS继续键入命令。如:标准序法。
7、第6页,本讲稿共78页二、源程序与二、源程序与PC DOSPC DOS的接口的接口 汇编语言源程序经过汇编转变为目标程序,当用链接程序对其作进行链接和定位时,操作系统完成:1、为每个用户程序分配一个256字节的程序段前缀区(PSP),主要存放用户程序信息。在PSP的开始处(偏移地址0000H)安排一条INT 20H软中断指令。该程序的功能是使系统返回到DOS管理状态。因此,用户在组织程序时,必须使程序执行完后能够转去执行存放于PSP开始处的INT 20H指令。2、定位用户程序。3、设置DS和ES的值,使之指向PSP的开始处,即PSP的首地址。4、将CS设置为用户程序的段基址,IP为程序执行时的
8、第一个地址,设置SS、SP。5、运行用户程序。第7页,本讲稿共78页保证用户程序执行完后返回DOS:第一种方法:标准序法:将用户程序中的主程序定义为FAR过程,其最后一条指令为RET;当程序执行到RET时,会将栈顶的两个字分别送IP、CS。在主程序的开始处将PSP所在段的段地址DS(或ES)保存进栈,然后再将一个全0的字(PSP的段内偏移地址)压入堆栈。这就是程序结构中的以下三条指令:PUSHDS;保护PSP段地址MOVAX,0 ;保护偏移0地址PUSHAX当用户程序返回时,会返回到DOS,执行INT 21H注:注:由于DS、ES由DOS已设置,所以在用户程序的开始处应重新设置DS、ES。第二
9、种方法:非标准方法:不定义主程序为FAR过程并去掉标准序部分,只在代码段结束之前(即CODE ENDS之前)增加两句:MOVAH,4CHINT21H第8页,本讲稿共78页4 4、2 2、2 2 汇编语言的语句汇编语言的语句一、语句的种类与格式一、语句的种类与格式1、语句的种类 指令语句:可执行语句,与CPU指令系统的指令相对应,汇编程序为之产生一一对应的机器代码。例:例:MOVAH,4CH 例:例:伪指令语句伪指令语句MESSAGEDBTHISISASAMPLEPROGRAM.;定义变量;定义变量MESSAGE在数据段在数据段DATA中的存放形式。汇编时,中的存放形式。汇编时,;汇编程序将;汇
10、编程序将MESSAGE定义为一个字节类型数据区的首地址,定义为一个字节类型数据区的首地址,;并按字节存储字符串信息。;并按字节存储字符串信息。伪指令语句:CPU不执行的语句,只是汇编时给汇编程序提供汇编信息,如定义符号、分配存储单元、将程序分段等。它本身并不产生目标代码,所以是指示性语句。第9页,本讲稿共78页 宏指令语句:是以某个宏名字定义的一段指令序列。汇编时,凡有宏指令语句的地方都将用相应的指令序列的目标代码插入。宏指令语句是一般性指令语句的扩展。2、语句格式 指令语句的一般格式为:标号:前缀 指令助记符 操作数;注释 伪指令语句的格式为:名字 伪指令定义符 操作数;注释 标号和名字 标
11、号代表指令所在存储单元的符号地址。后跟冒号,在程序中作为转移(JMP)、调用(CALL)和循环(LOOP)指令的转移目标,与具体的指令地址相联系。伪指令语句的名字一般用于定义常量名、变量名、过程名、段名等。标号和名字必须符合汇编语言对标识符的规定:第10页,本讲稿共78页 以字母开头,由字母(AZ或az,汇编程序不区分大小写)、数字(09)及部分特殊字符(?、$和下划线_等)组成的字符串表示,字符串长度不能超过31个。标识符不能是汇编语言中有特定意义的保留字,如:CPU的内部寄存器名AH、AL、AX等。助记符、定义符 规定指令或伪指令的操作功能,是语句中唯一不可缺少的部分。前缀仅可出现在指令助
12、记符前。操作数 指令语句中提供指令的操作对象、存放位置。伪指令语句中操作数的格式和含义随伪操作指令不同而不同。操作数可以是一个或2个或0个(INCBX,PUSHAX;MOVAX,DATA;RET,HLT,NOP,CLD)注释 以“;”开始,给以编程说明。第11页,本讲稿共78页二、语句中的操作数二、语句中的操作数1、常量操作数 在运行期间不变化的量:立即数、端口地址。常用有:2(B),10(D),8(Q),16(H)的整型常量,字符串常量。凡数字在AF之间且在最高位,必须加前缀0 字符串常量是用单引号括起来的一个或多个字符,其值为字符的ASCII代码值。例:A=41H AB=4142H2、Re
13、g操作数 操作数部分是寄存器名,如:AX、SI和DS等 3、存贮器操作数-有标号与变量两种。标号:与指令地址相关联,或某个过程起点位置 在代码段内相关联。变量:存放在存贮单元中的值,变量常以变量名的形式出现在程序中。第12页,本讲稿共78页在数据段或堆栈段中,是存放数据的存放单元的符号地址,与各种寻址方式有关(存贮器操作数寻址方式)标号和变量都与存储器地址相关联,都具有以下三种属性:段属性(SEGMENT)段基址,即标号或变量所在段的段地址偏移量属性(OFFSET)段内偏移地址,即标号或变量所在的地址与所在段的段起始地址之差。类型属性(TYPE)变量的类型是指变量存取单位的字节数大小类型有字节
14、(BYTE)、字(WORD)、双字(DWORD)、四字、十字节5种。标号的类型则指标号与使用它的指令之间的距离远近。当标号作为转移指令或调用指令的目标操作数时,若是段内的转移和调用,这个标号的类型属性为NEAR;若是段间的转移和调用,标号的类型属性为FAR。第13页,本讲稿共78页4、表达式操作数 表达式由各种操作数、运算符和操作符组成。(1)汇编语言中表达式有两类数值表达式:由数值常量、字符串常量或符号常量等与算术、逻 辑或关系运算符连接而成。在汇编时产生一个数值。地址表达式:由常量、变量、标号、寄存器(如BX、BP、SI、DI)的内容以及一些运算符组成。其值表示存储器地址,一般都是段内的偏
15、移地址,因此它也具有段属性、偏移量属性和类型属性。如ES:SI+4(2)运算符和操作符MASM宏汇编中有三种运算符(算术、逻辑和关系运算符)和两种操作符(分析和合成操作符)。如书P146表4-1所示。运算符实现对操作数的相关运算,操作符则完成对操作数属性的定义、调用和修改。第14页,本讲稿共78页算术运算符 算术运算符有、/和MOD等。它们都可用于数值表达式,运算结果是一个数值。在地址表达式中,对标号或变量只可以使用加、减运算符。经常使用的是“标号或变量常量”这种形式。且运算后仍为标号或变量,其类型及段基址属性不变,仅修改了偏移量属性。如,PLACE23是指PLACE字节单元后的第6个存储单元
16、的地址。若PLACE与某存贮单元地址相关,则PLACE+23仍与某存贮单元相关。逻辑运算符实现操作数按位逻辑操作。有AND、OR、XOR和NOT。只适用于数值表达式。注:注:逻辑运算符和逻辑运算指令助记符在符号形式上是一样的,但两者的含义有本质差异。作为运算符时,它们是在程序汇编时由汇编程序计算的,计算结结果充当指令的某一个操作数或构成操作数的部分,逻辑运算符的操作对象只能是整型常量。第15页,本讲稿共78页作为指令助记符时,则是在程序运行中执行的,操作对象还可以是寄存器或存储器操作数。例:AND DX,PORT AND 0FEH运算符汇编时产生一立即数CPU执行时关系运算符关系运算符有EQ、
17、NE、LT、GT、LE和GE。关系运算符的两个操作数必须同是数值或同是一个段内的两个存储器地址。比较时若关系不成立(为假)则结果为“0”,若关系成立(为真)则结果为全“1”。结果值在汇编时获得。例:MOV BX,PORT LT 5 汇编为:MOV BX,0FFFFH(条件成立)或 MOV BX,0000H(条件不成立)第16页,本讲稿共78页分析操作符(数值返回运算符)分析操作符的运算对象是存储器操作数。它返回变量或标号的属性值。合成操作符(修改属性运算符)合成操作符作用于存储器操作数时可以改变它们的属性。(3)运算符和操作符的优先权等级 优优 先先 级级运运算算符符和和操操作作符符高高低低1
18、LENGTH,SIZE,WIDTH,MASH,(),(),2PTR,OFFSET,SEG,TYPE,THIS,段寄存名,段寄存名:(加段前缀加段前缀)3HIGH,LOW,(操作数高、低字节)操作数高、低字节)4,(单目),(单目)5*,/,MOD,SHL,SHR6,(双目),(双目)7EQ,NE,LT,LE,GT,GE8NOT9AND10OR,XOR11SHORT第17页,本讲稿共78页 4.3汇编语言的伪指令语句汇编语言的伪指令语句 指示汇编,链接程序如何进行汇编,链接,影响目标代码生成,本身不产生目标代码。一.符号定义伪指令语句:给表达式赋予一种符号名,以便在程序中使用1.EQU等值语句
19、格式:符号名 EQU 表达式 例:PORT EQU 40H 注:EQU语句不能重新定义,即在同一源程序中,用EQU定义过的符号不能赋予不同的值。第18页,本讲稿共78页 2.符号语句=格式:符号名 表达式 功能与EQU类似,但可重新定义。例:EMP=60 EMP=EMP+1 EMP=123X4二:数据定义伪指令 用于定义变量,指定变量的类型和名称,并为变量分配内存单 元。1数据定义语句的格式 格式:变量名 数据定义符 操作数,操作数,操作数 操作数是赋给变量的初值,多个相同类型的变量可在一条语句 中定义。第19页,本讲稿共78页 经过定义的变量有3个属性:TYPE,SEGMENT,OFFSET
20、 若某个变量表示的是一个数组,则其类型属性为变量的单个元素 所占用的字节数。常用的数据定义符DB定义字节变量,每个变量占一个字节的存 储单元DW定义字变量,每个变量占两个字节的存储 单元,存放时低对低,高对高DD定义双字变量,每个变量占4个字节的存 储单元,低对低,高对高第20页,本讲稿共78页 2.具体形式和功能(1)为数据项分配存储单元,用变量名作为该存储单元的名称。例:X DB 25H Y DW 4142H Z DD 12345678H 存储形式如图:XYZ12H34H56H78H41H42H25H 初始值也可以是表达式 如:IN_PORTDBPORT_VAL OUT_PORTDBPOR
21、T_VAL+1其中,PORT_VAL已由EQU语句赋了值。第21页,本讲稿共78页(2)预留内存单元,但不赋值,以存放运算结果 例:A DB?B DB?(3)定义一个表(数组)例:W_TABLEDW1122H,3344H B_TABLE DB 1,2,4,9,16 当表中的操作数相同时,可用重复操作符DUP来缩写 例:ALL_ZERODB0,0,0,0,0,0 ALL_ZERO DB6 DUP(0)(4)定义字符串(DB)例:MESSAGE DBHELLO 每个字符之值为它的ASCII码值,所以用DB来定义第22页,本讲稿共78页 当字符串长度不超过两个字符时,也可以用DW来定义 例:STRI
22、NG1 DBAB STRING2 DW AB STRING3 DWAB,CD43H44H41H42H41H42H42H41HSTRING1STRING2STRINGABBABADC存放形式如右图;第23页,本讲稿共78页(5)当操作数是地址表达式时,可用DW或DD伪指令将标号或 变量操作数的偏移地址或全地址来初始化存储器。例:XX DW CYCLE YY DD CYCLE CYCLE:MOV BX,AX ;BX,AX是程序的一个NEAR标号例:VAR3 DW VAR+1;将VAR+1的的偏移地址存入 VAR3开始的两个字节 VAR3 DW VAR+1;存入的是VAR+1的全地址(6)数据定义语
23、句使汇编程序对访问存储器的指令,产生正确的目标代码。第24页,本讲稿共78页 例1:OPER1 DB?,?OPER2 DW?,?MOV OPER1,0;字节0 OPER1 MOV OPER2,0;字 OPER2 对例2,可以如下处置:MOV AX,WORD PTR OPER1+1;AX=3402H MOV AL,BYTE PTR OPER2 ;AL=34H MOV AL,BYTE PTR OPER2+1;AL=12H例2:OPER1 DB 1,2 OPER2 DW 1234H,5678H MOV AX,OPER1 MOV AL,OPER2 这里类型不匹配第25页,本讲稿共78页3.分析操作符和
24、合成操作符 用分析和合成操作符,返回或修改存储器操作数的3种属性 (1)分析操作符 SEG OFFSET TYPE SIZE LENGTH 格式:操作符 标号或变量 SEG OFFSET 返回标号或变量的段地址和偏移地址例:ARRAY DB 100 DUP(0)MOV AX,SEG ARRAY MOV DS,AX MOV BX,OFFSET ARRAY MOV AL,BX第26页,本讲稿共78页 TYPELENGTHSIZE TYPE 返回存储器操作数类型 SIZE 返回TYPE和LENGTH的乘积,表示为变量所分配的字 节存储单元总数 LENGTH返回变量用DUP重复定义的数据项总数-2FA
25、R标号-1NEAR标号4DWORD双字变量2WORD字变量1BYTE字节变量类型值类型属性存储器操作数例:BUFFER1 DB 100 DUP(0)BUFFER2 DW 200 DUP(20H)BUFFER3 DD 100 DUP(13)则 LENGTH BUFFER1=100 LENGTH BUFFER2=200 LENGTH BUFFER3=100注:用LENGTH返回的存储区必须用DUP来定义,否则返回1 第27页,本讲稿共78页(2)合成操作符 PTR LABLE THIS 1、PTR临时修改或指定存储器操作数的类型属性,而保持原有的段,偏移地址属性,且原定义的类型属性不变仅在当前所在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机电子教程 第四章汇编程序设计精 微机 电子 教程 第四 汇编程序 设计
限制150内