《汇编语言设计》PPT课件.ppt
《《汇编语言设计》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《汇编语言设计》PPT课件.ppt(74页珍藏版)》请在三一办公上搜索。
1、第四章汇编语言程序设计,湖州师范学院,2023/7/19,信息工程学院,1,宏汇编使用的语句分三类指令性语句伪指令语句/指示性语句宏指令语句,4.1.2 MASM汇编语言,2023/7/19,信息工程学院,2,指令性语句:与机器指令相对应,可译成目标代码(机器指令代码)。语句格式:【标号:】【前缀】指令助记符【操作数,操作数】【;注释】标号:可有可无,指令语句的符号地址,后面必须紧跟冒号“:”。注意:标号可使用字母、数字和特殊符号;首字符必须是字母或特殊符号;最大长度31个字符;可以省略,经常作为表示转移的地址。指令助记符:指令名称的代表符号,指出指令的操作类型。可译成机器码;不可省略,是关键
2、字。操作数:参与指令运算的数据。可以有一个、多个操作数或无操作数;多个操作数之间用逗号“,”隔开,操作数与指令助记符之间用“空格”隔开。操作数可以是常数、变量、标号、寄存器名或表达式。注释:说明指令或程序的功能,可省略。注释前加分号“;”。,1、指令性语句,2023/7/19,信息工程学院,3,伪指令语句:无对应的机器指令,汇编时对伪指令进行处理,可完成数据定义、存储区分配、段定义、段分配、指示程序结束等功能。语句的格式:【名字】伪指令指示符【操作数,操作数】【;注释】名字:名字后不允许带冒号“:”,但可以省略。通常是变量名、段名、过程名、符号名等。伪指令指示符:汇编程序MASM规定的符号。常
3、用的有变量定义语句(DB、DW),符号定义语句(EQU、),段定义语句(SEGMENTEND),段分配语句(ASSUME),过程定义语句(PROCENDP)等。操作数:不同伪指令有不同要求。操作数可以是常数、变量、字符串、表达式等。注释:功能和使用与指令性语句相同。,2、伪指令语句/指示性语句,2023/7/19,信息工程学院,4,4.2.1 汇编语言描述规范,1、标识符,字符数为131个第一个字符必须是字母、“?”、“”、“_”第二个字符以后可以使字母、数字、“?”、“”或“_”不能使用系统专用的助记符、伪指令、寄存器等具有三个属性。(1)段属性:定义标识符所在段。(2)偏移量属性:定义标识
4、符所在段的偏移量。(3)类型属性:标号分为:类型NEAR,表示此标号为近标号,只能实现段内转移或调用;类型FAR,表示此标号为远标号,可以实现段间转移或调用。符号名中:字节变量(BYTE)、字变量(WORD)、双字变量(DWORD)。,2023/7/19,信息工程学院,5,2、操作数,(1)常数是固定值,没有属性,是确定的数据。二进制:字母“B”结尾,例00110100B;八进制:字母“Q”或“O”结尾,例1037O、2370Q;十进制:字母“D”结尾或省略,或科学表示法,例1234D、5678、2.735E-2;十六进制:字母“H”结尾,“AF”开头时,前面加0,例56H、0A7F2H;字符
5、串:用单引号括起来,机内存放的是各字符的ASCII码。例ABC。,2023/7/19,信息工程学院,6,(2)变量变量通常指存放在存储单元中的值,程序运行中可以修改。所有的变量都具有三个属性。段值(SEGMENT):指变量所在段的段基址。段内偏移地址(OFFSET):指变量所在地址与所在段首地址之间的地址偏移字节数。类型(TYPE):指变量中每个元素所包含的字节数:字节变量(BYTE)、字变量(WORD)、双字变量(DWORD)等。(3)标号:,标号是可执行指令语句的地址的符号表示,可作为程序转向的目标地址。具有三个属性。(1)段值(SEGMENT):标号所在段的段基址。(2)段内偏移地址(O
6、FFSET):标号所在地址与所在段的段首址之间的偏移地址字节数。(3)类型(TYPE):,2023/7/19,信息工程学院,7,(7)表达式,表达式:运算对象+运算符。在汇编时进行运算,运算结果作为语句中的操作数。运算对象:常数、变量、标号。得到的运算结果可以是一个常数字,也可以是一个存储器的地址。MASM中6类运算符:如表4-1所示。算术运算符(Arithmetic Operators)逻辑运算符(Logical Operators)关系运算符(Relational Operators)数值返回运算符(Value-Returning Operators)修改属性运算符(Modifing at
7、tribute Operators)其它运算符(other Operators),2023/7/19,信息工程学院,8,表41 MASM的表达式中的运算符(1),2023/7/19,信息工程学院,9,表41 MASM的表达式中的运算符(2),2023/7/19,信息工程学院,10,表41 MASM的表达式中的运算符(3),2023/7/19,信息工程学院,11,包括7种:十、一、*、/(除,只取除法运算结果之商)、MOD(模,只取除法运算结果之余数)、SHL(左移,左移1位相当于乘2)、SHR(右移,右移1位相当于除2)。注意:所有的算术运算符均可以对数据进行运算,运算对象与运算结果都是整数。
8、若对地址运算,通常是在标号上加减某一个数字量。,一、算术运算符,2023/7/19,信息工程学院,12,例4.3 汇编程序指令格式如下:DAEQU300MOVAX,DA80MOVBX,DA MOD 100MOVCX,DA/100MOVDH,0110 0100B SHR 2汇编时,计算表达式形成指令为:DAEQU300MOVAX,220MOVBX,0MOVCX,3MOVDH,19H,2023/7/19,信息工程学院,13,包括4种:AND(与)、OR(或)、NOT(非)、XOR(异)或)注意:按位运算的,只能对常数进行运算,得到结果也是常数。,二、逻辑运算符,2023/7/19,信息工程学院,1
9、4,例4.4MOVAL,NOT 0FFHMOVBL,8CH AND 73HMOVAH,8CH OR 73HMOVCH,8CH XOR 73H汇编时,计算表达式形成指令为:MOVAL,0MOVBL,0MOVAH,0FFHMOVCH,0FFH注意:逻辑运算符不要与逻辑指令助记符混淆。,2023/7/19,信息工程学院,15,包括6种:EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)。意:关系运算符的两个操作数必须是数据,或是同一段内的两个存储单元的地址;若结果为真,输出全是l,即0FFH或0FFFFH;若结果为假,输出全是0。,三、关系运算符,例4.5
10、MOVAX,10H GT 16ADDBL,6 EQ 0110B汇编时,计算表达式形成指令为:MOVAX,0ADDBL,0FFH,2023/7/19,信息工程学院,16,数值返回运算符也称作分析运算符(Analytic opertors)。包括5种:OFFSET、SEG、TYPE、LENGTH、SIZE。功能:加在变量或标号前,返回运算对象的某个参数值。例如偏移地址值、段地址值、类型属性、变量包含的单元数等。1OFFSET:格式:OFFSET 变量或标号功能:返回标号或变量的偏移地址值。例4.6 若DA1为数据段中一个变量名MOV BX,OFFSET DA1;等价于LEA BX,DA1,四、数值
11、返回运算符,2023/7/19,信息工程学院,17,2SEG:格式:SEG 变量或标号功能:取变量或标号的段基值。例4.7MOVAX,SEG M1MOVDX,AX解:设:M1是段名为DATA的数据段中的一个变量名;如DATA段从0500H开始,上述指令把0500H作为立即数在连接时插入指令;汇编后指令变为:MOVAX,0500HMOVDX,AX,2023/7/19,信息工程学院,18,3TYPE:格式:TYPE 变量或标号功能:加在变量前,返回变量的类型属性;加在标号前,返回标号的距离属性。如下表所示。,TYPE 运算符返回值,2023/7/19,信息工程学院,19,例4.8A1DB 20H,
12、30HA2DW 0438HA3DD?L1:MOVAH,TYPE A1MOVBH,TYPE A2ADDAL,TYPE A3MOVBL,TYPE L1汇编时,计算表达式形成指令为:MOVAH,1MOVBH,2ADDAL,4MOVBL,0FFH,2023/7/19,信息工程学院,20,4LENGTH:格式:LENGTH 变量功能:当变量中使用DUP时,LENGTH返回此变量所包含的单元数,对其它变量则返回1。,例4.9M1DW 100 DUP(?)M2DW 1,2,3M3DB A,B,C,D MOVCX,LENGTH M1MOVBL,LENGTH M2MOVAL,LENGTH M3汇编时,计算表达式
13、形成指令为:MOVCX,100;返回变量所包含的100个字单元MOVBL,1MOVAL,1,2023/7/19,信息工程学院,21,5SIZE:格式:SIZE 变量功能:加在变量前,返回该变量包含的总字节数。SIZELENGTH*TYPE,例4.10 M1DW 100 DUP(?)M2DW 1,2,3M3DB A,B,C,D MOVCX,SIZE M1ADDBL,SIZE M2MOVAL,SIZE M3汇编时,计算表达式形成指令为:MOVCX,200;返回变量所包含的200个字单元MOVBL,2MOVAL,1,2023/7/19,信息工程学院,22,修改属性运算符也称作合成运算符(Synthe
14、tic operators)。包括6种:段操作符、PTR、THIS、HIGH、LOW、SHORT功能:在程序运行过程中,修改变量或标号的属性,包括段属性、偏移地址属性、类型属性等。1段操作符:格式:段前缀:变量或地址表达式功能:表示某个变量或地址被修改到指定的段寄存器提供的段基址中。例4-11 MOV AX,ES:BX,五、修改属性运算符,2023/7/19,信息工程学院,23,2PTR:格式:类型/距离 PTR 变量或标号功能:将PTR左边的类型属性赋给右边的变量或标号。注意:PTR本身不分配存储单元,仅对已分配的存储单元赋予新的属性;常与类BYTE、WORD、DWORD、NEAR、FAR等
15、连用。,2023/7/19,信息工程学院,24,例4.12N1DB15H,36H N2DW1122H,3344HLO:MOVAX,WORD PTR N1;使N1转换成AX类型MOVBL,BYTE PTR N2;使N2转换成BL类型例 MOV BX,10H分析:将立即数送入BX间址指定的存储单元,可以通过PTR指明是存入字节单元还是字单元。MOV BYTE PTR BX,10H;BX10H MOV WORD PTR BX,10H;BX,BX+10010H也可用PTR来改变距离属性,JMP FAR PTR LOOP在JMP语句中将标号LOOP改为FAR,使JMP指令在其它代码段中也可以用,实现段间
16、转移。,2023/7/19,信息工程学院,25,3THIS:格式:变量/标号 EQU THIS 类型/距离功能:将EQU THIS右边的类型/距离属性,赋给左边的变量/标号,该变量或标号的段地址和偏移地址与下一个存储单元的地址相同。例4.13FIRSTEQU THIS BYTETABLE DW 200 DUP(?)FIRST的偏移地址值与TABLE的偏移地址值相同,区别在于FIRST变量为字节类型,TABLE为字类型。此功能类似于LABEL伪指令的功能。,2023/7/19,信息工程学院,26,4SHOT:格式:SHORT 标号功能:说明转移类指令中转向地址的属性为短转移:-128+127之间
17、。例L1:JMPSHORT L2L2:MOVAX,05HIGH和LOW:格式:HIGHLOW 符号常量功能:HIGH和LOW称为字节分离运算符。HIGH从中分离出高位字节,LOW分离出低位字节。,2023/7/19,信息工程学院,27,例4.16K1EQU 0ABCDHK2EQU 1234HMOVAH,HIGH K1MOVBL,LOW K2汇编时,计算表达式形成指令为:MOVAH,0ABHMOVBL,34H,2023/7/19,信息工程学院,28,1圆括号():()中的运算符具有最高优先权。2方括号:方括号主要用来表示存储器的偏移地址。,六、其它运算符,2023/7/19,信息工程学院,29,
18、表达式的计算原则:同级运算符从左到右的,圆括号()可改变优先级次序。运算符的优先级别如下表所示。,七、优先级,2023/7/19,信息工程学院,30,4.2.3 模式定义伪指令,格式:.MODEL 存储模式功能:定义程序的规模,也就是选择程序在内存中存储模式的大小。,具有7种模式。(1)TINY:只有1个逻辑段。产生COM程序(2)SMALL:可有1个代码段和1个数据段(3)COMPACT:可以有1个以上数据段,但是只有1个代码段(4)MEDIUM:可以有1个以上代码段,但是只有1个数据段(5)LARGE:数据段和代码段均可以有1个以上(6)HUGE:允许数据段大于64KB,可以有多个数据段和
19、多个代码段(7)FLAT:允许有一个长达512KB的段,用于存储代码数据注意对于简化段定义,模式定义不能缺少,2023/7/19,信息工程学院,31,4.2.4 段定义伪指令,段定义语句进行段定义,段分配语句明确段和段寄存器之间的关系。1段定义语句SEGMENTENDS格式:段名 SEGMENT【定位类型】【组合类型】【字长选择】【类名】逻辑段内容 段名 ENDS功能:将一个逻辑段定义成一个整体。段名是逻辑段的标识符,不可省略。它确定了逻辑段在存储器中的地址,SEGMENT和ENDS前的段名必须相同。SEGMENTENDS是段定义的伪指令助记符,任何一个逻辑段必须以SEGMENT开始,ENDS
20、结束,不可省略,并且必须成对出现,两者之间是本逻辑段的内容。,2023/7/19,信息工程学院,32,定位类型(Align Type)定位该段起始地址。定位类型参数主要有下面4种。PARA指定定位段的起始地址必须在节的整数边界,参数缺省时,就当成PARA。BYTE指定该段起始地址定位在存储单元的任何字节地址。WORD指定该段起始地址定位在字的边界,即段的首地址必须是偶数。PAGE指定该段起始地址定位在页的边界,即段的首地址必须是256的整数倍。,2023/7/19,信息工程学院,33,组合类型(Combine Type)决定逻辑段之间的组合方式,告诉连接程序本段与其他段的关系,主要参数有6种。
21、NONE该段与其它同名段不连接,各段独立,可作为缺省参数。PUBLIC该段与其它同名段连接时,由低地址到高地址连接,组成一个逻辑段,连接次序由连接命令指定,连接时满足定位类型要求。COMMON该段在连接时与其它模块中的同名段有相同的起始地址,采用覆盖的方式在存储器中存放,连接长度为各分段中最大长度。,2023/7/19,信息工程学院,34,AT表达式定位该段的起始地址在表达式所指定的节(16的整数倍)边界上。通常各逻辑段在存储器中的位置由系统自动分配,当要求某逻辑段在指定节的边界上时,就要用AT参数来实现。AT不能指定代码段。STACK指定该段为堆栈段,此参数在堆栈段中不可省略,多个模块只需设
22、置一个堆栈段,各个模块中的堆栈段采用覆盖方式组合。容量为各个模块中所设置的最大堆栈段容量。MEMORY定位该段与其它模块中的同名段有相同的首地址,采用覆盖方式在存储器中组合连接,其功能与COMMON参数类似,区别是第一个带MEMORY参数的逻辑段复盖在其它同名段的最上层,其它带此参数的同名段按照COMMON方式处理。,2023/7/19,信息工程学院,35,类名(C1ass Name)汇编程序连接时将所有分类名相同的逻辑段组成一个段组。分类名可选择不超过40个字符的名称。注意:SEGMENT后面带有的三个参数必须按格式中规定的先后次序排列,但各段仍然是独立的,分类名必须用单引号 括起来。,20
23、23/7/19,信息工程学院,36,2段分配语句(ASSUME):将逻辑段定义成代码段、数据段、堆栈段、附加段。用户可以设置多个逻辑段,但只允许4个逻辑段同时有效。格式:ASSUME CS:段名,DS:段名,SS:段名,ES:段名功能:定义4个逻辑段,指明段和段寄存器的关系。ASSUME为伪指令助记符,放在代码段的开始,不可省略。说明当前代码段、数据段、堆线段、附加段4个段如何定义。段名必须是用段定义语句SEGMENTENDS定义过的名字。ASSUME NOTHING取消前面由ASSUME所指定的段寄存器。例:ASSUME ES DS:NOTHING,2023/7/19,信息工程学院,37,注
24、 意:代码段和数据段必须分配,附加段可以省略。ASSUME伪指令只将代码段的段基址自动装入CS寄存器中,而不能自动把其它段基址装入相应的段寄存器中,所以在代码段的开始要有一段初始化程序完成这一工作。堆栈段:将段基址送入SS寄存器外,还要将栈顶偏移地址置入堆栈指示器SP中。(只要定义堆栈段时使用了关键字STACK,连接程序会自动给SS和SP赋值,无需人工初始化。),2023/7/19,信息工程学院,38,3段寄存器的装入:不能把各段的段基值装入相应段寄存器中,只有将段基址装入相应的段寄存器中,该段才被定义成当前段,才可以被处理器访问。,DS和ES装入,CODESEGMENTASSUMECS:CO
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言设计 汇编语言 设计 PPT 课件
链接地址:https://www.31ppt.com/p-5541247.html