资源描述:
《微型计算机技术-陈慈发-第12讲-汇编语言的基本语法ppt课件》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
微机技术第十二讲三峡大学覃颖0717-6390287,15572768176qinying@ctgu.edu.cn
1本讲课堂讲授内容:汇编语言的基本语法
2语句类型及格式指令性语句——由指令构成格式:[标号:]操作码操作数[;注释]【例】START:MOVAX,DATA指示性语句——由命令(伪指令)构成格式:[名字]伪指令[参数][;注释]【例】DATASEGMENTAT2000H
3变量、常量、标号和表达式1、变量变量定义格式:变量名变量定义伪指令表达式1,表达式2,……【例】VAR1DB12H,34HVAR2DW1234H,5678HVAR3DD12345678HVAR4DQ1122334455667788HVAR5DT11223344556677889900H
4变量、常量、标号和表达式1、变量变量具有三个属性:段地址属性:偏移地址属性:类型属性:字节DB(8位)一个字节存储单元字DW(16位)两个连续字节存储单元双字DD(32位)四个连续字节存储单元四字DQ(64位)八个连续字节存储单元五字DT(80位)十个连续字节存储单元
5变量、常量、标号和表达式2、常量数字常量:【例】MOVAX,100DMOVBL,0FCHMOVCL,10001011B
6
7
8变量、常量、标号和表达式2、常量符号常量:用标示符(常量名)表示的常量。符号常量定义格式:常量名=/EQU表达式【例】R=30PAIEQU3.1416CCEQU10001010B=可重复定义EQU不可重复定义
9变量、常量、标号和表达式3、标号标号是指令性语句内存存放地址的符号表示。标号定义格式:标号名:汇编指令语句标号也有三个属性:段地址、偏移地址和距离。距离属性有FAR和NEAR两种,可用LABEL定义:标号名LABEL距离
10变量、常量、标号和表达式4、表达式表达式由常量、变量、标号及连接它们的运算符组成。MASM汇编程序可以使用两种表达式,即数值表达式和地址表达式。
11变量、常量、标号和表达式4、表达式一、数值表达式:一般由运算符连接各种常量构成。MASM支持的常量运算符包括算术运算符、逻辑运算符和关系运算符。
12变量、常量、标号和表达式4、表达式1)算术运算符:包括加(+)、减(-)、乘(*)、除(/)、取模(MOD,求余数)、左移(SHL,相当于乘法),右移(SHR,相当于除法)等7种运算符。【例】NUMDW08H,32H+(55HSHR2)MOVDX,1234HMOD1000H
13变量、常量、标号和表达式4、表达式2)逻辑运算符:包括与(AND)、或(OR)、非(NOT)和异或(XOR)等4种运算符。【例】ANDAL,7FHAND80H请注意两个AND的区别!
14变量、常量、标号和表达式4、表达式3)关系运算符:包括相等(EQ)、不等(NE)、小于(LT)、大于(GT)、小于或等于(LE)、大于或等于(GE)等6种运算符。【例】MOVDX,10LT100汇编后指令代码为:MOVDX,0FFFFH关系运算符运算的常量必须是无符号数。当关系成立时其结果为全1,否则为全0。
15变量、常量、标号和表达式4、表达式3)关系运算符:【例】MOVBX,((VALUELT5)AND20)OR((VALUEGE5)AND30)相当于根据VALUE的值进行条件汇编:关系运算符可以和逻辑运算符组合使用。当VALUE<5时汇编为:MOVBX,20当VALUE≥5时汇编为:MOVBX,30
16变量、常量、标号和表达式4、表达式二、地址表达式:地址表达式的结果是一个存储单元的地址。常用的地址表达式形式是:标号(或变量)+/-数字注意:如果指令中的操作数需要用到地址表达式时,应注意其物理意义。比如将两个地址作乘/除操作就没有意义,对不同段数据的地址相加减当然也没有意义。【例】MOVAX,VAR+4
17变量、常量、标号和表达式4、表达式表达式中可以使用的运算符有6类,它们是算术运算符、逻辑运算符、关系运算符、分析运算符、合成运算符、其它运算符等,其优先级如下表所示:
18变量、常量、标号和表达式4、表达式高优先级低1(),[]2LENGTH,SIZE,WIDTH,MASK3PTR,OFFSET,SEG,TYPE,THIS4*,/,MOD5+,-6EQ,NE,LT,LE,GT,GE7NOT8AND9OR,XOR
19伪指令(指示性语句)1、变量定义伪指令格式:变量名DB/DW/DD/DQ/DT表达式,……功能:为变量分配1字节/字/双字/四字/五字的存储单元,并给它们赋值。说明:使用这些伪指令可以定义数值、字符串、数组等。
20伪指令(指示性语句)2、DUP重复子句伪指令格式:重复次数DUP(重复定义的内容)功能:与变量定义伪指令配合,用于重复定义数据。说明:重复次数用于说明需要定义多少次括号中的重复定义的内容,常用于为变量预留存储空间。【例】ST1DB2DUP(0)ST2DW2,2DUP(?)ST3DB2DUP(0,1,2,3)ST100ST3000001ST202020003??00??01??02??03
21伪指令(指示性语句)3、变量属性伪指令格式:SEG变量功能:获得该变量所在的段地址值。【例】MOVBX,SEGVAR1在数据定义中变量具有5种属性,可以用伪指令来获得变量的相关属性信息。1)段属性
22伪指令(指示性语句)3、变量属性伪指令格式:OFFSET变量功能:获得该变量所在段中的偏移地址值。【例】MOVSI,OFFSETVAR2在数据定义中变量具有5种属性,可以用伪指令来获得变量的相关属性信息。2)偏移地址属性
23伪指令(指示性语句)3、变量属性伪指令格式:TYPE变量功能:获得变量定义的类型。【例】MOVAX,TYPEVAR3在数据定义中变量具有5种属性,可以用伪指令来获得变量的相关属性信息。3)类型属性说明:类型以字节的整数倍表示,DB型为1,DW型为2,DD型为4,DQ型为8,DT型为10;NEAR型为FFFFH,FAR型为FFFEH。
24伪指令(指示性语句)3、变量属性伪指令格式:LENGTH变量功能:获得变量定义的数据元素个数。【例】MOVAX,LENGTHVAR4在数据定义中变量具有5种属性,可以用伪指令来获得变量的相关属性信息。4)长度属性说明:只有使用DUP定义变量时才能够得出有效的元素个数,否则将得出长度为1。
25伪指令(指示性语句)3、变量属性伪指令格式:SIZE变量功能:获得变量定义时占用的内存空间大小,以字节为单位表示。【例】MOVAX,SIZEVAR5在数据定义中变量具有5种属性,可以用伪指令来获得变量的相关属性信息。5)大小属性说明:SIZE=LENGTH×TYPE
26伪指令(指示性语句)3、变量属性伪指令【例】设某数据段1000H:0000H开始存储如下定义的各类变量:BUF1DB1,2,3,4,5BUF2DB5DUP(?)BUF3DW5DUP(?)BUF4DW1,2,3,4,5SEGBUF11000HOFFSETBUF10TYPEBUF11LENGTHBUF11SIZEBUF11SEGBUF21000HOFFSETBUF25TYPEBUF21LENGTHBUF25SIZEBUF25SEGBUF31000HOFFSETBUF310TYPEBUF22LENGTHBUF25SIZEBUF210SEGBUF41000HOFFSETBUF420TYPEBUF42LENGTHBUF41SIZEBUF42
27伪指令(指示性语句)4、数据类型伪指令格式:类型PTR表达式功能:指定表达式的数据类型。说明:该伪指令可以指定的数据类型有BYTE、WORD、DWORD三种。
28伪指令(指示性语句)5、符号定义伪指令格式:符号EQU表达式功能:将表达式的值赋给EQU左边的符号。说明:表达式可以是常量、变量、标号、数值或地址表达式。EQU指令定义的符号是不可以被再定义的,除非使用PURGE伪指令将此定义撤销后重新定义。
29伪指令(指示性语句)5、符号定义伪指令格式:符号=表达式功能:与EQU伪指令的功能完全相同。说明:与EQU指令的区别在于用“=”定义的符号可被再定义。
30伪指令(指示性语句)6、段定义伪指令格式:段名SEGMENT[定位方式][组合方式][类别名]……;(段体)段名ENDS功能:定义一个逻辑段。说明:任何一个逻辑段都是从SEGMENT开始,以ENDS结束。
31伪指令(指示性语句)6、段定义伪指令定位方式:说明该段的起始地址边界规则PAGE——指定起始地址的低8位是0,称页边界XXXXXXXXXXXX00000000BPARA——指定起始地址的低4位是0,称段边界(缺省)XXXXXXXXXXXXXXXX0000BWORD——指定起始地址的低2位是0,称字边界XXXXXXXXXXXXXXXXXX00BBYTE——指定起始地址为任意值XXXXXXXXXXXXXXXXXXXXB
32伪指令(指示性语句)6、段定义伪指令组合方式:连接程序时设定本段与其它同名段的连接方式,适用于模块化程序设计。PUBLIC——同名段依次连接起来,形成一个连续的段COMMON——同名段共用同一起始地址,相互重叠段的长度,取最长段的长度AT表达式——定位在表达式所指定的段地址(代码段例外)
33伪指令(指示性语句)6、段定义伪指令组合方式:连接程序时设定本段与其它同名段的连接方式,适用于模块化程序设计。STACK——同名段构成一个连续的堆栈段,并自动初始化SPMEMORY——表示本段定位在所有段的地址之上,高地址处无(NONE)——不与任何段相连,各段有独立段基址(缺省方式)
34伪指令(指示性语句)6、段定义伪指令类别名:用单引号括起来的字符串类别名不超过40个字符,用于控制段的存放次序。MASM将所有类别名相同的逻辑段按前述组合方式进行连接。
35伪指令(指示性语句)7、段分配伪指令格式:ASSUME段寄存器:段名,……功能:说明源程序中定义的逻辑段由哪个段寄存器去寻址。段寄存器可以是CS,SS,DS,ES说明:1)ASSUME语句放在代码段内,作为代码段的第一条指令。2)ASSUME语句只是将逻辑段与段寄存器关联起来,并没有给段寄存器赋值。段寄存器的赋值应在程序中用指令显式指定。
36伪指令(指示性语句)7、段分配伪指令段寄存器的装入:CS的装入:CS和IP用于指向程序中即将执行的指令地址,由汇编程序负责装入,但需要在编程时在代码段第一行加入一个标号,并在最后一行用END伪指令结束该标号。CODESEGMENTASSUMECS:CODE,……START:…………CODEENDSENDSTART
37伪指令(指示性语句)7、段分配伪指令段寄存器的装入:DS、ES的装入:必须通过编程,直接将段基址通过通用寄存器装入段寄存器。CODESEGMENTASSUMECS:CODE,DS:DATA1,ES:DATA2START:MOVAX,DATA1MOVDS,AXMOVAX,DATA2MOVES,AX……CODEENDSENDSTART
38伪指令(指示性语句)7、段分配伪指令段寄存器的装入:SS的装入:方法二:用程序装入。SACKSEGMENTDW100DUP(?)TOPLABLEWORDSACKENDSCODESEGMENTASSUMECS:CODE,SS:SACKSTART:……MOVAX,SACKMOVSS,AXMOVSP,OFFSETTOP……
39伪指令(指示性语句)7、段分配伪指令段寄存器的装入:SS的装入:方法一:在段定义时将组合方式定义为STACK,并在ASSUME语句中,将堆栈段分配给段寄存器SS。汇编程序将该堆栈段的基址自动装入到SS段寄存器中。SACKSEGMENTSTACKDW100DUP(?)SACKENDSCODESEGMENTASSUMECS:CODE,SS:SACKSTART:……
40伪指令(指示性语句)8、过程定义伪指令格式:过程名PROC[NEAR/FAR]……RET过程名ENDP功能:定义一个过程,名字由“过程名”指定说明:NEAR表示近过程,FAR表示远过程,缺省为NEAR。
41伪指令(指示性语句)9、LABLE伪指令格式:名称LABEL类型/距离说明:LABEL伪指令用于给已定义的变量或标号取一个别名,并可重新定义它的类型或距离属性。别名功能:VARBLABLEBYTEVARWDW1234H,5678H改变调用距离功能:FNEXTLABLEFARNEXT:MOVAX,[BX]
42伪指令(指示性语句)10、属性指定操作伪指令格式:THIS类型功能:用来给后续数据定义新的类型。VARBEQUTHISBYTEVARWDW1234H,5678H
43伪指令(指示性语句)11、定位伪指令格式:ORG表达式功能:指定后续代码或数据的起始(偏移)地址。DATASEGMENTORG1000HVAR1DB12H,34HORG2000HVAR2DW10DUP(?)DATAENDS
44伪指令(指示性语句)12、当前位置计数器$在汇编程序时,用$表示当前位置计数器(偏移地址),方便程序编写和地址计算。DATASEGMENTSTRING1DB“BCDEFGHIJKLMOPR”COUNT=$-STRING1DATAENDS
45伪指令(指示性语句)13、END伪指令格式:END标号名功能:表明源程序结束。说明:一般放在源程序的最后一行,一个程序模块只允许有一个END语句。
46简化段伪指令1、内存模式语句.MODEL格式:.MODEL模式类型功能:指定数据段和代码段允许使用的长度。说明:模式类型也称为内存模式、寻址模式,它表示如何在内存中为程序、数据、堆栈等分配空间并存取它们。共有7种模式类型。
47简化段伪指令1、内存模式语句.MODELTINY:微模式(CS=DS=SS=ES)。所有数据及代码放在同一个物理段中,数据访问都为NEAR类型,整个程序小于64KB,生成的可执行文件扩展名为.COM,只在DOS操作系统下使用。SMALL:小模式(SS=DS=ES≠CS)。所有数据放在一个64KB的物理段中(包括数据和堆栈),所有代码则放在另一个64KB的物理段中。
48简化段伪指令1、内存模式语句.MODELMEDIUM:中模式(数据小,程序大)。所有数据放在一个64KB的物理段中,代码超过64KB时可以放在多个物理段中,程序中转移或调用类型可以为FAR型。COMPACT:紧凑模式或压缩模式(数据大,程序小)。所有代码放在一个64KB的物理段中,程序中的转移或调用类型为NEAR。数据超过64KB时可以放在多个物理段中。
49简化段伪指令1、内存模式语句.MODELLARGE:大模式(数据大,程序大)。代码和数据都可以超过64KB,可放在多个物理段中,数据和代码都可以是远程访问类型。HUGE:巨模式(数据巨大,程序大)。数据段中单个数据项的大小可以超过64KB,代码段允许超过64KB,即有多个代码段和数据段,都允许远程访问。
50简化段伪指令1、内存模式语句.MODELFLAT:平面模式。所有代码和数据被放在一个段中,但段内地址不再是16位,而是32位,所以整个程序可达4GB大小。MASM6.0以上汇编程序支持,可以在WINDOWS操作系统下使用。
51简化段伪指令2、简化段定义语句格式:.CODE[段名]功能:表明其下面的指令是代码段部分。说明:段名用于区分不同的代码段,省略情况下默认段名为_TEXT。代码段定义
52简化段伪指令2、简化段定义语句格式:.STACK[字节数]功能:定义一个用户自己的堆栈段。说明:堆栈段的默认段名为STACK,“字节数”如果不写则默认为1KB。堆栈段定义
53简化段伪指令2、简化段定义语句格式:.DATA[段名].DATA?[段名].CONST[段名]功能:表明其下面内容是数据段定义的变量或存储空间预留。说明:“.DATA?”定义未初始化的数据段;“.CONST”定义一个常数数据段;段名用于与其他数据段区分,省略情况下默认段名分别是_DATA/_BSS/CONST。数据段定义
54简化段伪指令3、程序开始伪指令.STARTUP格式:.STARTUP功能:用于指示程序开始位置,自动对DS,SS,SP寄存器进行初始化。
55简化段伪指令4、程序返回伪指令.EXIT格式:.EXIT功能:退出本程序,返回DOS操作系统。说明:其功能可以用如下两条指令来代替:MOVAH,4CHINT21H
56汇编语言宏指令宏是程序设计的一种方式,它把一段程序代码用一个特定标识符(宏名)来表示。在编写程序时,程序员可以使用该标识符(宏名)来代替这一段程序,从而减少重复代码的编写工作。
57汇编语言宏指令1、宏的定义格式:宏名MACRO[形参1,形参2,……]……ENDM功能:定义一个宏。说明:宏体可以是汇编语言所允许的任何指令或伪指令语句。ADDTHREEMACROV0,V1,V2MOVAX,V0ADDAX,V1ADDAX,V2ENDM
58汇编语言宏指令2、宏的调用格式:宏名[实参1,实参2,……]功能:引用宏名对应的相应代码,并传递相关参数。ADDTHREE[SI],20,[DI]MOVAX,[SI]ADDAX,20ADDAX,[DI]
59课堂小结学习的知识点回顾重点:正确掌握变量、常量、标号、表达式的定义和应用;正确掌握各条伪指令的格式及功能。难点:理解变量、标号的实质及其属性。你掌握了吗?
60课堂练习1、有一数据段定义如下,请用图示的方式给出该数据段中的数据分布情况。DATASEGMENTXDB12H,“ABCD”,2DUP(1,3)REQU1980YDW1234H,‘AB’,‘CD’,2DUP(1,3)DATAENDS演示:实践验证结果
61课后作业4.3、4.5、4.74.9、4.11