微机原理与接口技术课件第四章(尚凤军著).ppt_第1页
微机原理与接口技术课件第四章(尚凤军著).ppt_第2页
微机原理与接口技术课件第四章(尚凤军著).ppt_第3页
微机原理与接口技术课件第四章(尚凤军著).ppt_第4页
微机原理与接口技术课件第四章(尚凤军著).ppt_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

第四章宏汇编语言 汇编语言程序上机过程汇编程序基本语法 数据定义伪指令汇编语言程序基本语句 汇编程序功能 步骤 1 用编辑程序建立以ASM为后缀名的源文件 2 用汇编程序 MASM EXE 把源文件转换成OBJ目标文件 3 用连接程序 LINK EXE 把目标文件转换成EXE执行文件 4 用DOS命令方式直接键入文件名 执行 汇编程序功能 汇编程序的功能 1 检查源程序 2 测出源程序中的语法错误 并给出出错信息 3 产生源程序的目标程序 并可给出列表文件 LST 4 展开宏指令 汇编过程图示 编辑程序 PROG ASM源文件 汇编程序MASM EXE PROG OBJ目标文件 连接程序LINK EXE PROG EXE执行文件 汇编语言特征汇编语言是介于高级语言和机器语言间的编程语言 优点 程序员可直接使用Memory Registers I O端口 中断系统 DMA系统等来编写高质量的程序 生成的目标程序比其它等效高级语言程序的要精简 且占内存少 执行速度快 缺点 程序与要解决问题的数学模型间关系不直观编程难度较大 易出错程序设计和调试时间较长可移植性差 4 1汇编源程序的语句类型 汇编语言的语句 指令 1 指令性语句 可执行语句 符号指令通知CPU进行某种操作的命令 与机器指令相对应 相应功能由硬件完成 2 指示性指令 说明性语句 伪指令为汇编程序提供编译信息 为链接程序提供链接信息 由软件完成 4 1汇编源程序的语句类型 格式 指令性语句 标号 符号指令 注释 指示性语句 变量名 伪指令 注释 4 2宏汇编基本语法4 2 1标号 变量和常量1 标号和变量 符号地址 标号 代表指令地址 定义在CS中 为转移指令提供目标 变量 代表内存操作数的存储地址 或者说变量名就代表某个单元 定义在DS ES SS中 命名规则 不能用保留字 仅能使用给定集合的符号 不能用数字打头 最长不超过31个字符 标号和变量的3个属性 段属性 其所在的段基址 用SEG运算符可算出 例 MOVAX SEGBUF 偏移属性 用OFFSET运算符可算出其有效地址 例 MOVBX OFFSETBUF 类型属性 变量的类型有 字节型 用DB伪指令定义字型 用DW伪指令定义双字型 用DD伪指令定义四字型 用DQ伪指令定义五字型 用DT伪指令定义标号的类型 NEAR 近 该类型标号是段内转移指令的目标地址FAR 远 该类型标号是段间转移指令的目标地址 2 常量 常量表示一个固定的数值 它有以下形式 立即数字符串符号常量数值表达式 立即数 经汇编后转换成等值的二进制补码 注意 算术表达式可视为立即数 如 12 0A8H 10100000B 34Q 字符串常数 用 括起来的字符串 经汇编后转换成相应的ASCII码 如 P10 3 MOVDL 1 DL 31HMOVAL A AL 41H 符号常数 符号常量使用标识符表达一个数值 常用伪指令EQU或 定义 例 COUNTEQU55POINTER 2F8H MOVCL COUNT CL 55MOVDX POINTER DX 2H8H 注意 EQU用于数值等价时不能重复定义符号名 但 允许有重复赋值 例 X 7 Xqeu7X X 5 XEQUX 5 是错的 4 2 2运算符1 数值运算符 算术运算符 MOD 模除 即取余 例 MOVAX 8 5 汇编时完成运算 其值若出界给出错误信息 MOVAX 31MOD5 AX 1 逻辑运算符NOT 按位取反例 MOVAL 10010011BNOTAL AL 01101100BAND 按位相与例 MOVAL 37HAND0FH AL 07HOR 按位相或例 MOVAL 7OR30H AL 37HXOR 按位异或例 MOVAL 0AAHXOR55H AL 0FFH 逻辑运算符分离运算符HIGH 截取高8位例 MOVAH HIGHBX BH AHLOW 截取低8位例 MOVAL LOWBX BL AL 关系运算符 注意 关系运算符为 真 时 结果为 1 即全1 否则为0 2 修改类型属性的运算符 PTR运算符注意 必须用PTR修改或确定内存操作数的类型 LABEL格式 NameLABELType变量类型 BYTE WORD DWORD 标号类型 FAR NEAR 例 BYTE ARRAYLABELBYTEWORD ADDRESSLABELFAR SEG格式 SEG段名功能 求某个逻辑段 变量 标号的段基址例 MOVAX SEGDATA AX为DATA所在逻辑段的段基址MOVDS AX例 XYZDW1234H MOVAX SEGXYZ 3 返回属性或数值的运算符 OFFSET格式 OFFSET变量名 标号功能 取变量 标号的偏移地址例 MOVBX OFFSETXYZ 3 返回属性或数值的运算符 TYPE格式 TYPE变量 标号功能 返回变量或标号的类型返回变量类型 字节 字 双字 返回标号类型 NEAR 1 FAR 例 MOVAX TYPEXYZ AX 2 3 返回属性或数值的运算符 运算符在汇编程序对源程序汇编的过程中 使用地址计数器来保存当前正在汇编的指令的地址 地址计数器的值可用 来表示 汇编语言允许用户直接用 来引用地址计数器的值 汇编语言程序中 符号 表示当前偏移地址值 例1 JNE 6例2 ARRAYDW1 2 4 3 4 4 设汇编时ARRAY分配的偏移地址为0074H 试画出ARRAY变量的内存分配图 82 例 XYZDW1234H 5678H COUNTEQU XYZ COUNT 4 代表汇编计数器的当前值 最常见的用法是和等值 等号伪指令配合 紧跟在DB DW 伪指令之后 统计出分配给某个变量的单元数 LENGTH操作符格式 LENGTH变量对于DUP定义的变量 返回分配的单元数 其他返回1 DUP为Duplicate 重复 的缩写 例 FEESDW100DUP ARRAYDW1 2 3 MOVCX LENGTHFEESMOVCX LENGTHARRAY 编译后 MOVCX 100MOVCX 1 SIZE格式 SIZE变量功能 汇编程序返回分配给该变量的字节数 值等于TYPE和LENGTH的乘积 地址操作符 地址操作符取得名字或标号的段地址和偏移地址 4 3数据定义伪指令数据定义及存储器分配 格式 Variable MnemonicOperand Comments 说明 Variable变量 用于表示符号地址 是可以省略的 Comments注释字段用来说明该为操作的功能 可选的 Mnemonic助记符用来说明所用伪操作的助记符 DB定义字节类型DW定义字类型DD定义双字类型DQ定义四个字类型DT定义十个字节类型 变量定义例1 操作数可以是常数或表达式 Data byteDB10 4 10HDate wordDW100 100h 5Data dwDD3 20 0fffdh存储器中的分配形式如何 DATA BYTE DATA WORD DATA DW 变量定义例2 1 操作数可以是字符串MessageDB HELLO 2 操作数是 可以保留存储空间 但不存入数据 ABCDB0 0DFFDW 52 3 操作数字段可以使用重复操作符DUP格式 repeat countDUP operand operand Repeat count可为一个正整数 或表达式用来指定括号中的操作数的重复次数 例 ARRAYDB2DUP 0 1 2 4 DUP可以嵌套使用 ARRAYDB100DUP 0 2DUP 1 2 0 3 变量定义例3 可以取符号地址的偏移地址或整个地址例 PARAMETER TABLEDWPAR1DWPAR2DWPAR3INTERSEG DATADDDATA1DDDATA2操作符的类型 DB 1 DW 2 DD 4 DQ 8 DT 10 变量 变量代表内存操作数的存储地址变量需要先定义后使用变量定义 Define 伪指令为变量申请固定长度为单位的存储空间 并可以同时将相应的存储单元初始化定义后的变量可以利用变量名等方法引用其中的数据 即变量的数值 变量在内存区中的存放情况 定义变量的伪指令功能是在变量名所对应的地址开始的内存区依次存入各项值 当同时有几个变量定义语句时 将按照由低地址到高地址给每个变量语句中的表达式分配存储单元的规则存放 例 画出以下变量在内存区中分配图 设由0100H 0000H开始存放DATA1DB20HDATA2DW0204H 100HDATA3DB 1 3 15 3 DATA4DD12345HDATA5DB 0123 DATA6DW AB C D DATA7DB DATA8DD DATA9DB5DUP 00 DATA10DW3DUP 例 阅读以下程序 写出指令执行后的目标操作数 数据段 ORG1000HNUM1DB12H 34H 56H 78H 90HNUM2DW1122H 3344H 5566HNUM3DD13572468H 87654321HNUM4DWNUM1代码段 MOVAX SEG数据段段名MOVDS AXMOVBL NUM1MOVBX NUM2 2MOVBL BYTEPTRNUM3MOVBX WORDPTRNUM1 1MOVBL NUM1 2 2 MOVBX NUM2 4 MOVBX WORDPTRNUM3 3 MOVBX 3MOVBL NUM1 BX MOVSI OFFSETNUM1MOVBX SI 1 MOVBX NUM4 标号的定义 定义类型为NEAR的标号 1 隐含定义 在标号名后加冒号 放在指令前 例 L1 MOVAX BX 2 显式定义 标号名LABEL标号属性标号名EQUTHIS标号属性例 L2LABELNEARMOVCX 5L3EQUTHISFARMOVBX 1234H注意 同一条指令处可定义两个类型属性不同的标号例 L6LABELFARL7 XORAX 0F0FH 变量的定位 ORG伪指令 汇编程序按照指令的先后顺序一个接着一个分配存储空间 按照段定义伪指令规定的边界定位属性确定每个逻辑段的起始位置 包括偏移地址 定位伪指令ORG控制数据或代码所在的偏移地址ORG参数ORG伪指令是将当前偏移地址指针指向参数表达的偏移地址 汇编语言程序中 符号 表示当前偏移地址值 ORG伪指令 设置当前地址计数器的值格式 ORGconstantexpression例 VECTORSSEGMENTORG10VECT1DW47A5HORG20VECT2DW0C596H VECTORSENDS EVEN伪操作 EVEN使下一个字节地址成为偶数 例 DATAsegmentEVENword arrayDW100dup DATAends ALIGN伪操作 保证双字数组边界从4的倍数开始创造了条件 格式 ALIGNboundary其中boundary必须是2的幂例 DATASEGMENT ALIGN4ARRAYDB100DUP 注 ALIGN2和EVEN等价 基数控制伪指令 汇编语言的默认的是数制为十进制 RADIXexpression可以改变默认数制为某进制 例1 RADIX16例2 MOVBX 0FFHMOVBX 178与RADIX16MOVBX 0FFMOVBX 178D等价 4 4宏汇编语言基本语句完整的源程序的结构 用方式选择伪指令说明执行该程序的CPU类型 用段定义语句定义每一个逻辑段 用过程定义语句定义每一个子程序 用ASSUME语句说明段约定 用汇编结束语句说明源程序结束 程序在完成预定功能之后 应能安全返回DOS系统 方式选择伪指令通知汇编程序 当前的源程序指令是哪一个CPU指令 经过汇编链接之后生成的目标程序在哪一种CPU机型上运行 不属于选定CPU的指令均为非法指令 通常 方式伪指令放在程序的头部 作为源程序的第1条语句 1 方式选择伪指令 1 方式选择伪指令 格式 8086选择8086指令系统 默认 286选择80286指令系统 286P选择保护方式下的80286指令系统 386选择80386指令系统 386P选择保护方式下的80386指令系统 486选择80486指令系统 486P选择保护方式下的80486指令系统 586选择Pentium指令系统 586P选择保护方式下的Pentium指令系统 2 段定义语句 格式 Segment namesegment 定位类型 链接参数 分类名 段长度 Segment nameends说明 单一模块不需考虑以上参数问题 只在模块化程序中用到 段定义语句的属性参数为源程序的汇编 链接提供必要的信息 特别是模块化程序 各个模块如何定位 彼此如何链接 将涉及到定位参数和链接参数的选择 一个段一经定义其指令的标号 变量等在段内的有效地址就已排定 整个段占用内存大小就确定 2 段定义语句 格式 Segment namesegment 定位类型 链接参数 分类名 段长度 Segment nameends定位类型 给出实际段起点的类型 BYTE该段可从任何地址开始 WORD段必须从字 偶地址 的边界开始 段的起始地址能被2整除 PARA表节地址 即段地址的起始地址能被16整除 低4位为0的地址开始 缺省 PAGE表页地址 即该逻辑段的目标代码 从一个能被256整除的地址开始依次存放 低8位为0的地址开始 链接参数 在模块化程序设计中表示该段和其它同名段间的组合连接方法 若不指明组合类型 则ASM认为这个段是不准备与别的段相连接 PUBLIC该段连接时将与有相同名字的其他分段连接在一起 其连接次序由连接命令指定 COMMON连接时与其他同名的分段具有相同的起始地址 所以会产生覆盖 连接后 段的长度等于最长的COMMON段的长度 ATexpression使段的起始地址开始为表达式计算出来的地址 但不能用来指定代码段 例 DATASEGMENTAT0040HORG0017HKEYFLAGDB PA 00417DATAENDSSTACK指定该段运行时为堆栈的一部分 处理方式同PUBLIC MEMORY实践证明 MEMORY与PUBLIC等价 分类名 表逻辑段的类别 由用户定义 长度不超过40个字符的字符串 且必须用单引号括起来 分类名可有可无 在不同模块中 链接方式相同的同名段 如果有 分类名 的话 必须相同 段长度 USE16 段最大长度为64KB 访问时采用16位寻址USE32 段最大长度可大于64KB 访问时采用32位寻址DOS环境下运行的程序选用USE16作段长度 ASSUME伪指令 格式 ASSUME段寄存器 段名 段寄存器 段名功能 通知汇编程序 寻址逻辑段使用哪一个段寄存器 说明 通常A

温馨提示

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

评论

0/150

提交评论