微机原理第三章魏.ppt
《微机原理第三章魏.ppt》由会员分享,可在线阅读,更多相关《微机原理第三章魏.ppt(135页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、微 机 原 理微机原理第三章汇编语言程序设计微 机 原 理概述汇编语言:汇编语言是一种面向计算机的符号语言。用指令的助记符、符号地址、标号、伪指令等书写程序的语言。汇编语言源程序:用汇编语言书写的源程序。汇编:将汇编语言源程序翻译成机器语言程序的过程。汇编程序:完成汇编过程的系统程序。ASM和MASM 微 机 原 理3.1汇编语言的基本元素在8086/8088汇编语言中,有两类汇编语言指令。一类是执行性指令,称为指令语句,汇编程序汇编后可产生机器指令代码;另一类是指示性语句,称为伪指令,其作用仅仅是告诉汇编程序对源程序中的执行性指令应该如何产生代码,或分配存储区。微 机 原 理3.1.1汇编语
2、言的指令语句格式由汇编语言编写的源程序是由许多语句(也可称为汇编指令)组成的。每个语句由14个部分组成。其格式是:标号指令助记符操作数;注释微 机 原 理1标号(标识符Identifiers)标识符是由程序员定义的具有特定意义的字符序列,是给指令或某一存储单元地址所起的名字。标识符可由下列字符组成:字母:Az;数字:09;特殊字符:?、_、$。标识符最多为31个字符。数字不能作标识符的第一个字符。当标识符后跟冒号时,表示是标号。它代表该行指令的起始地址。当标识符后不带冒号时,表示变量。伪指令前的标识符不加冒号。标号指令助记符操作数;注释微 机 原 理2指令助记符(保留字Reservedword
3、s)是一类特殊的标识符,可以是8086/8088的指令助记符,也可以是伪指令。如果指令带有前缀(如LOCK、REP、REPEREPZ、REPNEREPNZ),则指令前缀和指令助记符要用空格分开。标号指令助记符操作数;注释微 机 原 理3操作数指令执行的对象。例如:RET;无操作数INCCX;一个操作数MOVCX,DI;两个操作数如果是伪指令,则可能有多个操作数,例如:COSTDB3,4,5,6,7;5个操作数当操作数超过1个时,操作数之间应用逗号分开。操作数可以是常数、寄存器名、标号、变量,也可以是表达式,例如:MOVAX,BP+4;标号指令助记符操作数;注释微 机 原 理4注释该项是为源程序
4、所加的注解,用于提高程序的可读性。在注释前面要加分号“;”,它位于操作数之后。汇编时,对注解不作处理,仅在列源程序清单时列出,供编程人员阅读。例如:INAL,PORTB;读B口到AL中标号指令助记符操作数;注释微 机 原 理3.1.2汇编语言的运算符汇编语言运算符所指定的操作由汇编程序在汇编过程中完成,结果作为指令的目标代码被保存,与程序执行时CPU完成的可执行指令是两回事,故汇编语言运算符也称为伪操作符。汇编语言的运算符有:算术运算符:+、MOD(取余数);逻辑运算符:AND、OR、NOT、XOR;关系运算符:EQ、NE、LT、GT、LE、GE;取值运算符和属性运算符。微 机 原 理1算术运
5、算符和逻辑运算符(1)算术运算符:+、MOD算术运算符只能用于数字量操作数,结果也是数字量。用于存储器操作数时,只有、运算符有意义。MOD取模是求数字量除法所得的余数。(2)逻辑运算符:AND、OR、NOT、XOR逻辑运算符的操作只能是数字的,且结果也是数字的。存储器操作数不能进行逻辑运算。逻辑运算作为运算符时,是在程序汇编时计算的;而作为指令助记符时,则是在程序执行时计算的。微 机 原 理2关系运算符 关系运算符:EQ、NE、LT、GT、LE、GE;相等EQ(Equal)、不等NE(NotEqual)、小于LT(LessThan)、大于GT(GreaterThan)、小于等于LE(LessT
6、hanorEqual)、大于等于GE(GreaterThanorEqual)关系运算符连接的两个操作数,必须都是数字的或是在同一段内的存储器地址。若关系为假(关系不成立),则结果为0H;若关系为真(关系成立),则结果为0FFFFH。微 机 原 理例如:MOVBX,(PORTLT5)AND20)OR(PORTGE5)AND30)当PORT的值小于5时,上述指令汇编为:MOVBX,20否则为MOVBX,30微 机 原 理3取值运算符(分析运算符)把存储器地址操作数分解成它的组成部分。取值运算符有:SEG、OFFSET、TYPE、SIZE和LENGTHSEG给出一个变量或标号的段地址;OFFSET给
7、出一个变量或标号的16位偏移量;TYPE返回表示存储器操作数内存变量和标号类型的数值。类型byteword dword qword tbyteNEARFAR类型值124810-1(FFH)-2(FEH)微 机 原 理SIZE取得并返回由DUP定义的内存变量的字节数。LENGTH取得并返回由DUP定义的内存变量基本单元的个数。格式:SEG符号名OFFSET符号名TYPE符号名SIZE符号名LENGTH符号名例如:MOVAX,SEGSLOT;将SLOT的段地址送入AX寄存器MOVAX,OFFSETSLOT;将SLOT的偏移地址送入AX寄存器,微 机 原 理4属性运算符(合成运算符)属性运算符用来给
8、指令中的操作数指定一个临时属性,而暂时忽略当前的属性。(1)合成运算符PTR忽略当前操作数的类型(字节或字)及属性(NEAR或FAR),而给出一个临时的类型或属性。一般格式如下:类型(或属性)PTR操作数表达式PTR运算符建立一个存储器地址操作数,它与PTR右边的存储器地址操作数有相同的段地址与偏移量,其类型由左边的操作数决定。微 机 原 理例如:SLOTDW25MOVAL,BYTEPTRSLOTSLOT已定义成字单元。若想取出它的第一个字节内容,则可用PTR使它暂时改变为字节单元。MOVBX,5;汇编程序不知道传送的是字节还是字MOVBYTEPTRBX,5;若是一个字节MOVWORDPTRB
9、X,5;若是字改变属性的例子如下:JMPFARPTRSTEP即使标号STEP原先是NEAR型的,使用FARPTR后,这个转移就变成段间转移了。微 机 原 理(2)合成运算符 THIS 象PTR一样可用来建立一个特殊类型的存储器地址操作数,新的存储器地址操作数的段和偏移量部分就是下一个能分配的存储单元的段和偏移量,即汇编程序进行汇编遇到THIS时的当前值。其类型在THIS运算符后面指定。例如:MY_BYTEEQUTHISBYTEMY_WORDDW?将建立MY_BYTE具有字节类型,且与MY_WORD具有相同的段和偏移量。微 机 原 理(3)段取代运算符 用于在一条指令中以新的段属性取代旧的段属性
10、。有两种格式:段寄存器:地址表达式例如:ADDAX,ES:ALT 段名:地址表达式所用的段名事前必须通过ASSUME伪指令与一个段寄存器建立联系。例如:ASSUMEES:EXTRA_DATAADD AX,EXTRA_DATA:ALT微 机 原 理(4)短程运算符SHORT 仅用于无条件转移指令。指出转移的标号不仅是NEAR型的,并且是在下一条指令的128127个字节范围内。运算符SHORT事先对标号作了说明,则会汇编成两字节的转移指令,既节省了单元又加快了执行速度。例如:JMPSHORTH2;H2:MOVAX,0微 机 原 理3.1.3表达式 表达式是由运算符和操作数组成的序列。在汇编时,它产
11、生一个确定的值。仅表示一个常量,相应的表达式称为常量表达式;也可以表示一个存储单元的偏移地址,相应的表达式称为地址表达式。操作数通常有下列几种类型微 机 原 理1常数 汇编语言语句中出现的常数有7种:二进制数二进制数字后跟字母B,如01000001B。八进制数八进制数字后跟字母Q或O,如202Q或202O。十进制数十进制数字后跟D或不注,如85D或85。十六进制数十六进制数字后跟H,如56H,0FFH。注意,当数字的第一个字符是AF时,在字符前应添加一个数字0,以示和变量的区别。微 机 原 理 十进制浮点数浮点十进制数如25E-2。十六进制实数十六进制实数后跟R,数字的位数必须是8,16或20
12、。在第一位是0的情况下,数字的位数可以是9,17或21。如0FFFFFFFFR。以上第、两种数字格式只允许在MASM中使用。字符和字符串字符和字符串要求用单引号括起来,如BD。微 机 原 理2常量操作数常量操作数是一个数值操作数,一般是常量或者是常量的标识符。例如常量操作数有100,PORT,VAL等。数字常量操作数可采用二、八、十或十六进制等形式。操作数值的允许范围为6553665535。字符串常量操作数值为相应字符的ASCII码。常量操作数是出现在程序中的确定值,它在程序的运行期间不会发生变化。微 机 原 理3存储器操作数存储器操作数是一个地址操作数,代表一个存储单元的地址。可以分为变量及
13、标号两者类型:变量是存放该变量的存储单元的符号地址存储器操作数所代表的是某个数据在数据段、附加段或堆栈段中的地址,称变量。变量所对应的存储单元内容在程序的运行过程中是可以改变的。标号则是指令代码的符号地址存储器操作数所代表的是某条指令代码在码段中的地址,在程序运行过程中不能改变,标号通常作为转移指令或调用指令的目标操作数。微 机 原 理存储器操作数作为存储单元的地址,有三个属性:(1)段地址:存储单元所在段的段地址;(2)偏移地址:存储单元在所在段内的偏移地址;(3)类型:变量的类型是存储单元所存放数据项的字节数;标号的类型作为转移或调用指令的目标操作数的寻址方式,即NEAR和FAR。标号的默
14、认类型属性为NEAR。微 机 原 理4常量表达式常量表达式通常由常量操作数及运算符构成,在汇编时,产生一个常量。例如:PORT_VAL+1PORT_VALAND20H分析运算符作用于存储器操作数所形成的表达式也是常量表达式。例如:OFFSETSUMSEGSUMTYPECYCLE微 机 原 理5地址表达式地址表达式通常由存储器操作数与运算符构成。地址操作数构成地址表达式时,必须有明确的物理意义。所以对存储器操作数的运算可以是加或减一个常量。例SUM2、CYCLE5表达式SUM2、CYCLE5的值仍然是一个存储器操作数,其段地址与类型分别与存储器操作数SUM及CYCLE相同,但偏移地址分别比SUM
15、大2及CYCLE小5。表达式是在汇编时计算的,而变量单元的内容在程序的运行过程中可以改变。微 机 原 理3.1.4汇编语言程序汇编步骤用汇编语言编写源程序 经过汇编生成目标程序 经过链接生成执行程序汇编目标程序汇编程序MASM.EXE汇编语言源程序执行程序链接编辑程序EDIT.EXE链接程序LINK.EXE文件名.ASM文件名.OBJ文件名.EXE微 机 原 理1编写源程序用文本编辑程序EDIT.EXE或EDLIN编写汇编语言源程序,产生扩展名为.ASM的源文件。2汇编用汇编语言编写的源程序经过汇编程序MASM.EXE自动翻译成目标程序,产生扩展名为.OBJ的目标文件;对源程序中使用了非法指令
16、,标号重复,相对转移超出转移范围等非逻辑性错误给出提示。8086的汇编程序为ASM-86,扩展后的宏汇编程序为MASM-86,增加了宏处理功能、条件汇编及某些伪指令,且可支持8087协处理器的操作。微 机 原 理汇编程序的主要功能是:1、将汇编语言源程序翻译成机器语言代码;2、按程序指定,分配存储区域(包括程序区,数据区,堆栈区等);3、将各种进位制数据转换成二进制数;4、把字符转换成ASCII码;5、计算出数值表达式的值;6、对源程序进行检查,给出程序的语法错误信息,如非法格式,未定义的助记符、标号、漏掉操作数等。微 机 原 理3链接用链接程序LINK.EXE将一个或多个.OBJ目标程序进行
17、链接,生成扩展名为.EXE的可执行程序。4调试经过上述步骤所获得的.EXE可执行文件,在运行过程中可能出现逻辑错误,需对可执行文件.EXE进行调试。调试汇编程序最常用的工具是动态调试程序DEBUG。其中从某地址运行程序、设置断点、单步跟踪等功能,可以支持对程序的调试。微 机 原 理3.2伪指令 伪指令语句也称为指示性语句,是用来对程序的汇编过程进行控制,实现初始化存储器、定义符号常数、列表、存储空间分配等处理。根据功能的不同,伪指令可分为以下几种类型:数据定义伪指令 符号定义伪指令 段定义伪指令 过程定义伪指令 宏定义 模块组织和多模块连接微 机 原 理3.2.1 数据定义伪指令 该类伪指令用
18、来定义存储空间及其所存数据长度。DB:定义字节,即每个数据是1个字节;DW:定义字,即每个数据占1个字(2个字节);DD:定义双字,即每个数据占2个字。低字部分在低地址,高字部分在高地址;DQ:定义4字长,即每个数据占4个字;DT:定义10个字节长,用于压缩式十进制数。微 机 原 理例:DATA1DB5,6,8,100,ABCD表示从DATA1单元开始,连续存放5,6,8,100,共占4个字节地址。DATA2DW7,287表示从DATA2单元开始,连续存放7,287两个字,共占4个字节地址。定义一个存储区时,也可以不放数据,如TABLEDB?;表示在TABLE单元中存放的内容是随机的。微 机
19、原 理05H06H08H64H41H42H43H44H07H00H1FH01H42H41H44H43HDATA1DATA2DATA1DB5,6,8,100,ABCDDATA2DW7,287,AB,CDDATA3DDABCD,CD44H43H42H41H44H43H00H00HDATA3微 机 原 理当定义一个存储区内的每个单元要放置同样的数据时,可用DUP操作符,一般格式为:COUNTDUP(?);COUNT为重复的次数,?为要重复的数据。如:BUFFERDB100DUP(0);表示以BUFFER为首地址的100个字节中存放00HBUFFER1DB100DUP(3,5,2DUP(10),35)
20、,24,NUM表示以BUFFER1为首地址的区域存放(3,5,10,10,35)100次,和24,NUM微 机 原 理 符号定义伪指令 等值伪指令EQU给左边符号定义一个值。该值可以是任何有效的操作数表达式,如一个常数、另一个符号名或地址表达式,甚至一个指令助记符。在程序中,凡是出现该符号的地方,汇编时均用该值代替。如:TIMESEQU50;TIMES=50DATADBTIMESDUP(?)FIRSTEQUSECOND+1;FIRST=SECOND+1ADD1EQUADD;为ADD指定一个别名ADD1微 机 原 理解除伪指令PURGE用于释放由EQU伪指令定义的符号变量,这样这些变量就可以被重
21、新定义。EQU伪指令定义的符号在PURGE伪指令解除前,不能重新定义。例:PURGE符号名1,符号名2,符号名N等号赋值伪指令“=”功能与EQU相似,能对已定义的符号名重新定义而无须先释放。TIMES=50;FIRST=SECOND+1;ADD1=ADD;微 机 原 理3.2.3段定义伪指令 一个完整的汇编源程序由代码段、堆栈段、数据段,有时还有附加段所组成。段定义伪指令可将源程序划分成若干段,以便汇编和连接时将各同名段进行组合。段定义伪指令一般格式为:段名SEGMENT定位类型组合类型类别 ;段体内容,由指令及伪指令组成。段名ENDSSEGMENT和ENDS应成对使用,缺不可。微 机 原 理
22、段名:段名是不可省略的,是给定义的 段所起的名称。例如:STACKSEGMENTSTACKDW20DUP(?)STACKENDS 定位类型:表示该段起始地址位于何处。字节型(BYTE),段起始地址可位于任何地方;字型(WORD),段起始地址必须位于偶地址;节型(PARA),即段起始地址必须能被16除尽;页型(PAGE),即段起始地址可被256除尽;缺省时,段起始地址便定位为PARA型的。微 机 原 理 组合类型:组合类型用于告诉连接程序,该段和其它段的组合关系。连接程序可以将不同模块的同名段进行组合。组合类型有:NONE表明本段与其它段逻辑上不发生关系,省略时,便指定为这一组合类型。PUBLI
23、C与其它模块中用PUBLIC说明的同名段按先后连接成一个逻辑段,使用同一个物理段地址。STACK将具有STACK类型的同名段连接成一个大的堆栈,由各模块共享。微 机 原 理COMMON与其它模块中由COMMON说明的所有同名段连接时,被重叠放在一起,其长度是同名段中最长者的长度。MEMORY由MEMORY说明的段。在连接时,它被放在所装载程序的最后存储区(最高地址)。若几个段都有MEMORY组合类型,则连接程序只认定首先遇到的段具有MEMORY组合类型,其它段则认为是COMMON类型,并被叠放在一起。AT表达式段地址是表达式所给定的值。在程序中就可由用户直接来定义段地址。但这种方式不适用于代码
24、段。微 机 原 理类别:是用单引号括起来的字符串,以表明该段的类别。如代码段(CODE)、数据段(DATA),堆栈段(STACK)等。各模块中同一类型的段可能具有不同的名字,连接时将同类别的段(但不一定同名)放在连续的存储区内。上述的组合类型便于多个模块的连接。若程序仅有一个模块,即只包括代码段、数据段和堆栈段时,为了和其它段有区别,除了堆栈段用STACK说明外,其它段的组合类型、类别均可省略。微 机 原 理例如有两个模块:模块1STACKSEGMENTSTACKDW300DUP(?)STACKENDSDATASEGMENTCOMMONDATAENDSCODESEGMENT PUBLICCOD
25、EENDS模块2STACKSEGMENTSTACKDW30DUP(?)STACKENDSDATASEGMENTCOMMONDATAENDSCODESEGMENTPUBLICCODEENDSEND微 机 原 理 设定段寄存器伪指令ASSUME段寄存器定义伪指令。用于建立段名和段寄存器之间的严格对应关系。可通知汇编程序哪一个段寄存器是当前段的段寄存器,以便对使用变量或标号的指令汇编出正确的目的代码。其格式为:ASSUME段寄存器:段名,段寄存器:段名,ASSUME伪指令只是指明某一个段地址与段寄存器的联系,没有将段地址送入该寄存器的操作。因此要将段地址装入段寄存器还需用汇编指令来实现。微 机 原
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 第三
限制150内