微机原理课件第四章宏汇编语言程序设计.ppt
《微机原理课件第四章宏汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《微机原理课件第四章宏汇编语言程序设计.ppt(162页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、微机原理课件第四章宏汇编语言程序设计 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望基本概念:基本概念:汇编语言:用指令的助记符、符号地址、标号汇编语言:用指令的助记符、符号地址、标号 等来编写的语言。等来编写的语言。汇编语言源程序:用汇编语言编写的程序汇编语言源程序:用汇编语言编写的程序(*.asm)有两种语句格式:有两种语句格式:指令性语句:汇编时翻译成目标代码(机器码),指令性语句:汇编时翻译成目标代码(机器码),占代码段空间。占代码段空间。指示性语句(伪指
2、令):汇编时,不产生目标代指示性语句(伪指令):汇编时,不产生目标代码,只是为汇编程序提供信息,不占代码段空间。码,只是为汇编程序提供信息,不占代码段空间。汇编程序:将汇编语言源程序翻译成目标目标程汇编程序:将汇编语言源程序翻译成目标目标程序(代码),这个翻译过程称为汇编,翻译软件就序(代码),这个翻译过程称为汇编,翻译软件就叫汇编程序。叫汇编程序。汇编过程汇编过程 一个完整的汇编语言的语句由下列几部分组成:一个完整的汇编语言的语句由下列几部分组成:标号和变量、指令助记符、界符、常数和注释,所标号和变量、指令助记符、界符、常数和注释,所有这些都称为标记。有这些都称为标记。4-1 汇编语言的标记
3、汇编语言的标记一、标号和变量一、标号和变量 表示指令性语句的符号地址或表示一个数据单表示指令性语句的符号地址或表示一个数据单元的符号地址。元的符号地址。对标号或变量要注意以下几点:对标号或变量要注意以下几点:标号或变量可以由数字、字母、下划线或其它特标号或变量可以由数字、字母、下划线或其它特殊字符组成。殊字符组成。标号或变量不能以数字开头,但可出现在标号的标号或变量不能以数字开头,但可出现在标号的其它地方。其它地方。标号或变量最大长度不能超过标号或变量最大长度不能超过31个字符。个字符。例、例、START:MOV AX,0;标号标号 NEW DB GOOD;变量变量 二、指令助记符二、指令助记
4、符指出指令的性质(功能)指出指令的性质(功能)三、界符三、界符作为一个程序中或一条指令中两个部分的分作为一个程序中或一条指令中两个部分的分隔符号用。隔符号用。例、例、MOV AX,BX ADD AL,CL例、例、MOV AX,BXNEW DB 12H,23H,34HXY DB COMPUTERMOV AX,5/3可用的界符有:可用的界符有:,;,;+-*/:=()$&?.四、常数四、常数二进制:二进制:01001101B十进制:十进制:2000或或2000D八进制:八进制:1700Q十六进制:十六进制:1200H,0FFH串常数:串常数:ABCD 五、注释五、注释 用用;开头后面的内容可随意,
5、用来增加程序可开头后面的内容可随意,用来增加程序可读性的。读性的。表达式由运算对象和运算符组成,在汇编时由表达式由运算对象和运算符组成,在汇编时由汇编程序对它进行运算,运算结果作为一个语句中汇编程序对它进行运算,运算结果作为一个语句中的操作数来使用。的操作数来使用。4-2 汇编语言中的表达式汇编语言中的表达式运算对象:常数、标号或变量运算对象:常数、标号或变量算术运算符算术运算符逻辑运算符逻辑运算符关系运算符关系运算符运算符:运算符:数值返回运算符数值返回运算符修改属性运算符修改属性运算符其它运算符其它运算符一、算术运算符一、算术运算符 有:有:+、-、*、/、MOD(模,即取除法运算结(模,
6、即取除法运算结果之余数)、果之余数)、SHL(左移,左移(左移,左移1位相当于乘位相当于乘2)、)、SHR(右移,右移(右移,右移1位相当于除以位相当于除以2)。)。所有的算术运算符均可以对数据进行运算,运所有的算术运算符均可以对数据进行运算,运算对象与运算结果都是整数。若对地址运算,通常算对象与运算结果都是整数。若对地址运算,通常是在标号上加是在标号上加/减某一个值,例减某一个值,例DA1+2、K2-4各表示各表示一个存储单元的地址,对地址乘是没有意义的。一个存储单元的地址,对地址乘是没有意义的。例例4-2 数组数组ARRAY的定义如下:的定义如下:ARRAY DB 1,2,3,4,5,6,
7、7,8 TRY DB 20 指令为:指令为:MOV AX,30*5MOV CX,(,(TRY-ARRAY);数组长度);数组长度CX 两变量偏移地址之差两变量偏移地址之差 汇编时,计算表达式形成指令为:汇编时,计算表达式形成指令为:MOV AX,150MOV CX,8例例4-3 源程序指令格式如下:源程序指令格式如下:DA EQU 300MOV AX,DA-80MOV BX,DA MOD 100MOV CX,DA/100MOV DH,01100100B SHR 2汇编成:汇编成:MOV AX,240汇编成:汇编成:MOV BX,0汇编成:汇编成:MOV CX,3汇编成:汇编成:MOV DH,0
8、0011001B二、逻辑运算符二、逻辑运算符有:有:AND(与)、(与)、OR(或)、(或)、NOT(非)、(非)、XOR(异或),逻辑运算符是按位运算的,只(异或),逻辑运算符是按位运算的,只能对常数进行运算,得到结果也是常数。能对常数进行运算,得到结果也是常数。例例4-4 MOV AL,NOT 0FFHMOV BL,8CH AND 73HMOV AH,8CH OR 73HMOV CH,8CH XOR 73H汇编成:汇编成:MOV BL,0汇编成:汇编成:MOV AL,0汇编成:汇编成:MOV AH,0FFH汇编成:汇编成:MOV CH,0FFH例例4-5 IN AL,PORT AND DX
9、,PORT AND 0FEH OUT DX,AX前一个前一个AND是指令助记符,而后一个是指令助记符,而后一个AND是是逻辑运算符。逻辑运算符。逻辑运算符与逻辑运算符与8086指令系统中的指令助记指令系统中的指令助记符符AND、OR、XOR、NOT符号完全相同,符号完全相同,但两者是不会混淆的。作为但两者是不会混淆的。作为MASM的运算符的运算符是在汇编过程中进行计算的,而指令助记符是在汇编过程中进行计算的,而指令助记符是在程序执行时进行运算的。是在程序执行时进行运算的。三、关系运算符三、关系运算符 有:有:EQ(相等)、(相等)、NE(不等)、(不等)、LT(小于)、(小于)、GT(大于),
10、(大于),LE(小于或等于)、(小于或等于)、GE(大于或等于)。(大于或等于)。关系运算符的两个操作数必须是数据,关系运算符的两个操作数必须是数据,或是同一段内的两个存储单元的地址。进行或是同一段内的两个存储单元的地址。进行关系运算的比较操作后,结果是一个数值,关系运算的比较操作后,结果是一个数值,若结果为真,输出若结果为真,输出全全1,即,即FFH(8位)或位)或FFFFH(16位)。若结果为假,输出全位)。若结果为假,输出全0。例例4-6 MOV AX,10H GT 16 MOV BL,6 EQ 0110B MOV CX,12H GE 12由于表达式由于表达式10H GT 16为假所以汇
11、编成:为假所以汇编成:MOVAX,0由于表达式由于表达式6 EQ 0110B为真所以汇编成:为真所以汇编成:MOVBL,0FFH注意:注意:MOV BL,1 由于表达式由于表达式12H GE 12 为真所以汇编成:为真所以汇编成:MOVCX,0FFFFH注意:注意:MOV CX,1 四、数值返回运算符四、数值返回运算符数值返回运算符也经常称作分析运算符数值返回运算符也经常称作分析运算符有:有:OFFSET、SEG、TYPE、LENGTH、SIZE 5种,它们加在变量或标号前,返回运种,它们加在变量或标号前,返回运算对象的某个参数值,例如偏移地址值、段算对象的某个参数值,例如偏移地址值、段地址值
12、、类型属性、变量包含的单元数等。地址值、类型属性、变量包含的单元数等。1.OFFSET格式:格式:OFFSET 变量或标号变量或标号OFFSET 返回标号或变量的偏移地址值。返回标号或变量的偏移地址值。例例4-7 DDD:MOV AX,BX;标号;标号 MOV BX,OFFSET DDD ARRAY DB 1,2,3,4;变量;变量 MOV BX,OFFSET ARRAY LEA BX,ARRAY2.SEG格式:格式:SEG 变量或标号变量或标号SEG 返回标号或变量的段地址值。返回标号或变量的段地址值。例例4-8 DDD:MOV AX,BX;标号;标号 MOV AX,SEG DDD MOV
13、CS,AXARRAY DB 1,2,3,4;变量;变量 MOV AX,SEG ARRAY MOV DS,AX3.TYPE格式:格式:TYPE 变量或标号变量或标号TYPE加在变量前,返回变量的类型属性。加在变量前,返回变量的类型属性。TYPE加在标号前,返回标号的距离属性。加在标号前,返回标号的距离属性。例例4-9 A1 DB 1,2,3;变量;变量A2 DW 1234H;变量;变量A3 DD 6 DUP(?);变量(?);变量 L1:MOV AH,TYPE A1;标号;标号MOV BH,TYPE A2MOV CH,TYPE A3MOV DH,TYPE L1MOV DX,TYPE L1汇编成:
14、汇编成:MOVAH,1汇编成:汇编成:MOVBH,2汇编成:汇编成:MOVCH,4汇编成:汇编成:MOVDH,0FFH汇编成:汇编成:MOVDX,0FFFFH4.LENGTH格式:格式:LENGTH 变量变量当变量中使用当变量中使用DUP时,时,LENGTH返回此变返回此变量所包含的量所包含的单元数单元数,对其它变量则返回,对其它变量则返回1。例例4-10 M1 DW 100 DUP(?)(?)M2 DB 1,2,3,4M3 DW 1234H,12H,3456HMOV CX,LENGTH M1MOV BL,LENGTH M2MOV DL,LENGTH M3汇编成:汇编成:MOVCX,100 汇
15、编成:汇编成:MOVBL,1 MOVBL,4 汇编成:汇编成:MOVDL,1 MOVDL,3 5.SIZE格式:格式:SIZE 变量变量SIZE加在变量前,返回该变量包含的总字加在变量前,返回该变量包含的总字节数,节数,注意注意不能简单去数有多少个字节,而不能简单去数有多少个字节,而是利用公式是利用公式SIZE=LENGTHTYPE来计算。来计算。例例4-10 M1 DW 100 DUP(?)(?)M2 DB 1,2,3,4M3 DW 1234H,12H,3456HMOV CX,SIZE M1MOV BL,SIZE M2MOV DL,SIZE M3汇编成:汇编成:MOVCX,200 汇编成:汇
16、编成:MOVBL,1 MOV BL,4 汇编成:汇编成:MOVDL,2 MOV DL,6 五、修改属性运算符五、修改属性运算符修改属性运算符也经常称作综合运算符修改属性运算符也经常称作综合运算符有:有:段操作符段操作符、PTR、THIS、HIGH、LOW、SHORT 6种,可以在程序运行过程中,通种,可以在程序运行过程中,通过修改属性运算符来修改变量或标号的属性,过修改属性运算符来修改变量或标号的属性,包含段属性、偏移地址属性、类型属性等。包含段属性、偏移地址属性、类型属性等。1.段操作符段操作符格式:格式:段前缀:变量或地址表达式段前缀:变量或地址表达式段前缀有段寄存器段前缀有段寄存器CS、
17、DS,ES,SS后跟冒号后跟冒号:,用来表示某个变量或地址被修改到哪个,用来表示某个变量或地址被修改到哪个段寄存器提供的段地址。段寄存器提供的段地址。例例4-12 MOV AX,BX ;DS:BXAX MOV AX,ES:BX;ES:BXAX2.PTR格式:格式:类型类型/距离:距离:PTR 变量或标号变量或标号功能:功能:是将是将PTR左边的类型属性赋给右边的左边的类型属性赋给右边的变量或标号。这样可以保证运算时操作数类变量或标号。这样可以保证运算时操作数类型的匹配,常与类型型的匹配,常与类型BYTE、WORD、DWORD、FAR、NEAR等连用。等连用。例例4-13N1 DB 12H,34
18、HN2 DW 1122H,3344HLO:MOV AX,WORD PTR N1MOV BL,BYTE PTR N2例例4-14 MOV BX,10H MOV BYTE PTRBX,10HMOV WORD PTRBX,12HMOV BX,ALMOV BX,AX这两条指令正确与否?这两条指令正确与否?JMP FAR PTR LO;修改标号的距离属性;修改标号的距离属性JMP NEAR PTR LO3.THIS格式:变量或标号格式:变量或标号 EQU THIS 类型或距离类型或距离功能:功能:将类型或距离属性赋给变量或标号,将类型或距离属性赋给变量或标号,该变量或标号的段地址和偏移地址与下一个该变量
19、或标号的段地址和偏移地址与下一个存储单元的地址相同。存储单元的地址相同。例例4-15 FIRST EQU THIS BYTE TABLE DW 200 DUP(?)(?)FIRST的偏移地址值与的偏移地址值与TABLE的偏移地址值的偏移地址值相同,区别在于相同,区别在于FIRST变量为字节类型,而变量为字节类型,而TABLE为字类型。为字类型。例例4-16 SSP EQU THIS FAR MOV AX,200此时此时MOV AX,200前有标号前有标号SSP,并赋予,并赋予FAR属性,允许其它段的属性,允许其它段的JMP指令跳到本段指令跳到本段SSP标号地址处来。标号地址处来。相当于相当于
20、SP:MOV AX,200;SP是远标号是远标号4.SHORT格式:格式:SHORT 标号标号SHORT用来说明转移类指令中转向地址的用来说明转移类指令中转向地址的属性,指出转向的目标地址与本指令之间的属性,指出转向的目标地址与本指令之间的距离在距离在-128+127之间,即限制在短转移范之间,即限制在短转移范围内。围内。例例4-17 JMP SHORT L2 L2:MOV AX,BX 5.HIGH和和LOW格式:格式:HIGH/LOW 变量或标号变量或标号HIGH和和LOW称为字节分离运算符,对一个称为字节分离运算符,对一个数或地址表达式,数或地址表达式,HIGH从中分离出高位字节从中分离出
21、高位字节LOW从中分离出低位字节。从中分离出低位字节。例例4-18 K1 EQU 1234HK2 EQU 5678HMOV AH,HIGH K1MOV BL,LOW K2汇编成:汇编成:MOVAH,12H 汇编成:汇编成:MOVBL,78H 六、其它运算符六、其它运算符有:有:、()()、.、MASK和和WIDTH等等七、优先级七、优先级表达式是常数、变量、标号和运算符的表达式是常数、变量、标号和运算符的组合,在计算表达式时,应按优先级高低进组合,在计算表达式时,应按优先级高低进行计算,同时遵循同级运算从左到右的原则行计算,同时遵循同级运算从左到右的原则计算。计算。4-3 伪指令语句伪指令语句
22、 伪指令语句没有对应的机器代码,并不伪指令语句没有对应的机器代码,并不像指令语句那样由像指令语句那样由CPU来执行,它是来执行,它是MASM汇编程序对源程序汇编期间进行处理的。主汇编程序对源程序汇编期间进行处理的。主要完成变量定义、存储器分配、指示程序开要完成变量定义、存储器分配、指示程序开始和结束、段定义、段分配等。伪指令有以始和结束、段定义、段分配等。伪指令有以下几种类型:下几种类型:数据定义语句数据定义语句DB、DW、DD等等标号赋值语句标号赋值语句EQU、=段定义语句段定义语句SEGMENT ENDS段分配语句段分配语句ASSUME过程定义语句过程定义语句PROC ENDP程序开始结束
23、语句程序开始结束语句ORG、END、NAME一、数据定义语句一、数据定义语句格式格式1:变量名:变量名 助记符助记符 操作数,操作数操作数,操作数 格式格式2:变量名:变量名 助记符助记符 n DUP(操作数,操作数(操作数,操作数)A1 DB 1,2,3A3 DB 5 DUP(1,2)功能功能:将操作数存入变量名指定的存储单元:将操作数存入变量名指定的存储单元中,或者只分配存储空间不存入数据。中,或者只分配存储空间不存入数据。变量名变量名它用符号表示,可以省略,作用它用符号表示,可以省略,作用与指令语句中的标号相同,但后面不跟冒号与指令语句中的标号相同,但后面不跟冒号:。汇编程序汇编时将此变
24、量的助记符后。汇编程序汇编时将此变量的助记符后的第一个字节的偏移地址作为它的符号地址。的第一个字节的偏移地址作为它的符号地址。助记符助记符主要有:主要有:DB:用来定义字节,表示每个操作数占一个字节:用来定义字节,表示每个操作数占一个字节DW:用来定义字,表示每个操作数占一个字:用来定义字,表示每个操作数占一个字DD:用来定义双字,表示每个操作数占两个字:用来定义双字,表示每个操作数占两个字DQ:用来定义四个字,表示每个操作数四个字:用来定义四个字,表示每个操作数四个字DT:用来定义:用来定义10个字节,表示每个操作数个字节,表示每个操作数10个字节个字节操作数操作数操作数可以是常数、字符串、
25、变操作数可以是常数、字符串、变量、标号、表达式等,多个操作数之间必须量、标号、表达式等,多个操作数之间必须用逗号用逗号,隔开。隔开。例例4-21 操作数是常数或表达式操作数是常数或表达式DA1 DB 10H,20HDA2 DW 1122H,34HDA3 DD 5*10H,1234H例例4-22 操作数是字符串操作数是字符串FIRST DB HELLOSECOND DW OKTHIRD DB OK注意:注意:用用DW定义字符定义字符串时,只允许包含两个串时,只允许包含两个字符,多于两个字符时,字符,多于两个字符时,只能用只能用DB来定义。来定义。例例4-23 操作数用?定义不确定值的变量,用操作
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课件 第四 汇编语言 程序设计
限制150内