《微机原理与接口技术》课件第4章.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《微机原理与接口技术》课件第4章.pptx》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机原理与接口技术 微机 原理 接口 技术 课件
- 资源描述:
-
1、第4章 汇编语言程序设计第4章 汇编语言程序设计4.1 汇编语言程序格汇编语言程序格式式4.2 伪指伪指令令4.3 汇编语言源程序结汇编语言源程序结构构4.4 汇编语言程序的上机过汇编语言程序的上机过程程4.5 汇编语言程序设汇编语言程序设计计4.6 程序设计举例程序设计举例习题习题4第4章 汇编语言程序设计4.1 汇编语言程序格式汇编语言程序格式4.1.1 汇编语言的程序结构第4章 汇编语言程序设计第4章 汇编语言程序设计1)指令语句指令语句是功能性语句,由Intel 8086/8088 CPU提供的指令形成,实现一定的操作功能,能够被编译成机器代码。2)伪指令语句伪指令语句也叫指示性语句,
2、只是为汇编程序在翻译汇编语言源程序时提供有关信息,并不产生机器代码。程序中的语句:BUF1 DB 34HBUF2 DB 2AHSUM DB?第4章 汇编语言程序设计就是伪指令语句,其功能是在内存中开辟3个名字分别为BUF1、BUF2、SUM的字节存储单元,前两个单元的初值分别为34H和2AH,SUM仅指定一个字节的空单元,并不定义确定的初值。实际上,汇编语言源程序中还可出现宏指令语句或系统调用。宏指令语句就是由若干条指令语句形成的语句体,编译时被展开。一条宏指令语句的功能相当于若干条指令语句的功能。系统调用是直接调用操作系统提供的专用子程序。第4章 汇编语言程序设计4.1.2 汇编语言的语句格
3、式汇编语言的语句格式指令语句和伪指令语句的格式是类似的,格式如下:名字 指令助记符,操作数;注释其中,带方括号的项可以省略,注释内容以分号(;)引导。1.名字名字1)名字的标识符名字也就是由用户按一定规则定义的标识符,可由下列符号组成:(1)英文字母(AZ,az);(2)数字(09);(3)特殊符号(?、_等)。第4章 汇编语言程序设计2)名字的定义规则(1)数字不能作为名字的第一个符号;(2)单独的问号(?)不能作为名字;(3)一个名字的最大有效长度为31,超过31的部分计算机不再识别;(4)汇编语言中有特定含义的保留字,如操作码、寄存器名等,不能作为名字使用。为了便于记忆,名字应该做到见名
4、知意,如用BUFFER表示缓冲区,用SUM表示累加和等。第4章 汇编语言程序设计3)名字的两种主要形式名字有标号和变量两种主要形式。(1)标号。标号在代码段中定义,后面跟着冒号“:”,它也可以用LABEL或EQU伪操作来定义。此外,它还可以作为子程序名定义,由于子程序由伪指令定义,因此子程序名不需冒号说明。标号经常在转移指令或CALL指令的操作数字段出现,用以表示转向地址。标号有三种属性:段基值、段内偏移量(或相对地址)和类型属性。第4章 汇编语言程序设计段基值(SEG)属性:是标号所在逻辑段的段基值,即段起始地址的前16位。此值必须在一个段寄存器中,而标号的段则总是在CS寄存器中。段内偏移量
5、(OFFSET)属性:是标号距离段起始地址的字节数,对于16位段是16位无符号数,对于32位段则是32位无符号数。类型(TYPE)属性:类型表示该标号所代表的指令的转移范围,分为NEAR和FAR两种。如果为NEAR型,则标号只能在段内引用;如果为FAR型,则标号可以在段间引用。第4章 汇编语言程序设计(2)变量。变量在数据段、附加数据段或堆栈段中定义,后面不跟冒号。它也可以用LABEL或EQU伪操作来定义。变量经常在操作数字段出现。它也有段、偏移及类型三种属性。段属性:定义变量的段起始地址,此值必须在一个段寄存器中。偏移属性:变量的偏移地址是从段的起始地址到定义变量的位置之间的字节数。对于16
6、位段,是16位无符号数;对于32位段,则是32位无符号数。在当前段内给出变量的偏移值等于当前地址计数器的值,当前地址计数器的值可以用$来表示。第4章 汇编语言程序设计类型属性:变量的类型属性定义该变量所保留的字节数,如BYTE(DB,1个字节长)、WORD(DW,2个字节长)、DWORD(DD,4个字节长)、FWORD(DF,6个字节长)、QWORD(DQ,8个字节长)、TBYTE(DT,10个字节长)。在同一个程序中,同样的标号或变量的定义只允许出现一次,否则汇编程序会指示出错。第4章 汇编语言程序设计 2.指令助记符指令助记符指令助记符用来指明不同的操作指令,如MOV、ADD等都是指令助记
7、符。3.操作数操作数指令中的操作数是指令执行的对象。对于一般指令,可以有一个或两个操作数,也可以没有操作数;对于伪指令和宏指令,可以有多个操作数。当操作数多于一个时,操作数之间用逗号分开。操作数可以是常数或表达式。第4章 汇编语言程序设计 1)常数(1)数值常数。汇编语言中的数值常数可以是二进制、八进制、十进制或十六进制数,书写时用加后缀(如B、O或Q、D、H)的方式标明即可。对于十进制数,可以省掉后缀。对于十六进制数,当以AF开头时,前面要加数字0,以避免和名字混淆,如十六进制数A6H,应该写成0A6H,否则容易和名字A6H相混。(2)字符串常数。包含在单引号中的若干个字符即形成字符串常数。
8、字符串在计算机中存储的是相应字符的ASCII码,如A的值是41H,AB的值是4142H等。第4章 汇编语言程序设计(3)符号常数。用符号名来代替的常数就是符号常数,如COUNT EQU 3或COUNT=3定义后COUNT就是一个符号常数,与数值常数3等价。第4章 汇编语言程序设计2)表达式由运算对象和运算符组成的合法式子就是表达式。表达式分为数值表达式、关系表达式、逻辑表达式和地址表达式等。(1)算术运算符。算术运算符有:+(加)、-(减)、*(乘)、/(除)、MOD(取余除)。算术运算符可以用于数值表达式和地址表达式中,用于计算数据或地址的结果。下面的两条指令是正确的:MOVAL,4*8+5
9、;数值表达式MOVSI,OFFSET BUF+12;地址表达式第4章 汇编语言程序设计(2)逻辑运算符。逻辑运算符有:AND(与)、OR(或)、XOR(异或)、NOT(非)。逻辑运算符只能用于数值表达式中,不能用于地址表达式中,其运算结果为“真”或“假”。逻辑运算符和逻辑运算指令是有区别的。逻辑运算符的功能在汇编阶段完成,逻辑运算指令的功能在程序执行阶段完成。在汇编阶段,指令ANDAL,78H AND 0FH等价于指令AND AL,08H。第4章 汇编语言程序设计(3)关系运算符。关系运算符有:EQ(相等)、LT(小于)、LE(小于等于)、GT(大于)、GE(大于等于)、NE(不等于)。关系运
10、算符要有两个运算对象。两个运算对象要么都是数值,要么都是同一个段内的地址,其运算结果为“真”或“假”。结果为真时,表示为0FFFFH;运算结果为假时,表示为0000H。指令 MOV BX,32 EQ 45 等价于 MOV BX,0。指令 MOV BX,56 GT 30 等价于 MOV BX,0FFFFH。第4章 汇编语言程序设计4.注释注释注释是语句的说明部分,用来说明一条指令或一段程序的功能,由分号(;)开始,适当地加些注释内容,可以增加程序的可读性,便于阅读、理解和修改程序。汇编源程序时,注释部分不产生机器代码。一条语句可以写在多行上,续行符使用。第4章 汇编语言程序设计4.1.3 汇编语
11、言的运算符汇编语言的运算符1分析运算符分析运算符分析运算符的运算对象是存储器操作数,即由变量名或标号形成的地址表达式,运算结果是一个数值。运算符的格式为运算符 地址表达式第4章 汇编语言程序设计(1)SEG和OFFSET运算符。SEG运算符返回变量或标号所在段的段基值,OFFSET运算符返回变量或标号的段内偏移量。例如,若VAR是一个已经定义的变量,它所在的逻辑段的段基址是3142H,它在该段的偏移量是120H,那么指令MOV AX,SEG VARMOV BX,OFFSET VAR就等价于:MOV AX,3142HMOV BX,120H或LEA BX,VAR 第4章 汇编语言程序设计(2)TY
12、PE运算符。TYPE运算符返回变量或标号的类型属性值。对于各种类型的变量和标号,它们对应的属性值如表4-1所示。第4章 汇编语言程序设计(3)LENGTH运算符和SIZE运算符。LENGTH运算符返回变量数据区分配的数据项总数。SIZE运算符返回变量数据区分配的字节个数。例如,若有如下的数据定义:DAT1 DB 20H,48 DAT2 DW 5 DUP(2,4)第4章 汇编语言程序设计那么,对于下边的指令语句,它所完成的操作如注释所示。MOV AL,TYPE DAT1;AL1 MOV AH,LENGTH DAT1;AH1 MOV BL,SIZE DAT1;BL1 MOV BH,TYPE DAT
13、2;BH2 MOV CL,LENGTH DAT2;CL5 MOV CH,SIZE DAT2;CH20第4章 汇编语言程序设计2.组合运算符组合运算符组合运算符有PTR和THIS两个运算符。(1)PTR运算符。PTR运算符的功能是对已分配的存储器地址临时赋予另一种类型属性,但不改变操作数本身的类型属性,同时保留存储器地址的段基址和段内偏移量的属性。它的使用格式如下:类型 PTR 地址表达式其中,地址表达式部分可以是标号、变量或各种寻址方式构成的存储器地址。对于标号,可以设置的类型有NEAR和FAR;对于变量,可以设置的类型有BYTE、WORD和DWORD。第4章 汇编语言程序设计例如:MOV W
14、ORD PTR BX,AX ;将BX所指存储单元临时设置为字类型MOV BYTE PTR DAT,AL ;将变量DAT临时设置为字节类型 JMP FAR PTR LPT ;将标号LPT临时设置为远类型 第4章 汇编语言程序设计(2)THIS运算符。THIS运算符用来定义一个新类型的变量或标号。但它只指定变量或标号的类型属性,并不为它分配存储区,它的段属性和偏移属性与下一条可分配地址的变量或标号属性相同。格式:THIS 类型其类型选项与PTR运算符相同。例如:LAB EQU THIS BYTE;EQU是赋值伪指令,它将表达式的值赋给标号或变量LAW DW 2341HMOV BL,LAB ;(BL
15、)41HMOV AX,LAW ;(AX)2341H在这里,变量LAB和LAW具有相同的段基址和偏移地址,但LAB是字节类型,而LAW是字类型。第4章 汇编语言程序设计3.分离运算符分离运算符(1)LOW运算符。格式:LOW 表达式功能:取表达式的低字节返回。(2)HIGH运算符。格式:HIGH 表达式功能:取表达式的高字节返回。例如:MOV AL,LOW 2238H;AL38HMOV AH,HIGH 2238H;AH22H第4章 汇编语言程序设计4.2 伪伪 指指 令令汇编语言程序的语句除指令以外还可以由伪操作和宏指令组成。伪操作又称为伪指令,它们不像机器指令那样是在程序运行期间由计算机来执行
16、的,而是在汇编程序对源程序汇编期间由汇编程序处理的,它们可以完成如处理器选择、定义程序模式、定义数据、分配存储区、指示程序结束等功能。伪指令形式上与一般指令相似,但伪指令只是为汇编程序提供有关信息,不产生相应的机器代码。第4章 汇编语言程序设计4.2.1 定义符号的伪指令定义符号的伪指令有时程序中多次出现同一个表达式,为方便起见,可以用赋值伪操作给表达式赋予一个名字。1.等值伪指令等值伪指令EQU格式:EQU 功能:给符号名定义一个值,赋予一个符号名、表达式或助记符。第4章 汇编语言程序设计此后,程序中凡需要用到该表达式之处,就可以用表达式名来代替了。可见,EQU的引入提高了程序的可读性,也使
17、其更加易于修改。上式中的表达式可以是任何有效的操作数格式,可以是任何可以求出常数值的表达式,也可以是任何有效的助记符。举例如下:第4章 汇编语言程序设计CONSTANTEQU256;将数256赋以符号名CONSTANTDATA EQUHEIGHT+12 ;HEIGHT为一标号,地址表达式赋以符号名DATAALPHA EQU7 BETA EQUALPHA2;这是一组赋值伪操作,把72=5赋以符号名BETAADDR EQUVAR+BETA ;将VAR+5赋以符号名ADDRB EQUBP+8 ;变址引用赋以符号名BP8 EQUDS:BP+8 ;加段前缀的变址引用赋以符号名P8第4章 汇编语言程序设计
18、在EQU语句的表达式中,如果有变量或标号的表达式,则在该语句前应该先给出它们的定义。例如,语句AB EQU DATA_ONE+2必须放在DATA_ONE的定义之后,否则汇编程序将指示出错。第4章 汇编语言程序设计2.等号伪指令等号伪指令“=”还有一个与EQU相类似的“=”伪操作也可以作为赋值操作使用。它们之间的区别是:EQU伪操作中的表达式名是不允许重复定义的,而“=”伪操作则允许重复定义。例如,EMP=6或EMP EQU 6都可以使数6赋给符号名EMP,然而不允许两者同时使用。但是,语句EMP=7EMP=EMP+1在程序中是允许使用的,因为“=”伪操作允许重复定义。这种情况下,在第一个语句后
19、的指令中,EMP的值为7;而在第二个语句后的指令中,EMP的值为8。第4章 汇编语言程序设计3.解除定义伪指令解除定义伪指令PURGE格式:PURGE 功能:解除指定符号的定义。解除符号定义后,可用EQU重新进行定义。例如:Y1EQU7;定义Y1的值为7PURGEY1;解除Y1的定义Y1EQU36;重新定义Y1的值为36第4章 汇编语言程序设计4.2.2 定义数据的伪指令定义数据的伪指令这一类伪指令的格式是:变量 助记符 操作数,操作数;注释功能:为操作数分配存储单元,并用变量与存储单元建立联系。其中,变量是可有可无的,它用符号地址表示,其作用与指令语句前的标号相同,但它的后面不跟冒号。如果语
20、句中有变量名,则汇编程序使其记为第一个字节的偏移地址。注释字段用来说明该伪指令的功能,它也是可有可无的。伪指令格式中的助记符是用来说明所定义的数据类型。第4章 汇编语言程序设计这一类伪指令的助记符有以下几种:(1)DB用来定义字节,其后的每个操作数都占有一个字节(8位)的存储单元。(2)DW用来定义字,其后的每个操作数占有一个字(16位,其低位字节在第一个字节地址中,高位字节在第二个字节地址中)。(3)DD用来定义双字(4个字节),其后的每个操作数占有两个字(32位)。第4章 汇编语言程序设计(4)DF用来定义3字(6个字节),其后的每个操作数占有48位,可用来存放远地址。这一伪指令只能用于3
21、86及其后继机型中。(5)DQ用来定义4字(8个字节),其后的每个操作数占有4个字(64位),可用来存放双精度浮点数。(6)DT用来定义5字(10个字节),其后的每个操作数占有5个字,形成压缩的BCD码形式。第4章 汇编语言程序设计这些伪指令可以把其后跟着的数据存入指定的存储单元,形成初始化数据,或者只分配存储空间而并不存入确定的数值,形成未初始化数据空间。DW和DD伪指令还可存储地址,DF伪指令则可存储由16位段地址及32位偏移地址组成的远地址指针。下面举例说明。第4章 汇编语言程序设计【例4-2】操作数可以是常数,或者是表达式(根据该表达式可以求得一个常数),如:DATA_BYTE DB
22、10,4,10HDATA_WORD DW 100,100H,-5DATA_DW DD 3C,0FFFDH汇编程序可以在汇编期间在存储器中存入数据,汇编后的内存分布如图4.1所示。第4章 汇编语言程序设计图4.1 例4-2的汇编结果000A041064000001FBFF3C000000FDFF00DATA_BYTEDATA_WORDDATA_DW10D4D10H100D100D 5D60D0FFFD H第4章 汇编语言程序设计【例4-3】操作数也可以是字符串,如:MESSAGE DB HELLO存储器存储情况如图4.2(a)所示,而DB AB和DW AB的存储情况分别如图4.2(b)和(c)所
23、示。(a)字符串的存储;(b)DBAB;(c)DWAB图4.2 例4-3的汇编结果第4章 汇编语言程序设计【例4-4】操作数“?”可以保留存储空间,但不存入数据。例如:ABC DB 0,?,?,0 DEF DW?,52,?经汇编后的存储情况如图4.3所示。操作数还可以使用复制操作符(DUPLICATION OPERATOR)来复制某个(或某些)操作数。其格式为REPEAT_COUNT DUP(OPERAND,OPERAND)其中,REPEAT_COUNT可以是一个表达式,它的值应该是一个正整数,用来指定括号中的操作数的重复次数。第4章 汇编语言程序设计图4.3 例4-4的汇编结果0000340
24、052DDEFABC第4章 汇编语言程序设计【例4-5】使用DUP实现重复定义。ARRAY1 DB 2 DUP(0,1,2,?)ARRAY2 DB 100 DUP(?)经汇编后的存储情况如图4.4所示。由图可见,例4-5中的第一个语句展开后和语句ARRAY1 DB 0,1,2,?,0,1,2,?是等价的。第4章 汇编语言程序设计图4.4 例4-5的汇编结果000102000102100 个字节ARRAY2ARRAY1第4章 汇编语言程序设计4.2.3 定义程序开始和结束的伪指令定义程序开始和结束的伪指令在程序的开始部分可以用NAME或TITLE为模块命名。NAME的格式是:NAME MODUL
25、E_NAME汇编程序将以给出的MODULE_NAME作为模块的名字。如果程序中没有使用NAME伪操作,则可使用TITLE伪操作,其格式为TITLE TEXT第4章 汇编语言程序设计TITLE伪操作可指定列表文件的每一页上打印的标题。同时,如果程序中没有使用NAME伪操作,则汇编程序将用 TEXT中的前六个字符作为模块名。TEXT中最多可有60个字符。如果程序中既无 NAME又无 TITLE伪操作,则将用源文件名作为模块名。所以,NAME及TITLE伪操作并不是必要的,但一般经常使用TITLE,以便在列表文件中能打印出标题来。第4章 汇编语言程序设计表示源程序结束的伪操作的格式为END LABE
展开阅读全文