[工学]第五章 汇编语言程序设计

上传人:tia****nde 文档编号:70526179 上传时间:2019-01-17 格式:PPT 页数:58 大小:592.31KB
返回 下载 相关 举报
[工学]第五章 汇编语言程序设计_第1页
第1页 / 共58页
[工学]第五章 汇编语言程序设计_第2页
第2页 / 共58页
[工学]第五章 汇编语言程序设计_第3页
第3页 / 共58页
[工学]第五章 汇编语言程序设计_第4页
第4页 / 共58页
[工学]第五章 汇编语言程序设计_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《[工学]第五章 汇编语言程序设计》由会员分享,可在线阅读,更多相关《[工学]第五章 汇编语言程序设计(58页珍藏版)》请在金锄头文库上搜索。

1、第五章 汇编语言程序设计,汇编语言是机器语言的符号表示,是用指令的助记符、符号地址、标号等书写程序的语言。用汇编语言编写的程序,叫汇编语言源程序,或简称源程序。只有将源程序翻译成目标程序,才能在机器上运行,这种把汇编语言程序翻译成机器语言程序的过程称为汇编。,计算机完成汇编任务是由汇编程序(MASMMacro Assembler) 这样一个软件工具实现的,汇编程序加工的对象是汇编语言源程序,加工的结果是目标程序。,汇编语言的一个实例 DATA SEGMENT A DW 123 B DW 456 SUM DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:

2、DATA START:MOV AX,DATA MOV DS,AX MOV AX, A ADD AX, B MOV SUM,AX MOV AH, 4CH INT 21H CODE ENDS END START,5.1 汇编语言语法,5.1.1 汇编语言语句,指令性语句是能产生目标代码,CPU可以执行的能完成特定功能的语句。 其格式为: 标号: 前缀指令助记符 操作数 ;注释 指示性语句,又叫伪指令是没有对应的机器指令,不能执行,只给汇编程序提供一种信息,用来定义变量,分配存储单元,指示程序开始和结束等。 其格式为: 名字 伪指令 操作数 ;注释 名字是给伪指令取的名称,通常是变量名、段名、过程名

3、、符号名等。 两种语句的区别: 在形式上:带不带冒号,是否可转向它。 在本质上:汇编时能否形成对应的机器码。,操作数(数据项) 汇编语言中使用的操作数可以是常数、寄存器、名字(变量)、标号或表达式 1、常数 1)数字常量 用于伪指令中给变量赋值,或作为指令语句中的立即数、直接地址。 2)字符串常量 用单引号引起来的字符或字符串也代表常数。 例:A,BCDE,汇编时被翻译成对应的ASCII码41H和42H,43H,44H,45H。 3)符号常量 PORT EQU 20H IN AL ,PORT,变量是内存中的数据区,在程序中作为存储器操作数来使用。在除代码段以外的其它段中定义。 变量主要有三种属

4、性: 段地址变量所在段的段地址 偏移地址变量单元地址与段起始地址之 间的位移量。 类 型有字节、字和双字三种。,2.变量,3.标号,标号是可执行指令语句所存放单元的符号地址,可作为转移指令的转移地址。 标号也有三种属性:段地址总是在CS段寄存器中,偏移地址概念与变量同,类型分NEAR和FAR两种。 NEAR表示标号所在语句与转移指令或调用指令在同一代码段内,只需改变IP即可。 FAR标号所在语句与转移指令或调用指令不在同一代码段内。,4、寄存器 8位:AH,AL,BH,BL,CH,CL,DH,DL 16位:AX,BX,CX,DX,SI,DI,BP,SP,DS,SS,ES,CS 5、表达式 数值

5、表达式 地址表达式,5.1.2 表达式中的各类运算符,有+、-、*、/,以及MOD,其中MOD表示除法运算后得到的余数。例: 19/7的商是2,19 MOD 7则为5(余数) 算术运算符可以用于数字表达式,例: MOV AL,2*7 汇编时计算表达式形成指令为: MOV AL,0EH 算术运算符也可以用于地址表达式,对地址运算的结果应有明确的物理意义,例两个地址的乘或除无意义,而加或减则可以,例: LEA SI,SUM+3 表示变量SUM的地址加上3得到的和作为新存储器地址。,(1)算术运算符,逻辑运算符有AND、OR、XOR和NOT,它们只能用于数字表达式中。 例:MOV CL,36H AN

6、D 0FH 汇编时形成指令:MOV CL,06H 这些逻辑运算符也是8086/8088的指令助记符,但不会造成混乱,前者在汇编时进行,而后者在指令执行时进行的。 例:AND DX,PORT AND 0FEH 后一个逻辑运算符AND在汇编时进行,若PORT为81H,则汇编后表达式算出为80H。执行前一个指令助记符AND时,将(DX)与80H相与,结果在DX中。,(2)逻辑运算符,PORT EQU 81H,共有6个,它们为: EQ(相等),NE(不等),LT(小于),GT(大于), LE(小于或等于),GE(大于或等于) 关系运算符的两个操作数必须都是数字或者是同一段内的两个存储器地址。 关系为真

7、,结果为0FFH或0FFFFH 关系为假,结果为0 例:MOV BX,PORT GE 5 若PORT的值大于等于5,则汇编后为: MOV BX,0FFFFH 若PORT的值小于5, 则汇编后为: MOV BX,0,(3)关系运算符,它可以把存储器一些特征作为数值送回。 这些操作符有OFFSET,SEG,TYPE,SIZE及LENGTH。 OFFSET运算符用来取存储单元的偏移量。 例:MOV SI,OFFSET STRI1;将变量STRI1的地址偏移量取到SI中。 注意与 MOV SI,STRI1的差别。 但它与 LEA SI,STRI1等价。 SEG运算符用来取存储单元的段值。 例: MOV

8、 AX,SEG STRI1 ;将变量STRI1所 MOV DS,AX ;在段值取到DS中,(4)数值返回运算符,TYPE运算符用来取变量或标号的类型值 存储器单元类型 对应值 DB(字节) 1 DW(字) 2 DD(双字) 4 DQ(四字) 8 DT(10字节) 10 NEAR -1 FAR -2 LENGTH运算符返回DUP定义的数据占据的元素个数,其它返回1。 SIZE运算符返回DUP定义的数据占据的字节数,其它返回TYPE值。,(5)属性运算符,用来建立或改变已定义变量、内存操作数或标号的类型属性。 运算符有:段操作符“:”、PTR、SHORT MOV AX, ES:STRI1 INC

9、BYTE PTRBX,在源程序中使用一些约定的符号,这些符号用来告诉汇编程序应如何工作,这就是汇编控制指令,也称伪指令。 伪指令语句包含在源程序中,由汇编程序对源程序进行汇编时解释执行。伪指令语句除了本身可以申请分配一部分存储空间用作数据区和堆栈区外,不产生任何目标代码。在将源程序翻译成目标程序后,伪指令语句就不存在了。 5.2.1 符号定义伪指令 符号定义伪指令有EQU、LABEL几种。 1. EQU伪指令 使用格式为:名字 EQU 数值或字符序列 EQU伪指令的功能是将数值或字符序列与一个指定的名字等价。如此能增加汇编程序可读性。给程序的设计与维护带来方便。下面的例子列举了EQU伪指令的常

10、见用法:,5.2 8086汇编语言的伪指令语句,THREE EQU 3 ;名字THREE与数值3等价 SIXTH EQU THREE*(17+THREE);SIXTH等价于3*(17+3) P EQU ES:BX ;P与ES:BX等价 Y EQU PSI ;Y与ES:BXSI等价 2. “”伪指令 “”伪指令与EQU伪指令具有相同的功能,区别仅在于“”伪指令定义的符号允许重新定义,使用更灵活方便。例如: EMP60 ;定义EMP等于常数60 EMP79 ;重定义EMP等于常数79 EMPEMP1 ;又定义EMP等于常数80,5.2.2 变量定义伪指令 常用的变量定义伪指令有 DB、DW、DD、

11、DQ、DT, 分别用来定义字节,单字、双字、四字及十字节类型 变量。它们的基本应用格式如下: 变量名 DBDWDDDQDT 表达式 其中,变量名是可选的, 表示其中的伪操作命令必须选用一种,表达式有如下几种应用形式: 1. 数值表达式 这种形式定义的变量具有表达式给定的数值初值。 例如: BETA DW 4*10H;变量BETA为字类型,初值为64,2. ASCII字符串 字符串必须用单引号括起来。DB伪指令为串中每一 个字符分配一个字节单元,且自左至右按地址递增的顺 序依次存放,字符个数不得超过255个。例如 MSG1 DB msgtest 对于DW伪指令,可以给两个字符组成的字符串分配 两

12、个字节存储单元,而且这两个字符的存储顺序是前一 个字符在高字节,后一个字符在低字节,每一个数据项 不能多于两个字符。例如: MSG2 DW AB,cd,ef,3. 地址表达式 地址表达式的运算结果是一个地址,因此只能用DW或DD来定义。如果用DW定义,则将原变量或标号的偏移地址定义为新变量;如果用DD来定义,则将原变量或标号的偏移地址和段地址分别置入新变量的低位和高位字中。例如: AD1 DD BETA1;变量的初值为BETA1的段地址和偏移地址,AD2 DW BETA2;变量的初值为BETA2的偏移地址,4. ? 问号表示所定义的变量未指定初值。例如: BUF DW ?;定义一个字变量BUF

13、,初值为一随机数,5. ( n ) DUP ( 表达式 ) 这种情况用于定义重复变量,DUP(Duplication)是 重复数据操作符,n表示重复次数,圆括号内的表达式表 示要重复的内容。例如: TAB DB 100 DUP(0);从变量TAB开始有100个初值为零的字节元素 DUP操作符可以嵌套使用,即圆括号中的表达式又是一个带DUP的表达式。例如: TAB DW 2 DUP(5 DUP(4),7) 表示变量TAB开始有12个字元素,这12个元素的初值构成的数据序列为: 4,4,4,4,4,7,4,4,4,4,4,7 共占24个字节单元。,5.2.3 程序分段定义伪指令 1. SEGMEN

14、T和ENDS伪指令 1)语句格式 利用SEGMENT和ENDS可把源程序模块划分成若干个源程序段,它的格式为: 段名 SEGMENT 定位方式 组合方式 分类名 ;段内所有语句 段名 ENDS 其中,段名是为该段起的名字;定位方式、组合方式和分类名是可选的,选两个以上时,书写顺序必须与格式中的顺序一致。这三个可选操作数都是通过汇编给链接程序提供控制信息的。链接时,先处理组合方式,再处理定位方式,最后处理分类名。,2)组合方式 源程序可以分成若干个模块单独编制与汇编,每个模块又可划分若干段,如果这些段都不太大却又分别定义了不同的段名,则当这些模块链接起来并装入机器运行时,由于程序段数可能大大超过

15、当前立即可用的由段寄存器确定的逻辑段数(仅四个),使程序运行极为不便。为此,如果将不同模块中相同性质的段使用同样的段名,则连接这些模块时就可以把同名的段按照指定的方式组合起来,既便于程序运行,又可以达到有效使用存储空间之目的。 可供选择的组合方式有PUBLIC、STACK、AT 、COMMON、MEMORY以及NONE共六种。 PUBLIC 该段与其它模块的同名段按先后出现的顺序依次连接起来形成一个源程序段,共用一个段基址,运行时装入同一个逻辑段。,STACK 与PUBLIC类型同样处理,只是组合后的这个段专门用作堆栈段,并自动初始化SS和SP。注意,被链接的所有模块中至少应该有一个STACK

16、段,否则LINK时会提示出错。 COMMON 表示该段与其他模块中被说明成COMMON的同名段共享相同的存储区,采用覆盖方式存放,连接长度为各分段中最大长度。 AT数值表达式 表示该段应按绝对地址定位,段地址为数值表达式的值,偏移地址为0。 MEMORY 表示该段定位在所有其他段之上,即地址较大区域。 NONE 即不指定方式,表示该段与其它模块中的段,不管段名是否相同,都不发生任何组合关系,链接时它将是一个独立的段。(缺省),3)定位方式 定位方式通过汇编告知LINK程序如何将经组合后的新段定位到存储器中。定位方式有四种,即PARA、BYTE、WORD和PAGE方式。 PARA方式:规定段从16的整数倍地址(指物理地址)开始,它使得段间可能留有1到15个字节的间隙。这也是一种缺省方式。 BYTE方式:规定段可以从任何地址开始,它使本段与前面段间不留任何

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号