




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、n4.1 汇编语句表达式n4.2 汇编伪指令语句第第四四章章 高级汇编语言的语法高级汇编语言的语法4.1 汇编语句的表达式汇编语句的表达式n4.1.1 汇编语言语句格式n4.1.2 数值表达式n4.1.3 标号变量与地址表达式n4.1.4 特殊运算符4.1.1 汇编语言语句汇编语言语句格式格式1. 指令语句的一般格式如下:标号:指令前缀 助记符 操作数;注释n标号:标号是机器指令语句存放地址的符号表示,代表该指令目标代码的第一个字节地址,后面必须紧跟冒号“:” 。n指令助记符:指令助记符为语句的核心成分,表示了该语句的操作类型。 n操作数:操作数表示指令助记符的操作对象。 n注释:注释均以分号
2、开始,它可占一行或多行,一般放在一条语句的后面。 4.1.1 汇编语言语句汇编语言语句格式格式1. 伪指令告诉汇编程序如何进行汇编控制,在翻译时对源程序起控制作用的指令。这类指令一般不生成机器指令。如:EQU,=,LABEL,DB,DW,DD,ORG,SEGMENT,ASSUME,END等。VARN DB 1,9,7,5,2MOV AL,VARNMOV SI,1MOV AL,VARNSI4.1.2 数值表达式数值表达式n1 常量n2 算术运算符n3 逻辑运算符n4 关系运算符 各种形式数字常量格式对照表4.1.2 数值表达式数值表达式1.常量(1)整常量(2)字符串常量 字符串常量是用单引号或
3、双引号引起来的一个或多个字符。字符串常量是以各字符的ASC码表示的。如A用41H 表示,字符串A1B2用41H,31H,42H,32H表示。1.常量4.1.2 数值表达式数值表达式(2)字符串常量MOV DL,A; DL=A=41HMOV AL,a; AL=a=61HMOV AX,Aa; AX=Aa=4161H 1.常量4.1.2 数值表达式数值表达式 (3)符号常量 用等价语句EQU或者“=”语句定义的名字来表示常量,可以直接写在汇编与句中能提高程序的可读性,使用修改也很方便。 COUNT = 60 * 60 ;COUNT = 3600 MOV ECX , COUNT1.常量4.1.2 数值
4、表达式数值表达式 算术运算符包括:(加)、(减)、*(乘)、(除)、MOD(求模)、SHL(左移)、SHR(右移)几种,它既可以用于数值表达式又可用于地址表达式。2算术运算符4.1.2 数值表达式数值表达式【例】用算术运算符进行数值表达式运算。NUM1EQU25*4 50;NUM1=50NUM2EQUNUM1 / 7;NUM2=7NUM3DBNUM1 MOD 7 ;NUM4=1VAR1DB1,2,4,4,5VAR2DB12445NUM4EQUVAR2-VAR1;NUM4=?NUM5EQU0FH MOVAL,NUM5 SHL 4;(AL)=?MOVBL,NUM5 SHR 4; (BL)=?4.1
5、.2 数值表达式数值表达式2算术运算符n 逻辑运算符包括:逻辑与(AND)、逻辑或(OR)、逻辑异或(XOR)、逻辑非(NOT)四种运算。由于逻辑运算是按位操作,且在汇编过程中完成,因而运算的结果仍为整数常量。n【例】用逻辑运算符进行运算。MOVAL,44H AND 0FH ;04HALMOVBL,05H OR 40H ;45HBLMOVCX,NOT 00FFH ;0FF00HCXMOVDX,789AH XOR 000FH ;7895HDX3逻辑运算符4.1.2 数值表达式数值表达式n 关系运算符包括:相等(EQ),不等(NE),小于(LT),大于(GT),小于等于(LE)及大于等于(GE)。
6、 n【例】用关系运算符进行数值表达式运算。NUM1DB10 LT 5 ;NUM1=0NUM2DB0AAAAH GT 7FFFH;NUM2=0FFFFH MOVAX,A EQ 41H;0FFFFHAX MOVBX,NUM2 LT NUM1;0BX4关系运算符4.1.2 数值表达式数值表达式4.1.3 标号与地址表达式标号与地址表达式 标号是一条指令语句的符号地址。在汇编源程序中,只有在需要转向一条指令语句时,才为该指令语句设置标号,以便在转移类指令(含子程序调用指令)中直接引用这个标号。因此,标号可作为转移类指令的操作数,即转移地址。nNEAR(近程)类型标号表示段内标号。需要用2字节(16位方
7、式寻址)或者4字节(32位方式寻址)给出标号所在的段内EA。nFAR (远程)类型标号表示段间标号。需要用4字节(16位方式)或者6字节(32位方式)给出标号所在的段地址以及EA1.标号4.1.3 标号与地址表达式标号与地址表达式2.变量n 变量是内存中一个数据区的的名字,作为指令的存储器操作数来使用。具有三种属性:段地址,EA和类型。EA是汇编时汇编地址计数器LC的值。变量的类型有:DB,DW,DD,DQ和DT 来定义。n例如:COUNT DB 5 ;定义变量COUNT类型是字节。 VAR DB A,B ;定义字符AB的ASCII码 MOV AL, VAR ;语句正确,AL和VAR类型相符
8、MOV EAX, VAR ;VAR 和EAX类型不符n 汇编语句的地址表达式形成的结果是存储器的地址,用来表示指令中的标号或者变量操作数,有三个属性:段地址,EA和类型。 变量仅对应于数据区的第一个数据项,如果对其他数据项操作,必须要用地址表达式指出那一个数据项是指令的操作数。n 例如:ARRAY DD 2,0,0,2,6,1,8,9,40,4 ;定义10个双字类型的数据 MOV EAX,ARRAY + 36 MOV ESI,36 SUB ESI,4 ADD EAX,ARRAYESI 3.地址表达式4.1.3 标号与地址表达式标号与地址表达式n(1)强制类型转换PTR运算符格式: 类型 PTR
9、 地址表达式强制说明某个地址表达式的类型属性,其原来的段属性和EA属性不变。例:MOV BX,5n例如:NBYTE DB 0,2,4,6,8 ;定义NBYTE为字节型变量MOV AX,WORD PTR NBYTE;字节变量临时作字使用MOV AL,NBYTE ;显式类型为字节由DB定义MOV CH,NBYTE + 4 ;隐式类型,NBYTE + 4 伪字节 MOV WORD PTR BX,5 ;PTR强制说明模糊型为字类型 MOV AX,SI + 8 ;两个操作数中以确定的类型为准4.1.4 特殊运算符特殊运算符1.属性替换运算符(2)段地址取代运算符“:” n 又称为段地址运算或者跨段前缀。
10、用于临时给定变量,标号或者地址表达式指定一个段属性,地址表达式EA和类型保持不变。在指令中替代默认的段以形成物理地址。n例如: MOV DX,ES:BX + DI;EA = BX +DI,PA =ES ;*16 + EA,临时替换默认的DS 4.1.4 特殊运算符特殊运算符1.属性替换运算符n(3)短取代运算符SHORT 告诉汇编程序,目标标号在本条指令的-128+127个字节的范围内,生成节省一个字节的机器指令。一般情况下可以不用。n 例如: JMP SHORT NEXTBRACH NEXTBRACH: MOV EAX,ECX4.1.4 特殊运算符特殊运算符1.属性替换运算符n(4)定义类型
11、运算符THIS 与PTR类似,他用于建立同一地址而类型不同的变量或者标号,方便按照不同类型存取变量或程序发生转移。他不分配存储单元,标号或变量的段属性为语句所在段的段地址,EA是该语句所在的下一个可用的存储单元地址。n例如: BYTE_VAR EQU THIS BYTE ;定义BYTE_VAR为字节 WORD_VAR DW 8800H MOV AL,BYTE_VAR;BYTE_VAR地址同 ;WORD_VAR,AL = 00H MOV AX,WORD_VAR;AX = 8800H4.1.4 特殊运算符特殊运算符1.属性替换运算符n SEG分离出其后变量或标号所在段的段首址;OFFSET分离出其
12、后变量或标号的偏移地址。例如:n ARRAYW DW 20 DUP(0) . START: MOV AX,SEG ARRRYW;ARRAYW段址-AX MOV DS,AXMOV BX,OFFSET ARRAYW;ARRAYW的EA-BX4.1.4 特殊运算符特殊运算符2.属性分离运算符 TYPE运算符 格式:TYPE 变量或标号 功能:分离出其后变量或标号的类型。如果是变量,将返回该变量的类型对应字节数;如果是标号,则返回代表标号类型的数值。 MOV CL,TYPE ARRAYW ;若变量ARRAYW为字类型,则CL=24.1.4 特殊运算符特殊运算符2.属性分离运算符(1)LENGTH运算符
13、功能:当变量由数据定义伪指令定义,并且表达式带有一个DUP项时,LENGTH取DUP项前面的重复系数;如果表达式有多个DUP项嵌套时,仍然取第一个DUP项前的数字,LENGTH变量的取值为1.DATASEGMENTA DBABCDEFB DW 10DUP(1,2DUP(2)C DB4,20DUP(0)DATAENDS MOVAX,LENGTH A;1AXMOVBX,LENGTHB;10BXMOVCX,LENGTHC;1CX4.1.4 特殊运算符特殊运算符3.返回值运算符n(2)SIZE运算符格式:SIZE 变量功能:取出定义变量表达式中有DUP项的字节数。其返回值为: LENGTH 变量 *
14、TYPE 变量n例如:上例中A、B、C三变量:SIZE A = LENGTH A*TYPE A = 1SIZE B = LENGTH B*TYPE B = 20SIZE C = LENGTH C*TYPE C = 13.返回值运算符4.1.4 特殊运算符特殊运算符n(3)动态求数据项的个数 对字符串变量求数据项的个数,或者表达式有多个DUP项嵌套,或者表达式没有DUP项时,使用SIZE达不到取数据项的个数的目的。在程序中使用“$”符号来代表汇编程序下一个可用偏移值,来达到动态求数据项的个数的目的。n例如:STRING DB Advance assembly COUNT EQU $ - STRI
15、NG ;COUNT = 163.返回值运算符4.1.4 特殊运算符特殊运算符nVARW DW 9,8,7,6,5,4,3,2,1,0nCOUNTW EQU ($-VARW)/2;COUNTW=(10X2)/2=10nBUFFER DB 10 DUP(2 DUP(8),A) ;数据项个数=?nCount equ $-buffer3.返回值运算符4.1.4 特殊运算符特殊运算符(4)字节分离运算符字节分离运算符包括:HIGH和LOW。格式:HIGH 常量或地址表达式LOW 常量或地址表达式功能:HIGH 用来分离出其后16位常量或地址表达式的偏移量的高字节;LOW用来分离出其后16位常量或地址表达
16、式偏移量的低字节。3.返回值运算符4.1.4 特殊运算符特殊运算符(4)字节分离运算符 例如: WVAL EQU 0CA19H MOV AH,HIGH 8162H ;取高位字节81H-AH MOV AL,LOW WVAL ;取低位字节19H-AL3.返回值运算符4.1.4 特殊运算符特殊运算符4 运算符的优先级4.1.4 特殊运算符特殊运算符4.2 汇编伪指令语句汇编伪指令语句n4.2.1 方式伪指令n4.2.2 数据与符号定义伪指令n4.2.3 段定义与段管理伪指令SEGMENT/ENDSn4.4.4 假定伪指令ASSUMEn4.4.5 置汇编地址计数器伪指令ORGn4.4.6 源程序结束伪
17、指令n 伪指令语句格式如下: 名字 伪指令符 参数,参数 ;注释n名字:符号名是伪指令语句的一个可选项。n伪指令符:伪指令符指定汇编程序要完成的具体操作,如数据定义伪指令DB、DW、DD,段定义伪指令SEGMENT,假定伪指令ASSUME等。n参数表:伪指令后面的操作数可以是常数、字符串、变量、表达式等,其个数由具体的伪指令决定,各个操作数之间必须以“逗号”分隔。n注释:伪指令的注释必须以“;”开始,其作用同指令语句中的注释部分。 4.2 汇编伪指令语句汇编伪指令语句 32位pc系列微机有386、486、Pentium等多种CPU也就有多种指令系统。这些指令虽然向上兼容,却是不断进行扩充的,增
18、加了许多功能丰富的新指令。为了告诉汇编程序怎样进行汇编,识别哪种类型的CPU指令系统,以保证扩充功能的指令能够正确汇编,于是采用方式伪指令来制定具体的指令系统。如果没有指定,则masm默认的是:8086/8088 cpu和8087协处理器的指令系统以及浮点变量的IEEE格式。 方式伪指令主要有: .8086 .386 .386P .486 .486P .586 .686 .MMX 等。4.2.1 方式伪指令方式伪指令n 如果没有指定,则masm默认的是:8086/8088 cpu和8087协处理器的指令系统以及浮点变量的IEEE格式。 方式伪指令主要有: .8086 .386 .386P .4
19、86 .486P .586 .686 .MMX 等。n 例如: .386 CODES SEGMENT CODE ;设置Pentium兼容的32位386方式 CODES ENDS4.2.1 方式伪指令方式伪指令(1)格式:符号名EQU表达式功能:为常量、表达式及其他各种符号定义一个等价的符号名,但它不申请存储单元。 用符号表示常量、数值表达式,即定义符号常量。使用符号常量可使程序简单明了,增强程序的可读性和通用性。 EQU与属性运算符PTR或THIS联合使用,可以给变量或标号定义新的类型属性并重新命名,但保持其段偏移地址属性不变。 利用EQU可以用一个符号名替代一个复杂的地址表达式和其他一些符号
20、,如指令助记符、变量名、标号、段名、寄存器名、宏定义名等。 4.2.2 数据与符号定义伪指令数据与符号定义伪指令1.定义符号伪指令n(2)格式:符号名 = 表达式功能:为常量、表达式及其他各种符号定义一个等价的符号名,并能对所定义的符号多次重复定义,且以最后一次定义的值为准。n【例】定义等价符号名。COST = 20M = MOVLOST = LOST+10;40LOSTM = ADD;M=ADDCOUNT EQU CX; DEC COUNT;CX的内容减1 CX4.2.2 数据与符号定义伪指令数据与符号定义伪指令1.定义符号伪指令n(3)格式:变量名或标号 LABEL 类型功能:定义与原有变
21、量类型不同的新变量或为指令语句定义有指定类型的标号。通常与数据定义伪指令连用,其功能类似语句“变量名或标号 EQU THIS 类型”。n【例】定义新类型的变量。BARRAY LABEL BYTEWARRAY DW 50 DUP (0)MOV AX,WARRAY48MOV AL,BARRAY494.2.2 数据与符号定义伪指令数据与符号定义伪指令1.定义符号伪指令为了提供模块程序的设计功能,汇编语言提供了划分模块并命名的能力。(1)模块命名语句NAME 格式: NAME 模块名 源程序模块开始的一个语句,有模块名则为模块的名字,名字不要使用程序的变量、标号和保留字。NAME语句在原程序中也可以不
22、必写出(2)源程序模块结束语句 END 格式: END 表达式 源程序模块的最后一个语句。如果有表达式的值,则为程序开始执行目标代码的地址。汇编结束后,指令指针IP或EIP指向这个入口地址。 4.2.2 数据与符号定义伪指令数据与符号定义伪指令2.程序模块名与结束语句例如: NAME Pentium_MASM61XCODES SEGMENTSTART: CODES ENDS END START4.2.2 数据与符号定义伪指令数据与符号定义伪指令2.程序模块名与结束语句 常用的数据定义伪指令有DB(8位),DW(16位),DD(32位),DQ(64位),DT(80位)。格式:变量名数据定义伪指令
23、表达式1,表达式2,功能:定义数据存储区,类型由数据定义伪指令确定,初值由表达式给定表达式可以有以下几种类型:4.2.2 数据与符号定义伪指令数据与符号定义伪指令3.数据定义以及存储分配伪指令(1)数值表达式;(2)?定义的数据项没有确定的初值,只分配存储单元;(3)ASCII字符串 多于2个以上字符的字符串可以用DB来定义;(4)n DUP(?) 重复定义n个数据项,内容不确定;(5)n DUP(表达式,表达式,)定义n个数据项,内容由表达式确定 。(6)n DUP(m DUP(表达式1),表达式2)多层嵌套DUP项(共有n*(m + 1),初始值由表达式决定。4.2.2 数据与符号定义伪指
24、令数据与符号定义伪指令3.数据定义以及存储分配伪指令例如: VARN DB 88 ;定义一个字节88H VARM DW 60 * 60 ;定义一个双字3600 STR DW AB ;定义一个双字AB ERROR DB syntax error ! ,13,10 ;定义一个字符串和数字 TABB DB 2 DUP(3 DUP(8),A) ;定义2个字符串, ;每个字符串 3个8和一个A4.2.2 数据与符号定义伪指令数据与符号定义伪指令3.数据定义以及存储分配伪指令1.定义段语句SEGMENT和ENDS4.2.3 段定义与段管理伪指令段定义与段管理伪指令格式:段名 SEGMENT 使用类型 边界
25、类型连接类型类别段名是为该段起的名字,用来指出汇编程序为该段分配的存储区起始位置。(1)使用类型 只有使用了.386等方式伪指令,使用类型才有用。有两种类型: USE16-该段按照16位寻址,与8088寻址方式相同 ; USE32- 该段按照32位寻址,地址指针48位:段地址16位,EA32位 若在段定义是没有给出使用类型,使用了.386后默认的是USE32.4.2.3 段定义与段管理伪指令段定义与段管理伪指令(2)边界类型PARA:表示本段必须从能被16整除的地址处开始存放,即段起始地址最低四位必须是0,称为节地址。BYTE:表示本段起始地址可以从任一地址处开始存放。WORD:表示本段要从一
26、个偶数地址处开始存放,即段起始地址的最低一位必须是0,称为字地址。DWORD:表示本段要从一个4的倍数地址处开始存放,即段起始地址的最低两位必须是0,双字地址,常用于32位寻址。PAGE:表示本段要从能被256整除的地址处开始存放,即起始地址的最低八位必须是0,称为页地址。1.定义段语句SEGMENT和ENDS4.2.3 段定义与段管理伪指令段定义与段管理伪指令(3)连接类型组合方式有六种类型可供选择。 无 省略连接类型。本段有自己的段地址,与其他同名段独立。PUBLIC 同名同类段连接。程序连接时将本段与其他同名同类型(可以包括不同的模块)的段连接在一起,组成同一个物理段,具有同一个段地址。STACK 指定堆栈段。Link程序连接后的段为堆栈段,与PUBLIC处理相同。COMMON 指明覆盖段。连接时产生一个覆盖段,类别相同的同名段有相同的起始段地址,段的长度选取含COMMON段的最大长度。MEMORY 指定存储方式段。AT表达式 指定段地址值表达式。将给定表达式的值作为16位寻址的非代码段的段地址值,可作为变量赋予绝对地址。1.定义段语句SEGMENT和ENDS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 防疫人员述职报告
- 安徽省安庆市2024-2025学年八年级下学期期中地理试题(原卷版+解析版)
- 硬胶囊制剂洁净区管理
- 2025年土地使用权转让合同模板:房屋买卖协议
- 《2025企业重组如何处理合同解除事宜》
- 本地公司转让合同范本
- 工地装修送货合同范本
- 采购管理专业课程
- 幼儿入园协议
- 资产抵押担保协议书范例
- CNAS-SC175:2024 基于ISO IEC 2000-1的服务管理体系认证机构认可方案
- 供应链管理系统建设方案
- 《汶川县全域旅游发展总体规划(2021-2030)》
- 《心肺复苏及电除颤》课件
- 世界精神卫生日班会课件
- 瓶装液化气送气工培训
- 临床药物治疗学知到智慧树章节测试课后答案2024年秋湖南中医药大学
- 2024年新能源充电站租赁合同
- 9.2溶解度(第1课时饱和溶液不饱和溶液)+教学设计-2024-2025学年九年级化学人教版(2024)下册
- 中建塔吊基础设计与施工专项方案
- 【MOOC】中医与辨证-暨南大学 中国大学慕课MOOC答案
评论
0/150
提交评论