汇编语言语句的类型和格式.ppt

上传人:max****ui 文档编号:15493879 上传时间:2020-08-12 格式:PPT 页数:29 大小:1.14MB
返回 下载 相关 举报
汇编语言语句的类型和格式.ppt_第1页
第1页 / 共29页
汇编语言语句的类型和格式.ppt_第2页
第2页 / 共29页
汇编语言语句的类型和格式.ppt_第3页
第3页 / 共29页
点击查看更多>>
资源描述
5.2.2 汇编语言语句的类型和格式 1语句的类型 汇编语言源程序中的语句可以分为两种类型:指令语句,伪指令语句, 宏指令语句。 (1) 指令语句:它是能产生目标代码,CPU 可以执行的能完成特定功能的语句。 (2) 伪指令语句:它是一种不产生目标代码的语句,它仅仅在汇编过程中告诉汇编程序应如何汇编。例如,告诉汇编程序已写出的汇编语言源程序有几个段,段的名字是什么;定义变量,定义过程,给变量分配存储单元,给数字或表达式命名等。显然,伪指令语句是汇编程序在汇编时使用的。,(3)宏指令语句是以一个宏名定义的一段指令序列,在汇编中凡是出现宏指令语句的地方,都会有相应的指令语句序列的目标代码插入。 2. 语句的格式 指令语句与伪指令语句的格式是类似的。一般情况下,汇编语言的语句可以由部分构成: 名字 助记符 操作数 ;注释 其中带方括号的部分表示任选项,既可以有,也可以没有。例5.1中有如下语句: LOOPER: MOV AL,DATA2SI ;取一个字节加数 DATA1 DB 0F8H,60H,0ACH,74H,3BH;被加数 第一条语句是指令语句,其中“LOOPER:”是名字,“MOV”是指令助记符,“AL,DATA2SI”是操作数,“;”后面是注释部分;第二条语句是伪指令语句,其中“DATA1”是名字,“DB”是伪指令定义符,“0F8H,60H,0ACH,74H,3BH”是操作数,“;”后面是注释部分。,1) 名字 汇编语言语句的第一个组成部分是名字(Name)。在指令语句中,这个名字是一个标号。指令语句中的标号实质上是指“:”后面指令所在的存储地址(逻辑地址)。供JMP、CALL和LOOP等指令作操作数使用,以寻找转移目标地址。并非每条指令语句必须有标号,但如果一条指令前面有一标号,则程序中其它地方就可以引用这个标号。在例5.1中,START、LOOPER就是标号。标号后面有一个冒号。 标号有三种属性:段、偏移量和类型。 标号的段属性是定义标号在程序段的段地址,当程序中引用一个标号时,该标号的段值应在CS寄存器中。 标号的偏移量属性表示标号所在段的起始地址到定义该标号的地址之间的字节数。偏移量是一个16位无符号数。 标号的类型属性有两种:NEAR和FAR。前一种标号可以在段内被引用;后一种标号可以在其它段被引用。如果定义一个标号时后跟冒号,则汇编程序确认其类型为NEAR。,伪指令语句中的名字可以是变量名、段名、过程名。与指令语句中的标号不同,这些伪指令语句中的名字并不总是任选的,有些伪指令规定前面必须有名字,有些则不允许有名字,也有一些伪指令的名字是任选的。即不同的伪指令对于是否有名字有不同的规定。伪指令语句的名字后面通常不跟冒号,这是它和标号的一个明显区别。 很多情况下伪指令语句中的名字是变量名,变量名代表存储器中一个数据区的名字,例如例5.1中的DATA1、DATA2就是变量名。,变量也有三种属性:段、偏移量和类型。 变量的段属性是变量所代表的数据区所在段的段地址。由于数据区一般在存储器的数据段中,因此变量的段地址常常在DS和ES寄存器中。 变量的偏移量属性是该变量所在段的起始地址与变量的地址之间的字节数。 变量的类型属性有BYTE(字节)、WORD(字)、 DWORD (双字)、 QWORD (四字)、TBYTE(十字)等,表示数据区中存取操作对象的大小。,例 1编写一个两字相加的程序。 DSEG SEGMENT ;定义数据段 DATA1 DW 1234H ;定义被加数 DATA2 DW 5678H ;定义加数 DSEG ENDS ;数据段结束 ESEG SEGMENT ;定义附加段 SUM DW 2 DUP(?) ;定义存放结果区 ESEG ENDS ;附加段结束 CSEG SEGMENT ;定义代码段 ;下面的语句说明程序中定义的各段分别用哪个段寄存器寻址 ASSUME CS:CSEG,DS:DSEG,ES:ESEG START: MOV AX,DSEG ;START为程序开始执行的启动标号 MOV DS,AX ;初始化DS MOV AX,ESEG MOV ES,AX ;初始化ES LEA SI,SUM ;存放结果的偏移地址送SI MOV AX,DATA1 ;取被加数 ADD AX,DATA2 ;两数相加 MOV ES:SI,AX ;和送附加段的SUM单元中 HLT CSEG ENDS ;代码段结束 END START ;源程序结束,DATA SEGMENT DA1 DB 12H ;定义一个字节数据 DA2 DD 0FEDCBA90H ;定义一个双字数据 DA3 DW 5678H ;定义一个字数据 DATA ENDS,2) 助记符 汇编语言语句中的第二个组成部分是助记符(Memonic)。 在指令语句中的第二部分是CPU指令系统中指令的助记符,例如:MOV ADC等等。助记符约有90多种,在第四章中已经进行了详细的讨论。 在伪指令语句中的第二部分是伪指令的定义符,例如:DB、SEGMENT、 ENDS 、 END等都是伪指令定义符。它们在程序中的作用是定义变量的类型、定义段以及告诉汇编程序结束汇编等。,3) 操作数 汇编语言语句中的第三个组成部分是操作数。在指令语句中是指令的操作数,可能有单操作数或双操作数,也可能无操作数;而在伪指令中可能有更多个操作数。当操作数不止一个时,相互之间应该用逗号隔开。 可以作为操作数的有:常数、寄存器、标号、变量和表达式等。,(1) 常数。常数就是指令中出现的那些固定值,可以分为数值常数和字符串常数两类。例如,立即数寻址时所有的立即数、直接寻址时所有的地址、ASCII字符串等都是常数。常数是除了自身的值以外,没有其他属性的数值。在源程序中,数值常数按其基数的不同,可有二进制数、八进制数、十进制数、十六进制数等几种不同表示形式。汇编语言用不同的后缀加以区别。,(2) 寄存器 80868088CPU的寄存器可以作为指令的操作数。 (3) 标号 由于标号代表一条指令的符号地址,因此可以作为转移(无条件转移或条件转移)、过程调用CALL以及循环控制LOOP指令的操作数。 (4) 变量 因为变量是存储器中某个数据区的名字,因此在指令中可以作为存储器操作数。 (5) 表达式 汇编语言语句中的表达式,按其性质可分为两种:数值表达式和地址表达式。数值表达式产生一个数值结果,只有大小,没有属性。地址表达式的结果不是一个单纯的数值,而是一个表示存储器地址的变量或标号,它有三种属性:段、偏移量和类型。,表达式是由操作数和运算符组成。即用一个运算符可以对一个或几个操作数进行运算,构成一个表达式。 表达式中常用的运算符有以下几种: 算术运算符:、和取模运算MOD。 逻辑运算符:AND、OR、NOT和XOR。 关系运算符:EQ、NE、LT、GT、LE、GE。结果只有两个全1或全0。 分析运算符:利用分析运算符可以把一个存储单元地址分解为段地址和偏移地址等。分析运算符有SEG 、OFFSET 、TYPE、SIZE和LENGTH等。,分析运算符表达式 注意:SIZELENGTHTYPE,例2 逻辑运算符的应用 MOV AL,NOT 10101010B ;(AL)01010101B MOV AL,11110000B AND 10111101B ;(AL)10110000B MOV AL,10100000B OR 00000101B ;(AL)10100101B 例3 关系运算符的应用 MOV AX,5 EQ 101B ;(AX)0FFFFH MOV BH,10H GT 16 ;(BH)0,例 4 数值返回运算符的应用 K1 DB 30H,31H,32H K2 DW 4041H,4043H K3 DW 20H DUP(0) K4 DD 50515253H MOV AL,TYPE K1 ;等效于MOV AL,1 MOV AH,TYPE K2 ;等效于MOV AH,2 MOV AL, LENGTH K3 ;(AL)20H,返回DUP前面的数值 MOV CL, LENGTH K4 ;(CL)01H MOV BL, SIZE K3 ;(BL)40H MOV DL, SIZE K4 ;(DL)04H, 合成运算符:可以用来建立或临时改变变量或标号的类型或存储器操作数的存储单元类型。合成运算符有PTR、THIS等。,例5 PTR运算符的应用 N1 DB 3,6,9 MOV AX,WORD PTR N1 ;临时指定N1为字类型,(AX)0603H 例6 THIS运算符的应用 ABC EQU THIS BYTE ;从本语句开始变量ABC的类型属性指定为字节, 不管它原来的类型是什么 例7 HIGH和LOW运算符的应用 NUM EQU 2456H MOV AL,HIGH NUM ;等效于 MOV AL,34H MOV BL,LOW NUM ;等效于 MOV BL,56H 例8 段属性运算符的应用 MOV AX,ES:BX ;用附加段ES取代默认的数据段DS MOV BL,DS:BP ;用数据段DS取代默认的堆栈段SS,5.3 伪指令语句,宏汇编程序MASM提供了约几十种伪指令,其中有一些伪指令小汇编ASM不支持,例如宏处理伪指令等。根据伪指令的功能,大致可以分为以下几类: 方式伪指令 .8086。汇编程序将在80868088方式下操作。 .386。汇编程序将在80386方式下操作。 2. 符号定义伪指令 EQU(赋值伪指令) 名字 EQU 表达式, (等号伪指令) 名字表达式 LABLE(类型定义伪指令) 名字 LABLE 类型 利用LABLE伪指令的用途可以使同一个数据区兼有BYTE和WORD两种属性.,1等值语句 例4-10 等值语句 CR EQU 0DH ;常量 TEN EQU 0AH ;常量 AA EQU ASCII_TABLE ;变量 VAR EQU TEN*2+1024 ;数值表达式 ADR EQU ES:BP+DI+5 ;地址表达式 GOTO EQU JMP ;指令助记符 2等号语句 例4-11 等号语句 NUM=488 ;定义NUM等于488 NUM=NUM+1 ;定义NUM等于489,3.数据定义伪指令 数据定义伪指令的一般格式为: 变量名 伪操作符 操作数,操作数 DB 定义变量的类型为BYTE,给变量分配字节或字节串操作数。, DW 定义变量的类型为WORD,给变量分配字操作数。 DD 定义变量的类型为DWORD,给变量分配双字操作数。 除了常数、表达式和字符串外,问号“?”也可以作为数据定义伪指令的操作数,此时仅给变量保留相应的存储单元,而不赋与变量某个确定的初值。 当同样的操作数重复多次时,可用重复操作符“DUP”表示,其形式为: n DUP(初值,初值0),例9 DATA DB 11H,33H ;定义包含两个元素的字节变量DATA NUM DW 100*5+88;定义一个字类型变量NUM,其初值为表达式的值 SUM DQ 0011223344556677 ;将4个字存入变量SUM。 例10 STR1 DB COMPUTER ;定义一个字符串,字符串的首地址为STR1 STR2 DW AA,BC,DE ;给两个字符组成的字符串分配两个字节存储单元 DATA DW ?,?,? ;为DATA预留6个存储单元 例11 DATA1 DB 20 DUP(?) ;为变量DATA1分配20个字节的空间,初值为任意值 DATA2 DW ? ;为变量DATA2分配2个字节的空间,初值为任意值 DATA3 DB 20 DUP(30H) ;为变量DATA3分配20个字节的空间,初值均为30H,4.段定义伪指令 段定义伪指令的用途是在汇编语言源程序中定义逻辑段,常用的段定义伪指令有SEGMENTENDS和ASSUME等 SEGMENTENDS 伪指令 段名 SEGMENT 定位类型组合类型类名 段名 ENDS 定位类型。定位类型给出实际段起点的类型。它有PAGE(页类型)、PARA(节类型)、WORD(字类型)、BYTE(字节类型)四种类型:,指令语句或伪指令语句, 组合类型。组合类型在多模块程序设计中表示该段和其它同名段间的组合连接方法。组合类型有PUBLIC、COMMON、AT、MEMORY、STACK等。 类名。类名是程序员任选的一个字符串,使用时必须用单引号括起来。其作用是在连接时决定各逻辑段的装入顺序。 段寻址, ASSUME 伪指令 它是用来说明逻辑段和物理段关系的伪指令,即告诉汇编程序在指令执行期间内存的哪一段是数据段,哪一段是堆栈段,哪一段是代码段。,ASSUME 段寄存器名:段名,段寄存器名:段名, ORG 伪指令 伪指令ORG指出其后的程序段或数据块的起始地址的偏移量。其格式为: ORG 表达式 5.过程定义伪指令 过程名 PROC NEAR/FAR 过程名 ENDP,;指令语句序列,格式: ASSUME 段寄存器名:段名,段寄存器名:段名, 例4-15 求从NUM开始的12个无符号字节数的和,结果放在SUM字单元中。 DATA SEGMENT NUM DB 95H,83H,36H,2DH DB 33H,22H,1AH,34H DB 62H,45H,75H,49H SUM DW ? DATA ENDS STACK SEGMENT DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK,BEGIN:MOV AX,DATA MOV DS,AX LEA SI,NUM MOV CX,12 XOR AX,AX NEXT: ADD AL, SI ADC AH,0 INC SI LOOP NEXT MOV SUM,AX HLT CODE ENDS END BEGIN,过程定义伪指令,格式: 过程名 PROC NEAR/FAR RET RET 过程名 ENDP,例12 编写一个延时50ms的子程序 DELAY PROC ;定义一个近过程 PUSH BX ;保护BX原来的内容 PUSH CX ;保护CX原来的内容 MOV BL,5 ;外循环次数 NEXT: MOV CX,2801 ;内循环次数(实现延时10ms) W10MS:LOOP W10MS ;(CX)0则循环 DEC BL ;修改外循环计数值 JNZ NEXT ;(BX)0则进行外循环 POP CX ;恢复CX原来的内容 POP BX ;恢复BX原来的内容 RET ;过程返回 DELAY ENDP ;过程结束,返 回,其它伪指令,1定位伪指令 例13 伪指令ORG和当前位置计数器值符号$的应用 DATA SEGMENT ORG 30H DB1 DB 12H,34H ORG $ +20H STRING DB STRING DATA ENDS 2简化的段定义伪指令 DATA ;定义数据段,隐含段名为DATA STACK长度 ;定义堆栈段,隐含段名为STACK,并形成SS及SP初值 CODE名字 ;定义代码段,隐含段名为CODE END ;汇编结束,
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!