【微机技术(4版)PPT第6章(18.7)版】.ppt

微型计算机技术(第4版) 孙德文

收藏

资源目录
跳过导航链接。
压缩包内文档预览:(预览前5页/共102页)
预览图 预览图 预览图 预览图 预览图
编号:74277653    类型:共享资源    大小:27.04MB    格式:ZIP    上传时间:2020-04-19 上传人:独** IP属地:江苏
20
积分
关 键 词:
微型计算机技术(第4版) 孙德文 微型 计算机技术 德文
资源描述:
微型计算机技术(第4版) 孙德文,微型计算机技术(第4版),孙德文,微型,计算机技术,德文
内容简介:
2020 4 19 上海交通大学 1 面向21世纪课程教材普通高等教育 十一五 国家级规划教材 微型计算机技术Weixin Jisu njiJishu 第4版 孙德文章鸣嬛编著 2020 4 19 上海交通大学 2 第6章汇编语言的基本语法 2020 4 19 上海交通大学 3 汇编语言的基本语法 6 1汇编语言源程序的格式6 2常量 标识符和表达式6 3指示性语句6 4指令性语句6 5宏指令 2020 4 19 上海交通大学 4 6 1汇编语言源程序的格式 程序是为实现某一特定目的 例如 对数据进行某种处理等 而编写的一组指令的有序集合 汇编语言程序就是用汇编语言编写的源程序 汇编语言是一种面向机器的语言 它是与计算机硬件密切关联的 因而熟悉计算机硬件是汇编语言程序员必须具备的条件 与用高级语言编写程序相比较 汇编语言程序具有更高的效率 它的程序执行时间短且占用内存少 这在计算机实时控制和实时处理中是十分重要的 因而在实时领域中得到广泛的应用 2020 4 19 上海交通大学 5 汇编语言与汇编程序 用汇编语言编写的源程序必须用汇编程序 一种系统软件 进行汇编 将它转换成用机器语言表示的目标程序后 才能由CPU识别执行 因此编制程序时必须遵循规定的格式和语法 不同型号的CPU和不同版本的汇编程序 其汇编语言是不同的 对于同一系列的CPU 则是向上兼容的 2020 4 19 上海交通大学 6 例6 1对10个字节数据a1 a10求和 DATASEGMENTAT2000HARRAYDBa1 a2 a3 a10COUNTEQU ARRAYSUMDW DATAENDSSTACKSEGMENTPARASTACK餐STACK餐STAKDB10DUP TOPEQULENGTHSTAKSTACKENDSCODESEGMENTASSUMECS CODE DS DATA SS STACK 2020 4 19 上海交通大学 7 例6 1 START MOVAX DATAMOVDS AXMOVAX 0MOVDI OFFSETSUMMOVBX OFFSETARRAYMOVCX COUNTLOP ADDAL BX ADCAH 0INCBXLOOPLOPMOV DI AXMOVAH CHINT21HCODEENDSENDSTART 2020 4 19 上海交通大学 8 汇编语言的两个组成特点 分段结构和语句行 分段结构8086 8088的程序是分段的 由此可知程序最多可由4种段组成 并分别将段寄存器CS DS ES和SS的内容作为段基值 每段所占内存容量可达64KB 上例程序共有3段 它们分别是数据段 段名DATA 堆栈段 段名STACK 和代码段 段名CODE 各段由命令SEGMENT开始 并由命令ENDS结束 2020 4 19 上海交通大学 9 语句行 2 语句行上例程序共有26行 即共有26个语句行 汇编语言程序的语句有两类 指令性语句和指示性语句 2020 4 19 上海交通大学 10 语句行 指令性语句主要是由指令构成的语句 其格式为 标号 操作码 操作数 注释 其中操作码和操作数是用助记符表示的指令的两个部分 操作数可以是1个 2个或几个 也可以无操作数 或是默认的 2020 4 19 上海交通大学 11 1 指令性语句 其中带方括号的有三项 标号 操作数和注释 带有方括号表示该项是任选项 即根据具体编程需要该项可有可无 在实际语句中该项的方括号是不写出来的 标号具有该语句指令所在内存地址的属性 通常在转移指令中用做目的地址 注意 标号必须用冒号 结尾 这是语法的规定 用分号 开始的注释用来说明该语句在程序中的作用 以方便程序的阅读和修改 这项也是任选的 2020 4 19 上海交通大学 12 2 指示性语句 指示性语句是主要由命令 也称伪指令 构成的语句 用来指示汇编程序进行汇编操作 其格式为 名字 变量 命令参数 注释 其中 命令 指示汇编程序进行某种汇编操作 参数 是有关的数据 带方括号的项是任选项 2020 4 19 上海交通大学 13 6 2常量 标识符和表达式 1 常量2 标识符3 表达式 2020 4 19 上海交通大学 14 1 常量 常量是其值在程序中不能改变的量 在汇编语言源程序中的常量有 数字常量 字符常量和符号常量 1 数字常量可以是二进制数 八进制数 十进制数或十六进制数表示例 10100110B 166D 166 6AH 0A6H 2 字符常量是用单引号 括起来的ASCII字符其值是该字符的ASCII代码值 3 符号常量是用符号定义的常量 例如 采用符号定义语句PORTAEQU80H 则指令MOVAL PORTA与指令MOVAL 80H等价 2020 4 19 上海交通大学 15 2 标识符 在编程时建立的有特定意义的字符序列 标识符可用作符号常量 名字 变量和标号等 组成标识符有如下规定 1 组成标识符的字符有 英文大写字母 A Z 英文小写字母 a z 数字0 9 字符 2 字符长度不超过3l个 3 首字符不能是数字 4 不能单独作为一个标识符 5 不能把保留字用作标识符 保留字包括助记符 寄存器名等 2020 4 19 上海交通大学 16 3 表达式 表达式由操作数和运算符组成 操作数可以是常量 名字 变量和标号等 运算符包括算术运算符 逻辑运算符 关系运算符 分析运算符和合成运算符等 2020 4 19 上海交通大学 17 表达式中的运算符 6 3指示性语句 指示性语句的格式如下 名字 变量 命令 参数 注释 2020 4 19 上海交通大学 18 2020 4 19 上海交通大学 19 指示性语句 1 程序开始和结束语句2 段定义语句3 过程定义语句4 数据定义语句5 符号定义语句 2020 4 19 上海交通大学 20 1 程序开始和结束语句 1 NAME命令给程序模块命名格式 NAME名字2 TITLE命令格式 TITLE名字名字作为每页标题打印出来 标题名字符不大于60个 2020 4 19 上海交通大学 21 程序开始和结束语句 3 END命令格式 END 标号 主模块结束必须写上标号 标号是程序中第一句指令性语句的标号 2020 4 19 上海交通大学 22 2 段定义语句 1 SEGMENT ENDS命令格式 段名SEGMENT 参数 段名ENDS用SEGMENT ENDS命令来定义一个段命令SEGMENT和ENDS必须成对使用 它们前面的段名必须是一致的 2020 4 19 上海交通大学 23 2 SEGMENT语句中的参数 段名由程序员定义 汇编时由系统为该段分配一个段基值 并将该值赋于段名 为 定位类型 组合类型 类别 用来设定该段在内存中的位置和在汇编 连接时 当该段与其它段组合在一起时该段同其它段的连接关系 都是任选项 2020 4 19 上海交通大学 定位类型 align type 定位类型用来指定该段段基值的边界条件 定位类型有以下四种 a BYTE 该段可从任何地址开始 即段基址 XXXX XXXX XXXX XXXX XXXXB 其中X表示任意值 即1 0 b WORD 该段必须从字的边界开始 即段基址 XXXX XXXX XXXX XXXX XXX0B 2020 4 19 上海交通大学 25 定位类型 c PARA该段必须从小节的边界开始 即段基址 XXXX XXXX XXXX XXXX 0000B d PAGE该段必须从页的边界开始 即段基值 XXXX XXXX XXXX 0000 0000B 注意 当定位类型缺省 即不写 时 隐含值为PARA 2020 4 19 上海交通大学 26 组合类型 combine type 在汇编和连接时 当该段与其他段组合在一起时 组合类型用来设定该段与其他段的连接关系 组合类型有以下六种 2020 4 19 上海交通大学 27 组合类型 a PUBLIC该段连接时将与其他同名段依次连接起来 其连接次序由连接程序确定 b COMMON该段连接时将与其他同名段有相同的段基值 即共享相同的存储空间 亦即各段会产生覆盖 但可节省内存容量 c ATexp 使段基值等于按表达式exp计算所得的16位数 必须指出 对于代码段不能用ATexp来设定段基值 2020 4 19 上海交通大学 28 组合类型 d STACK 仅用于堆栈段 使同名段都连接成一个连续段 且系统自动对SS和SP初始化 e MEMORY指定该段在同名段的最后 即该段在同名段中位于最高的地址空间 若连接时有几个组合类型为MEMORY的段 则只有最前面 最先遇到 的段按组合类型MEMORY处理 其他段句按组合类型PUBLIC处理 f NONE 表示本段与其他段逻辑上不发生关系 各段都有自己的段基值 注意 当组合类型缺省 即不写 时 隐含值为NONE 2020 4 19 上海交通大学 29 3 应用ORG命令的偏移地址定位语句 ORG命令指定某一语句在段内的偏移地址格式 ORGexpexp为能计算出16位立即数的表达式例 ORG100HMOVAL BL 本例示明 MOVAL BL 所在内存单元在本段内的偏移地址为1000H 2020 4 19 上海交通大学 30 4 应用命令ASSUME示明段寄存器内容的语句 ASSUME命令ASSUME命令紧跟在代码段的SEGMENT语句之后 用于指示下述程序中段寄存器同指定段名的对应关系格式 ASSUMECS 段名1 DS 段名2 SS 段名3 ES 段名4 2020 4 19 上海交通大学 31 段定义语句 注意 ASSUME语句仅指出段寄存器同段名的对应关系 并未对段寄存器赋值 在程序中未用到的段寄存器不必指示 2020 4 19 上海交通大学 32 3 过程定义语句 应用PROC ENDP命令定义过程 procedure 过程即子程序 是程序的一部分 程序中用CALL指令调用过程 过程结束用RET指令返回程序 2020 4 19 上海交通大学 33 过程定义语句 格式 过程名PROC类型 过程名ENDP类型为FAR NEAR 2020 4 19 上海交通大学 34 4 数据定义语句 用来为数据分配内存单元 格式 变量 命令参数1 参数2 注释 变量是内存中一组数的名字 由程序员在编程时用标识符定义 变量可以作为内存操作数来使用 2020 4 19 上海交通大学 35 数据定义语句 数据定义语句中的命令可以是 DB定义字节数据 8位 DW定义字数据 16位 DD定义双字数据 32位 DQ定义8字节数据 64位 DT定义10字节数据 80位 2020 4 19 上海交通大学 36 数据定义语句 参数是相应内存单元中的数据 可以是 数字常量 用各种规定的数制表示 字符常量 用单引号括起来的ASCII字符 符号常量 用EQU语句定义 2020 4 19 上海交通大学 37 数据定义语句 保留一个存储单位 以备程序执行过程中存入结果数据 保留4个存储单位 ARYDB4DUP 43H 表示定义一个变量ARY 在内存中开辟一个数组 存放4个43H 2020 4 19 上海交通大学 38 数据定义语句 DUP为复制符格式 复制次数DUP 数据 其中数据可以不只一个 且数据还可有复制部分 例6 2 段名为DATA的段由以下语句组成DATASEGMENTDATA1DB20HARRAYDB12H 12 A SUMDB DATAENDS设本段的段基值为2000H 则相应的内存分配为如图6 1所示 2020 4 19 上海交通大学 39 图6 1内存分配1 2020 4 19 上海交通大学 40 例6 2 其中第1个数据20H在该段的起点 故相应内存单元的偏移地址为0000H 后面数据所在内存单元的偏移地址依次类推 所有内存单元的段基值都是相同的 2000H 其中存入的数据都是以16进制表示的 注 由汇编程序在汇编时进行转换 其中 表示保留 实际该内存单元的内容为随机数 但对本程序来说 目前是无效的 2020 4 19 上海交通大学 41 例6 3DATA2DB2DUP 12H 34H 56H 此时内存分配如图6 2所示 2020 4 19 上海交通大学 42 例6 4DATA3DB ABCD 其中参数部分 ABCD 与 A B C D 等价 其内存分配如图6 3所示 2020 4 19 上海交通大学 43 例6 5DATA4DW1234H 5678H 9AH 其内存分配如图6 4所示 用DW定义的是字数据 每个数据分配2个内存单元 如数据9AH实则上是009AH 2020 4 19 上海交通大学 44 例6 6DATA5DW AB CD 其内存分配如图6 5所示 注 未列出具体地址 注意 不能写为DW CDAB 因为汇编语言语法规定 除用DB定义的字符串常量外 单引号中ASCII字符的个数不得超过2个 若只有一个 例DW C 就相当于DW0043H 2020 4 19 上海交通大学 45 例6 7DATA6DD12345678H AB 其内存分配如图6 6所示 注 未列出具体地址 2020 4 19 上海交通大学 46 例6 8 例6 9 例6 8STAKDB100DUP 保留100个字节内存单元作为堆栈区 例6 9DATA1SEGMENTAT2000HORG3000HARY1DW1234H 5678HARY2DWARY1ARY3DDARY1上述语句汇编后 ARY2中存放的是1234H 即ARY1的偏移地址 ARY2中依次存放的是3000H 2000H 即ARY1的偏移地址和段基值 2020 4 19 上海交通大学 47 2020 4 19 上海交通大学 48 数据定义语句 综合例 DATA1SEGMENTAT2000HORG3000HARY1DB12H 34H 56H 78HARY2DW1234H 5678HARY3DB A B C D ABCD ARY4DW AB ARY5DD AB ARY6DWAYT2ARY7DDARY2 2020 4 19 上海交通大学 49 数据定义语句 综合例 在定义ARY6的语句中 参数为已定义的变量ARY2 其值为ARY2的偏移地址3004H 在定义ARY7的语句中 参数为已定义的变量ARY2 其值为ARY2的偏移地址3004H和段基值2000H 2020 4 19 上海交通大学 50 5 符号定义语句 1 EQU命令等值命令格式 名字 变量EQUexp 2 命令等号命令格式 名字 exp 3 PURGE命令用来撤消已定义的符号常量格式 PUREG名字可同时撤消几个己定义的名字 说明 其中 名字 是程序员取定的 表达式exp可以计算得出一个具体的数值 这实际上就是给名字赋值 在程序中就可引用这个名字来表示表达式的实际计算值 若需对已赋值的名字撤销原赋值并赋以新值 则需先用PURGE命令语句撤销原赋值 再用EQU命令语句赋新值 2020 4 19 上海交通大学 51 例6 10 COUNTEQU20 给COUNT赋值为20 MOVAL COUNT 即MOVAL 20 PURGECOUNT 撤销原赋值COUNTEQU10 给COUNT赋新值10 MOVBL COUNT 即MOVBL 10 2020 4 19 上海交通大学 52 2 应用命令 的符号常量定义语句 其格式为 名字 exp命令 的功能与EQU类似 唯一的差别是命令 可随时对名字 符号常量 赋新值 而不必使用PURGE命令 2020 4 19 上海交通大学 53 例6 11 如例6 11 可写为 COUNT 20 MOVAL COUNT COUNT 10 MOVBL COUNT 2020 4 19 上海交通大学 54 2020 4 19 上海交通大学 55 6 名字与变量 1 名字名字包括文件名 标题名 段名 过程名和符号常量名等 是程序员在编程中按标识符规定命名的 目的是方便编程和读程 2020 4 19 上海交通大学 56 名字 1 段名在段定义语句中命名取定 定义后的段名可以作为段基值来使用 用来对段寄存器赋值 例如 MOVAX DATA1MOVDS AX 2020 4 19 上海交通大学 57 2 过程名 过程名是在源程序的过程定义语句中命名的 如过程定义语句SORTPROCNEAR 过程名为SORT 汇编连接源程序时 系统分配给过程一个地址 即该过程第一条指令所在内存单元的地址 亦即该过程的入口地址 这也就是调用该过程的CALL指令中的目的地址 过程名在汇编语言程序中可作为调用指令的目的地址使用 例如指令CALLSORT 其中SORT就表示过程名为SORT的过程的入口地址 执行该指令就是转移到过程SORT中去运行 3 符号常量 由符号定义语句EQU 来定义 对符号常量给以赋值 符号常量是在源程序的符号常量定义语句中命名取定的 如符号常量定义语句COUNTEQU20将数值20赋给COUNT COUNT就可在指令中作为常量20被引用 如MOVAL COUNT就相当于 MOVAL 20 2020 4 19 上海交通大学 58 例6 12 部分程序内容为 DATASEGMENTARRAYDB10H 24H 5AH 0C7H 98H ABCDE COUNTEQU ARRAYMAXDBDATAENDS 2020 4 19 上海交通大学 59 例6 12说明 其中第3语句行是给符号常量COUNT赋值的语句 句中表达式为 ARRAY 其计算值就是赋给COUNT的常量数值 下面先讨论表达式中 和ARRAY的含义及具体值 然后由表达式计算出赋给COUNT的具体值 如前所讨论 变量ARRAY所在语句中的第1个数据10H所在内存单元的偏移地址为0000H 也就是该数组所在段的起始地址 后续数据依次存在后续偏移地址的内存单元中 最后一个数据 E 所在内存单元的偏移地址为0009H 变量ARRAY所在语句的起始偏移地址为0000H 这就是变量ARRAY的偏移地址属性 注 变量的属性将在下一小节中详细讨论 2020 4 19 上海交通大学 60 例6 12说明 由于ARRAY语句的末地址为0009H 因COUNT语句行不占内存 故下一语句行 指MAX语句行 所在的偏移地址就是000AH 此语句中的 就是该行 当前行 的偏移地址 即000AH 故表达式可计算得出为 ARRAY 000AH 0000H 000AH 10因而赋给符号常量COUNT的值为10 COUNT的英文含义为计数 它实际上表示的是ARRAY数组的数据元素个数 即10个字节数据 在程序中用MOVCX COUNT指令来设置计数器CX的初值 然后就可用对CX进行减一计数的方法来控制对10个数据的处理 2020 4 19 上海交通大学 61 例6 13 部分程序内容为 STACKSEGMENTSTAKDB100DUP 保留100个内存单元 字节 栈区TOPEQU STAK 给TOP赋值为100STACKENDSCODESEGMENT MOVAX STACK 将段基值STACK赋给段寄存器SSMOVSS AXMOVSP TOP 设置堆栈指针 2020 4 19 上海交通大学 62 内存中堆栈段的分配如图6 7所示 内存 堆栈段 段基值 偏移地址内容寄存器SP00064 2020 4 19 上海交通大学 63 2020 4 19 上海交通大学 64 2 变量 1 变量的定义和属性变量由数据定义语句DB DW DD DQ DT来定义 变量有三属性 2020 4 19 上海交通大学 65 变量 变量有三属性 段属性 说明该变量在哪个存储段中 偏移地址属性 说明该变量的段内偏移量 类型属性 说明该变量所在内存数据的类型 字节 字 双字 8字节还是10字节 2 分析运算符 Analyticoperator 变量是内存中一组数的名字 它可以作为内存操作数来引用 例如 有如下三个语句DATA1SEGMENTAT2000HORG3000HDATATABDB10H 20H 30H 40H 50H 60H 70H 80H定义了变量DATATAB 该变量有8个字节组成 存放在内存中段基值为2000H的段内 段名为DATA1 第一个数据10H的偏移地址为3000H 据此定义 该变量中的8个字节数据都可用变量来表示 例如指令MOVAL DATATAB AL 10HMOVBL DATATAB 7 BL 80H 2020 4 19 上海交通大学 66 分析运算符 从上述语句还可看到 变量DATATAB有三个属性即段属性为该变量的段基值2000H 偏移地址属性为该变量的偏移量3000H 类型属性为该变量的数据类型字节 如果要把该变量的三个属性分别取出作为运算操作数 则可采用 分析运算符 2020 4 19 上海交通大学 67 2020 4 19 上海交通大学 68 分析运算符 用于把变量的三个属性分别取出来作为操作数 有SEG OFFSET TYPE LENGTH和SIZE SEG变量名 取出变量的段基值OFFSET变量名 取出变量的偏移地址TYPE变量名 取出变量的类型值 字节数据为1 字数据为2 双字数据为4 8字节数据为8 10字节数据为10 2020 4 19 上海交通大学 69 变量 LENGTH变量名 表示变量所在数组的元素个数 注意 只有当数据用DUP定义时 才适用 否则恒为1 SIZE变量名 表示变量所在数组的字节数 注意 同LENGTH SIZE变量 LENGTH变量 TYPE变量 例6 14 部分程序内容为 DATASEGMENTBUF1DBN1 N2 N3 N10 N1 N10为10个字节数据BUF2DB10DUP 0 BUF3DW10DUP DATAENDS设该段的段基值为2000H 则 2020 4 19 上海交通大学 70 例6 14 SEGBUF1 2000HOFFSETBUF1 0000HTYPEBUF1 1LENGTHBUF1 1SIZEBUF1 1SEGBUF2 2000HOFFSETBUF2 000AHTYPEBUF2 1LENGTHBUF2 10SIZEBUF2 10SEGBUF3 2000HOFFSETBUF3 0014HTYPEBUF3 2LENGTHBUF3 10SIZEBUF3 20 2020 4 19 上海交通大学 71 例6 14 这些属性在程序中的引用举例如下 MOVAX SEGBUF1 设置段寄存器DSMOVDS AXMOVSI OFFSETBUF1 设置地址指针SIMOVCX LENGTHBUF2 设置计数器CXMOVBL SIZEBUF3 设置计数器BLMOVAL BUF1 从内存取数据到寄存器AL MOVAH BUF1 2 MOVAH OFFSETBUF1 2 的简便写法 指令的功能是将数据N3送到寄存器AH 指令MOVAL BUF1是指令MOVAL OFFSETBUF1 的简便写法 是汇编程序能接受的 本指令的功能是将数据N1送到寄存器AL 2020 4 19 上海交通大学 72 2020 4 19 上海交通大学 73 3 合成运算符 a PTR运算符类型PTRexp其中类型是BYTE WORD DWORD 变量 FAR NEAR 标号 exp为表达式 是存储器操作数 合成运算符 已定义的变量具有一定的属性 对变量属性的引用可方便程序员的编程工作 但变量的类型属性有时候会限制它的应用 设数据定义语句为 BUFWDW1234H 5678H其中变量BUFW的类型属性为字 编程时可很方便的用指令 MOVAX BUFW 将字数据1234H传送到寄存器AX 但若要传送字节数据就有问题了 因为指令 MOVAL BUFW 是非法的 所以非法是由于指令中的两个操作数AL 字节数据 和BUFW 字数据 的类型不同 这样的指令是不能汇编和执行的 为了解决这个问题 汇编语言提供了属性运算符PTR THIS以及LABEL命令 2020 4 19 上海交通大学 74 类型PTRexp 其中类型可以是BYTE WORD DWORD NEAR和FAR 注 前三个是变量的类型属性 后两个是标号的类型属性 exp是表达式 是存储器操作数 当为变量重新指定类型时exp就是变量名 运算符PTR的作用是 任按后面的表达式去寻址 不管它原来有无类型或是那一种类型 经PTR定义后 就按PTR前面类型项指定的类型看待 实际上 PTR是给后面的存储器操作数赋予新的数据类型 注 对于标号则为地址类型 2020 4 19 上海交通大学 75 a 重新指定变量类型 操作数PTR的应用如下 BUFWDW1234H 5678H下列指令均为合法的 MOVAX BUFW AX 1234HMOVAL BYTEPTRBUFW AL 34H 2020 4 19 上海交通大学 76 b 指定内存操作数的类型 下列指令 INC BX 是非法的 因为基址寻址的内存操作数的类型未示明 无法进行汇编和执行 用PTR指定类型后 指令就是合法的了 如下 INCBYTEPTR BX INCWORDPTR BX 2020 4 19 上海交通大学 77 c 用EQU和PTR定义一个新的变量 BUFWDW12345H 5678HBUFBEQUBYTEPTRBUFW这使新变量BUFB具有和变量BUFW相同的段属性 偏移地址属性 但两者类型不同 BUFW类型属性为字 而BUFB类型属性为字节 此时 下列指令就是合法的 MOVAX BUFW AX 1234HMOVAL BUFB AL 34H 2020 4 19 上海交通大学 78 THIS类型 类似于上节PTR操作符的应用 THIS和EQU一起用来定义一个新变量 它与原变量具有相同的段属性和偏移地址属性 但类型属性不同 例 BUFBEQUTHISBYTEBUFWDW1234H 5678H这样 BUFB和BUFW具有相同的段属性和偏移地址属性 但BUFB的类型属性是字节 此时下列指令都是合法的 MOVAX BUFW AX 1234HMOVAL BUFB AL 34H注意 BUFB语句和BUFW语句必须是紧邻的 且重定义类型的BUFB语句在BUFW语句前面 2020 4 19 上海交通大学 79 2020 4 19 上海交通大学 80 c LABEL命令 格式 变量 标号LABEL类型用来定义语句中的变量 或标号 例如 BUFBLABELBYTEBUFWDW1234H 5678H则下列指令是合法的 MOVAX BUFW AX 1234HMOVAL BUFB AL 34HLABEL语句必须紧跟在DW语句 已定义的变量名之前 2020 4 19 上海交通大学 81 6 4指令性语句 格式 标号 操作码 操作数 操作数 注释 1 标号标号是一条指令在内存中的符号地址 标号可以用作内存操作数 2020 4 19 上海交通大学 82 1 标号 标号有三属性1 段属性 表示标号所在段的段基值 2 偏移量属性 表示标号所在位置的偏移地址 3 类型属性 表示标号所在指令是允许段内跳转还是段间跳转 2020 4 19 上海交通大学 83 标号 1 用PTR重新指定标号类型设已定义标号METER则段内转移用JMPMETER 段间转移用JMPFARPTRMETER 2020 4 19 上海交通大学 84 标号 2 用EQU和PTR定义新标号 METER KILOMTEQUFARPTRMETER 3 用EQU和THIS定义新标号 KILOMTEQUTHISFARMETER 2020 4 19 上海交通大学 85 标号 4 用LABEL定义新标号 KILOMTLABELFARMETER 2020 4 19 上海交通大学 86 2 操作数 操作数可以用段名 符号常量 变量 属性表达式 过程名和标号等 例如 MOVAX DATA DATA是段名MOVCX COUNT COUNT是符号常量MOVBL BUFFER BUFFER是变量MOVSI OFFSETARRAY OFFSETARRAY是属 性表达式CALLSBRT1 SBRT1是过程名JMPDONE DONE是标号 6 5宏指令 程序员用汇编语言编程时 对于程序中多次重复使用的指令序列 即很小的程序段 可定义一条宏指令 编写程序时就用这条宏指令代替该指令序列 从而简化书写工作 1 宏定义 宏名字 宏调用和宏展开宏定义就是定义宏指令 宏定义的命令是MACRO和ENDM 宏定义的格式为 宏名字MACRO 形式参数 ENDM 2020 4 19 上海交通大学 87 宏名字 其中宏名字是宏指令的名字 是程序员按标识符规定取定的 命令MACRO和ENDM之间的指令序列就是该宏指令的内容 称为宏体 带方括号的形式参数是任选项 当无形式参数时就无该项 当由多个形式参数时相互间用逗号隔开 形式参数亦称哑参数 哑元或变元 它是宏体中有关指令的操作码 操作数或它们的一部分 形式参数是没有物理意义的 只有用实参数代替形式参数后 相应的指令才有实际意义 2020 4 19 上海交通大学 88 宏调用 在程序中应用宏指令称为宏调用 宏调用的格式为 宏名字 实参数 其中实参数是与宏定义中的形式参数一一对应的 汇编时 汇编程序用已由实参数取代形式参数的宏体取代程序中的宏指令 称为宏展开 此时程序中已全部是可执行的指令序列了 2020 4 19 上海交通大学 89 例6 15无形式参数的宏指令 宏定义 SAVEREGMACROPUSHAXPUSHBXPUSHCXPUSHDXPUSHSIPUSHDIENDM 2020 4 19 上海交通大学 90 宏调用 宏调用 程序 SAVEREG SAVEREG 2020 4 19 上海交通大学 91 宏展开 程序 PUSHAXPUSHBXPUSHCXPUSHDXPUSHSIPUSHDI PUSHAXPUSHBXPUSHCXPUSHDX PUSHSIPUSHDI 汇编程序再将此宏展开后的程序转换成机器码生成目标程序 2020 4 19 上海交通大学 92 例6 16带有形式参数的宏指令 宏定义 MULTIPLYMACROOPR1 OPR2 RESULTPUSHAXMOVAL OPR1IMULOPR2MOVRESULT AXPOPAXENDM 2020 4 19 上海交通大学 93 宏调用 其中有三个形式参数OPR1 OPR2和RESULT 它们都是宏体指令中的操作数 宏调用 程序 MULTIPLYCL VAR XYZ BX 实参数CL是寄存器 VAR是变量 XYZ BX 是相对基址寻址的内存操作数MULTIPLY240 BL SAVE 实参数240 是立即数 BL是寄存器 SAVE是变量 2020 4 19 上海交通大学 94 宏展开 程序 PUSHAXMOVAL CLIMULVARMOVXYZ BX
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:微型计算机技术(第4版) 孙德文
链接地址:https://www.renrendoc.com/p-74277653.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

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