编1632位微型计算机原理及应用(李继灿主编)课件第4章.ppt_第1页
编1632位微型计算机原理及应用(李继灿主编)课件第4章.ppt_第2页
编1632位微型计算机原理及应用(李继灿主编)课件第4章.ppt_第3页
编1632位微型计算机原理及应用(李继灿主编)课件第4章.ppt_第4页
编1632位微型计算机原理及应用(李继灿主编)课件第4章.ppt_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

4.1 汇编语言语法规则,一.概述 1.可执行文件的生成 编辑,第四章 宏汇编语言, 编译, 链接,2.源程序中的语句类型 一个完整的源程序应包含2类语句: 符号指令、汇编伪指令(伪语句),标号名、变量名、段名、过程名命名规则:以字母开头,后跟字母、数字长度31个字符,符号指令:经汇编后,其目标指令通知CPU进行什么操作 伪指令:为汇编程序,链接程序提供汇编链接信息,二.常用的伪指令 1.字节字义伪指令 变量名 DB 一串用逗号间隔的单字节数,说明: DB Define Byte 的缩写,“定义字节”。 ? 随机数, Dup Duplicate(重复) 3 Dup(?) 代表3个用逗号间隔的随机数 5 Dup(A)代表5个用逗号间隔的A的ASC码,如: N1 DB 12H,64,-1,3*3 DB 01010101B, A , B DB 0A6H, HELLO N2 DB ?,?,? ;与下条等价 N2 DB 3 DUP(?),功能: 通知汇编程序把DB后跟的单字 节数,依次存入从变量(如N1) 开始的单元,负数用补码表示, 单引号中的字符翻译成ASC码。,如: N1 DB 12H,64,-1,3*3 DB 01010101B, A , B DB 0A6H, HELLO N2 DB ?,?,? ;与下条等价 N2 DB 3 DUP(?),如: N1 DB 12H,64,-1,3*3 DB 01010101B, A , B DB 0A6H, HELLO N2 DB ?,?,? ;与下条等价 N2 DB 3 DUP(?),功能: 用DB定义的这些内存单元(N1 N1+12, N2 N2+2)的属性均为“字节型”。,2.字定义伪指令 变量名 DW 一串用逗号间隔的双字节数,如: WNUM DW 1234H,12, AB, C DW ?,? DW 2 DUP(?),说明: DW Define Word “字定义” ? 双字节随机数 单引号中只能是一个或两个字符,功能: 通知汇编程序把DW后跟的双字节数, 依次存入从变量名开始的单元,每一个数 占2个字节,低位字节低址单元, 高位字节相邻的高址单元。,功能: 用DW定义的这些单元的属性都是“字型”, 如上例, WNUM WNUM+11这12个单元的属性都是“字型”。,功能: 通知汇编程序把DD后跟的数存入变量名开始的单元, 每一个数占4个字节,低位字节低址单元,高位字节高址单元。,用DD定义的这些单元的属性都是“双字型”,上例DNUM DNUM+3单元,这些单元都是双字型单元,3. 双字定义伪指令 变量名 DD 一串用逗号间隔的4字节数 如: DNUM DD 12345678H,5. 等值伪指令 符号常数 EQU 表达式 如: NUM EQU 33,功能: 定义符号常数NUM的值为33,6. 等号伪指令 符号常数=表达式 如: NUM = 33 功能:定义符号常数NUM的值为33,4. 多字节定义伪指令 变量名 DF 一串用逗号间隔的6字节数 变量名 DQ 一串用逗号间隔的8字节数 变量名 DT 一串用逗号间隔的10字节数,功能: 通知汇编程序为DF/DQ/DT后跟的每一个数,分配 6/8/10个单元。,三. 常用运算符 1. 算术运算符: +, -, *, /,2. 关系运算符: EQ(等于), NE(不等于), GT(大于),LT(小于), GE(大于或等于),例如: NUM EQU 33 MOV AL, NUM ;该指令与下条指令等价 MOV AL , 33,区别: 用EQU定义的符号常数,其值在后继语句中不能更改;用“=”定义的符号常数,其值在后继语句中可以重新定义,应用: $运算符紧跟在 DB、DW、DD伪指令之后,统计字符串的长度。,例如数据段有: BUF DB THE QUICK BROWN FOX ;字符串长度19 LLL EQU $-BUF 汇编后 符号常数LLL的值即为19,3. $运算符 汇编程序对源程序是逐行汇编的,$运算符可以返回 汇编计数器的当前值。,如: MOV AX, SEG DATA MOV DS, AX 设“DATA”是数据段的段名,上述两条指令算出数据段的段基址,先赋给AX,再转赋DS。,5.OFFSET运算符 格式:OFFSET 变量名或标号名 功能:算出某个变量或标号名所在单元的偏移地址(有效地址)。,4. SEG运算符 格式: SEG 段名或变量名或标号名 功能: 计算某一逻辑段的段基址,设以“DATA”为段名的数据段中,存在 BUF DB 12 ,34 ,56 代码段: MOV AX,SEG DATA MOV DS,AX MOV BX,OFFSET BUF MOV AL,BX ;AL=12,以下两条指令等价的: MOV BX,OFFSET BUF LEA BX,BUF,6. PTR运算符 格式: 类型说明符 PTR 地址表达式,功能: 在本条指令中临时修改地址表达式的属性, BYTE(字节) WORD(字) DWORD(双字) FAR(远) NEAR(近),举例:设数据段有: BUF DB 11,22,33,44 WBUF DW ?,? XX DB 0FFH,0 YY DB 0FFH,0FFH,0,0 ZZ DB 0FFH,0FFH,0FFH,0,代码段:, MOV BUF,12H ,举例:设数据段有: BUF DB 11,22,33,44 WBUF DW ?,? XX DB 0FFH,0 YY DB 0FFH,0FFH,0,0 ZZ DB 0FFH,0FFH,0FFH,0,举例:设数据段有: BUF DB 11,22,33,44 WBUF DW ?,? XX DB 0FFH,0 YY DB 0FFH,0FFH,0,0 ZZ DB 0FFH,0FFH,0FFH,0,7.方括号 用方括号括起来的地址表达式是访问内存操作数常用的寻址方式,方括号的另一用途是标注数组元素的下标,下标从0开始。,代码段: MOV AL,BUF3 ;AL=44,一 . 源程序的结构 一个完整的源程序,在结构上必须: 用段定义语句定义每一个逻辑段 用过程定义语句定义每一个过程 用ASSUME语句说明段约定 用汇编结束语句说明源程序结束 程序结束应能安全返回DOS把控制权还给操 作系统,4.2 宏汇编的基本语句,二. 基本语句 1. 方式选择伪语句 格式之一: 486 功能:通知汇编程序将以下指令汇编成486的 机器指令。 应用:源程序第一条指令。,2. 段定义语句 段名 SEGMENT 定位参数 链接参数 分类名 段长度 段体 段名 ENDS,说明: 段名以字母开头,命名规则同变量名、标号名, 段名不说明段体的性质。 SEGMENT / ENDS是逻辑段的定界语句。 定位参数通知链接程序:逻辑段的目标代码在存 储器中如何存储,有4种描述: BYTE 可以从任意地址存放 WORD 从偶地址开始存放 PARA(或缺省) 从能被16整除的地址开始存放 PAGE 从能被256整除的地址开始存放,链接参数有6种描述: PUBLIC 通知链接程序,把不同模块中,具有 PUBLIC属性的同名段,在满足定位参数的要求 下,按指定的链接顺序链接成一个逻辑段。 MEMORY 与PBULIC类似。 COMMON 通知链接程序把不同模块中都具有 COMMON属性的同名段,根据指定的链接顺序, 按照“覆盖” 方式,组合成一个逻辑段。 组合之后的逻辑段体积等于链接之前具有COMMON 属性的同名段中的最大的段体。 STACK 具有STACK属性的段是堆栈段,链接程 序将把同名堆栈段组合成一个大的堆栈段。, AT表达式 如: DATA SEGMENT AT 40H ORG 17H KEYFLAG DB ? DATA ENDS 表明逻辑段段基址为40H,KEYFLAG的偏移地址 为17H。 注意: 因为程序在内存中的位置是由操作系统分配的,用户程序不能指定逻辑段的段基址。 严格地讲,“AT表达式”这一属性是供操作系统程序使用的。 缺省 表明该段是独立的,链接程序对于具有缺省链接参数的同名段,不进行组合。, 不同模块同名段链接参数的功能示意图,A段 (PUBLIC) 段体A1,主模块,子模块,C,P,S,PUBLIC,COMMON,STACK,C段 (STACK) 段体C1,A段 (PUBLIC) 段体A2,C段 (STACK) 段体C2,B段 (COMMON)段体B1,B段 (COMMON)段体B2,段体A1 段体A2,段体B2,段体C1 段体C2, 分类名 分类名的名字由程序员命名,通常数据段分类名为 DATA,代码段分类名为CODE,通知链接程序, 把分类名相同的同名逻辑段放在邻近的内存区。, 段长度: USE16 表示该段体积最大64K,单元偏移地址为16 位,采用16位寻址。 USE32 表示该段体积最大4G,单元偏移地址为32 位,采用32位寻址。 在实模式下运行, 应选用USE16。,逻辑段有4类属性参数,每一参数又有多种选择,怎样使用? 在实模式环境下,各逻辑段应采用16位寻址,所以段长度选用USE16。 堆栈段选用 STACK 为链接参数,STACK为分类名,由于选用 STACK 为链接参数,汇编后DOS将自动给SS:SP赋值。 只有在模块化程序中,才有必要考虑链接参数的选择。 在单一模块程序中,定位参数,链接参数,分类名均 选用“缺省”表示即可。,段参数应用小结,3. 段约定语句 ASSUME 段寄存器:段名,段寄存器:段名 如: ASSUME CS:CODE, DS:DATA,功能: 通知汇编程序 以CODE为段名的是代码段,对CODE段寻址:CS* 24 以DATA为段名的是数据段,对DATA段寻址:DS* 24,说明: ASSUME语句通常是放在代码段的第一条语句。 ASSUME语句不能完成对段寄存器的赋值(没有赋 值功能)。, 对段寄存器赋值有2种方法: 用SEG运算符 如: MOV AX, SEG DATA MOV DS, AX 把段名赋给段寄存器 如: MOV AX, DATA MOV DS, AX, 重申:CS:IP 由DOS自动赋初值。 SS:SS 初值由DOS自动赋给,或由程序员赋给。,说明: 过程名即子程序名,命名规则同变量名。 PROC / ENDP是过程的定界语句。 汇编后过程名就是子程序第一条指令的入口地址。 属性有两种描述: NEAR 近 FAR 远,4. 过程定义语句 过程名 PROC 属性 过程实体 RET 过程名 ENDP,5. 定位语句 ORG 表达式 如: ORG 100H BEG: JMP START 功能:定义程序段的起始偏移地址,上例通知汇编 程序,指令的目标代码汇编后的偏移地址从 100H开 始存放。 应用:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论