




已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章汇编语言的基本语法 主要内容汇编语言程序的结构汇编语言语句类型和组成汇编语言程序设计 5 1汇编语言的特点 1 机器指令 计算机能识别的代码 机器指令是由二进制数组成的 例如 PUSHAX机器指令为 010100002 汇编语言 汇编语言是一种符号语言 用助记符表示操作码 用符号或符号地址表示操作数或操作数地址 它与机器指令是一一对应的 3 高级语言 面向过程 如C FORTRAN 或对象 如C Java 的语言 不依赖于机器 因而有很好的通用性和可移植性 汇编语言与高级语言的比较 采用汇编语言进行程序设计的优点 可充分利用机器的硬件功能和结构特点 加快程序的执行速度 减少目标程序所占用的存储空间 常用来编写实时控制程序 实时通信程序 有时也用来编制某些系统软件程序 文件名 ASM文件名 OBJ文件名 EXE 汇编语言源程序 汇编 目标程序 连接 执行 调试程序 编辑程序EDIT EXE 汇编程序MASM EXE 连接程序LINK EXE 汇编语言程序的开发过程 ML文件名 ASM DATASEGMENT 数据段NUMDW0011101000000111BNOTESDB Theresultis DATAENDS STACKSEGMENTSTACKSTADB50DUP TOPEQULENGTHSTASTACKENDS CODESEGMENT 代码段ASSUMECS CODE DS DATABEGIN MOVAX DATAMOVDS AXMOVDX OFFSETNOTES 显示提示信息MOVAH 9HINT21HMOVBX NUM 将数装入BXMOVCH 4 CH作循环计数器 ROTATE DISPLAY MOVCL 4 CL中放移位位数MOVDL AL 显示16进制数ROLBX CLMOVAH 2MOVAL BLINT21HANDAL 0FH AL中为一位16进制数DECCHADDAL 30H 转换为ASCII码值JNZROTATECMPAL 9 是0 9的数码 MOVAX 4C00H 返回DOSJLDISPLAYINT21HADDAL 07H 在A F之间CODEENDS 代码段结束ENDBEGIN 模块结束 2 结构DATASEGMENTDATAENDSSTACKSEGMENTSTACKSTACKENDSCODESEGMENTCODEENDSENDS 源程序由若干条语句组成程序由最多4个段组成 数据段 堆栈段 代码段 附加段每个段有一名字 并以符合SEGMENT表示段的开始 以END作为段的结束符号 5 2汇编语言程序结构和基本语法 汇编语言的基本语法 词法和句法一 词法字符集 标识符 保留字 数的表示 运算符和表达式1 字符集英文字符 A Z a z 数字字符 0 9算术运算符号 关系运算符号 分隔符 TAB控制符 CR LF FF其他字符 如 2 标识符常用作变量名 常量名 记录名 和段名由1 31个字符组成 打头的字符必须是字母 或 从第二个字符开始 组成标识符的字符可以是字母 数字 或 不能使用其他符号3 保留字指令助记符 伪指令 寄存器名 表达式运算符及属性操作符 不能当做标识符使用 4 数的表示所有常数必须是整数默认十进制 表示非十进制数 要加后缀B H或Q 十六进制以字母开头必须在前面加数字0 如十六进制数AF应表示为0AFH 5 表达式和运算符表达式由运算符和操作数组成 可分为数值表达式和地址表达式 运算符可分为算术运算符 逻辑运算符 关系运算符 分析运算符 综合运算符 分离运算符等操作数可以是常数 变量名 或标号 算术运算符 MODSHLSHR对操作数进行算术运算 运算对象和结果都必须为整数MOVAL 00011010BSHL2SHL为移位运算符SHLAL 1SHL为移位指令助记符 逻辑运算符NOT AND OR XOR对操作数按位进行逻辑运算MOVAL NOT10100101B逻辑运算符NOTAL逻辑运算指令 关系运算符对操作数按位进行关系运算 条件满足结果全为1 否则全为0MOVAX 5EQ101B等效于MOVAX 0FFFFHMOVBH 10HGT16MOVBH 00HMOVBL 0FFHEQ255MOVBL 0FFHMULAL64HGE100MULAL 0FFH 分析运算符SEG返回变量或标号所在段的段基址MOVAX SEGVAR1OFFSET返回变量或标号的段内偏移基址MOVSI OFFSETVAR1LENGTH加在变量之前 返回变量所包含的单元数MOVBL LENGTHVAR1TYPE返回变量或标号的类型属性MOVAX TYPEVAR1SIZE返回变量所占的总字节数 等于LENGTH和TYPE两个运算符返回值的乘积MOVCH SIZEVAR1CH LENGTH 求为符号名分配的项数 格式 LENGTH 符号名 这里为符号名定义的数据项必须是用重复格式DUP 定义的 而对于其他情况则回送1 例 K2DW10DUP 则LENGTHK2 10TYPEK2 2SIZEK2 20例 AARRDW2 4 6则LENGTHAARR 1 TYPEAARR 2SIZEAARR 2可以看出 SIZE LENGTH TYPE 符号名 综合运算符PTR规定内存单元的类型属性格式 类型PTR符号名MOVBYTEPTR 1000H 0MOVWORDPTR 1000H 0THIS改变存储区的类型属性格式 符号名EQUTHIS类型VARBEQUTHISBYTEVARWDW20HDUP 0 分离运算符HIGH LOWMOVAL HIGH1234HAL 12MOVAL LOW1234HAL 34 其他运算符SHORT短转移说明运算符 运算符改变运算优先级 运算符表示间接寻址 段跨越前缀表示后跟的操作数由指定段寄存器提供段基址 1 语句 指令语句 标号 前缀 指令助记符 操作数 注释 标号 表示指令的存储器地址 供转移指令 调用指令和循环指令作为操作数使用 MOVCX 2 设置CX计数值L DECCX 计数值减1JZL 若计数值不为零则跳转到L执行前缀 与其他指令配合使用 段跨越前缀 重复前缀 总线封锁前缀 操纵尺寸和寻址尺寸等 MOVAX ES 2000H 段跨越前缀REPMOVSB重复前缀操作数 指令要处理的数据 可分为常数 常量 变量和标号 注释 指令的功能说明 以 开始的字符串 不影响程序执行 二 句法 语句和结构 常数 编程时已经确定其值 程序运行期间不会改变其值的数据对象 常量 用符号表示的常数 其值在程序执行过程中保持不变 变量 编程时确定其初始值 程序运行期间可修改其值的数据对象 伪指令语句 名字 伪操作命令 操作数 注释 名字 可以是符号名 常量名 变量名 过程名和段名 伪操作命令 主要包括符号定义 变量定义 程序分段定义 过程定义 模块定义 宏定义 段简化定义和内存模式定义等命令 操作数 随伪操作命令的不同而不同 1 符号定义语句 等值语句EQU语句格式 符号EQU表达式把EQU右边表达式的值或表达式赋给左边的符号例 CONTEQU10NUMEQU89 3 5 9 等号语句 语句格式 符号 表达式功能同EQU一样 但等号语句可以多次重新定义同一符号NUM 10HNUM NUM 20H 取消语句PURGE语句格式 PURGE符号名1 符号名2 取消被EQU语句定义的符号名 例 CONTEQU10PURGECONTCONTEQU12 2 数据定义语句为数据项分配存储单元格式1 变量名 伪指令名表达式1 表达式2 这里伪指令可为DB DW DD 表达式有以下几种情况 数值表达式例 DA BYTEDB50H 50 0caHDA WORDDW0a3f1H 498dHA1DD12345H Memory 45H 23H 01H 00H 表达式 不带引号的 表示可预置任何内容例 DA BDB 要求分配两个字节单元DA WDW 要求分配两个字单元 字符串表达式数据项可以写成字符串形式 但只能用DB DW DD定义 而且DW DD语句定义的串只允许包含两个字符 例 S1DB ABCDEF S2DW AB CD EF S3DD AB CD 这几个变量在存储器中存放情况如下 S141HS242HS342H42H41H41H43H44H00H44H43H00H45H46H44H46H45H43H00H00H 注意 定义多于两个以上字符的字符串时 只能使用DB伪指令 不能使用DW和DD等伪指令 格式2 变量名 伪指令名表达式 DUP 表达式 用于定义重复的数据或分配一数据块空间 例 D B1DB20HDUP 保留20H个字节D B2DB10HDUP ABCD 字符串 ABCD 重复10H次D W1DW10HDUP 4 字4重复10H次 3 段定义语句 段开始语句SEGMENT和段结束语句ENDS段定义格式 段名SEGMENT 定位类型 组合类型 类别 段名ENDS定位类型 用来规定段起始边界的要求 可以为以下四种 缺省为PARA PAGE 16位段地址的最低8位必须为0 即从一页的起点开始 PARA 16位段地址的最低4位必须为0 即从一段的起点开始 WORD 16位段地址的最低1位必须为0 即从偶地址开始 BYTE 16位段地址可以为任意值 即段可以从任何字节开始 组合类型告诉连接程序本段与其他段的关系NONE本段与其他段逻辑上不发生关系 每段有独立段基地址 PUBLIC将本段与用PUBLIC说明的同名同类别的其他段连接成一个段 所有这些段用同一个段基地址 COMMON同名同类段相重叠 段的长度为其中最长段的长度STACK表示本段是堆栈段 连接方式同PUBLICMEMORY该段在连接时被放在所有段的最后AT把本段装在表达式的值所指定的段基地址处类别 段分配语句ASSUME CPU对存储器的访问必须通过一个段寄存器来提供段基址 ASSUME用来建立段与段寄存器之间的联系 格式 ASSUME段寄存器名 段名 段寄存器名 段名 DATASEGMENTDATAENDSSTACKSEGMENTSTACKSTACKENDSCODESEGMENTASSUMECS CODE DS DATA SS STACK CODEENDSEND DATA1SEGMENTVAR1DB12HDATA1ENDSDATA2SEGMENTVAR2DB34HDATA2ENDSCODESEGMENTVAR3DB56HASSUMECS CODE DS DATA1START INCVAR1INCVAR2INCVAR3 CODEENDSENDSTART 例 4 过程定义语句在程序设计中 常将多次重复使用的具有一定功能的程序段组成一个子程序 称为过程 可用CALL调用 RET返回 定义格式 过程名PROC NEAR FAR 过程名ENDPNEAR过程只允许段内调用 FAR允许段间调用 5 宏指令宏定义语句格式 宏指令名MACRO 形式参数1 形式参数2 ENDM宏调用 宏指令名 实参数 实参数 SHIFTMACROXMOVCL XSALAL CLENDM SHIFT6 宏扩展 MOVCL 6 SALAL CL 5 4汇编语言程序的上机过程 汇编语言程序上机运行的过程有以下几个步骤 1 用编辑程序建立 ASM源文件 2 用宏汇编程序MASM等汇编源文件 生成 OBJ目标码文件 3 用连接程序LINK对目标码文件等模块进行连接 生成 EXE可执行文件 4 键入可执行文件名执行该文件 分析执行结果 5 用DEBUG等工具调试 ASM源程序 再汇编 连接 运行 直到得出正确结果 为此 除了DOS系统软件和编辑程序外 还需要备置如下程序 汇编程序masm exe或asm exe或tasm exe等连接程序link exe或tlink exe等汇编调试程序等交叉引用程序cref exe符号索引文件处理程序等 1 建立源文件可使用任何一种能建立ASCII文本文件的编辑程序来建立汇编源程序文件 扩展名为 ASM 在使用各种文字编辑程序时 被编辑的源文件 ASM 中不应有排版格式控制符 2 汇编编辑生成的 ASM源程序文件 须经汇编程序进行汇编 生成二进制代码的目标文件 常见的汇编程序有行汇编和宏汇编两种类型 行汇编 常用DEBUG EXE的A命令 生成的目标代码可作为 COM文件存盘 也可在DEBUG环境下直接运行 行汇编简单直观 生成的目标程序所占用的内存空间最小 但汇编按绝对地址进行 长度限制在64KB范围内 目标程序没有与其它程序模块连接的信息 要由用户或安装程序实现各个目标程序在内存中的地址分配 这样既可能使各程序之间产生太大的空隙 造成浪费 也可能造成各程序的内存存储冲突 宏汇编MASM 对汇编语言源程序 ASM进行汇编常用方法 DEBUG的使用方法 1 DEBUG的运行2 DEBUG的主要命令D 显示内存单元内容 U 反汇编命令 R 显示与修改寄存器内容 E 修改内存单元内容 A 汇编命令 T P 单步执行指令 G 连续执行指令 N 指定装入文件名或写入文件名 L 装入N指定的文件 W 将指定内容写入N指定的文件 Q 退出DEBUG程序 返回操作系统状态 5 3ROMBIOS中断调用和DOS系统功能调用 5 3 1ROMBIOS中断调用 BIOS BasicInputOutputSystem 基本输入输出系统 是一组固化到计算机内主板ROM芯片上的程序 它保存着计算机最重要的基本输入输出的程序 系统设置信息 开机后自检程序和系统自启动程序 提供最低级 最直接的硬件控制 是硬件与软件之间的接口 BIOS的功能 系统自检及初始化对硬件设备进行自检 对外部设备初始化 设置中断向量 引导操作系统等 程序服务处理为操作系统和应用程序提供与I O有关的系统服务 BIOS直接与I O设备打交道 通过端口与I O设备传送数据 使应用程序脱离具体的硬件操作 硬件中断处理提供硬件中断服务程序 BIOS的服务功能是通过调用中断服务程序来实现的 中断 CPU执行程序的过程中 由于出现了某个事件 CPU暂停当前程序 转而去执行其他程序 处理完后 返回被暂停的程序继续执行 这个过程称为中断 引起中断的事件称为中断源 处理该事件的程序称中断服务程序 中断号 8086系统允许256种中断 每种中断对应0 255之间的一个数 称为中断号 每种中断都对应于一种中断服务 在实模式下 将中断服务程序的入口地址称为中断向量 存放256个中断向量的内存区域称为中断向量表 BIOS中断调用 BIOS由许多功能模块组成 每个功能模块的入口地址都在中断向量表中 通过软件中断指令 INTn 可以直接调用这些模块 CPU响应中断后 把控制权交给指定的BIOS功能模块 由它提供相应的服务 基本方法 将所要调用功能的功能号送入AH寄存器 根据所要调用功能的规定设置入口参数 执行 INT中断号 指令 进入相应的服务子程序 中断服务子程序执行完毕后 可按规定取得出口参数 1 INT10H显示输出INT10H包含了与显示器有关的功能 可以用来设置显示方式 光标大小和位置 显示字符等 AH 0AH 显示字符入口参数 AL 预显示字符的ASCII码功能 在当前光标位置显示AL中的字符 光标位置不变 AH 0EH 显示字符功能 类似0AH功能 但显示字符后光标随之移动 并可解释回车 换行和退格等控制符 2 INT16H键盘输入 AH 0 从键盘读一键出口参数 AL ASCII码 AH 扫描码功能 从键盘读入一个键返回 按键不显示在屏幕上 对于无相应ASCII码的键 如功能键等 AL返回0 AH 1 判断是否有键可读出口参数 若ZF 0 则有键可读 AL ASCII码 AH 扫描码 否则 无键可读 AH 2 返回变换键的当前状态出口参数 AL 变换键状态变换键指Ctrl Alt Numlock等 例 读键盘输入 显示其中的ASCII字符 按回车键退出 CODESEGMENTSTART READNEXT MOVAH 0INT16HCMPAL ODHJEEXITCMPAL 0JZREADNEXTEXIT MOVAH 4CHMOVAH 0EHINT21HINT10HCODEENDSJMPREADNEXTENDSTART 5 3 2DOS功能调用 前面一些程序的运行结果 或是保留在寄存器中 或是保留在存储器中 不能方便直观的看到 要了解运算的结果 应在显示器上输出 方便的方法是调用操作系统中的I O子程序 操作系统的核心是许多有关I O驱动 磁盘读写以及文件管理等子程序 这些子程序都编了号 调用时把子程序号 或称系统功能调用号 送到INT21H 通常按照如下4个步骤进行 在AH寄存器中设置系统功能调用号 在指定寄存器中设置入口参数 执行指令INT21H实现中断服务程序的功能调用 根据出口参数分析功能调用执行情况 1 键盘输入字符调用格式 MOVAH 01HINT21H功能 等待从键盘输入一个字符并将输入字符的ASCII码送入寄存器AL中 同时在显示器上显示该字符 入口参数 无出口参数 AL 输入的ASCII码字符2 控制台输入调用格式 MOVAH 08HINT21H功能 与1号相似 但只从键盘上输入而不显示字符 入口参数 无出口参数 AL 输入的ASCII码字符 DOS功能调用 3 向显示器输出一个字符 2号功能调用 功能号 AH 02H入口参数 DL 字符的ASCII码功能 在显示器当前光标位置显示给定的字符 光标右移一个字符位置 如按Ctrl Break或Ctrl C则退出例 在当前显示器光标位置显示一个问号movah 02h 设置功能号 ah 02hmovdl 提供入口参数 dl int21h DOS功能调用 显示 DOS功能调用 4 显示字符串 9号功能调用 功能号 AH 09H入口参数 DS DX 欲显示字符串在主存中的首地址字符串应以 24H 结束功能 在显示器输出指定的字符串stringdb Hello Everybody 0dh 0ah movah 09hmovdx offsetstringint21h DOS功能调用 5 从键盘输入一个字符串 10号功能调用 功能号 AH 0AH入口参数 DS DX 缓冲区首地址执行该功能调用时 用户按键 最后用回车确认缓冲区的定义 第1字节事先填入最多欲接收的字符个数 包括回车字符 可以是1 255 第2字节将存放实际输入的字符个数 不包括回车符 第3字节开始存放将输入的字符串实际输入的字符数多于定义数时 多出的字符丢掉 且响铃 DOS功能调用 例 Bufferdb81 定义缓冲区 第1个字节填入可能输入的最大字符数db0 存放实际输入的字符数db81dup 0 存放输入的字符串 movdx segbuffer 伪指令seg取得buffer的段地址movds dx 设置数据段DSmovdx offsetbuffermovah 0ahint21h 4 文件管理系统调用 AH 功能号 功能入口参数出口参数3C建立文件DS DX ASCII串地址成功AX 文件代号CX 文件属性失败AX 错误码3D打开文件DS DX ASCII串地址成功AX 文件代号AL 0读 1写 2读写失败AX 错误码3E关闭文件BX 文件代号失败AX 错误码3F读文件或设备DS DX 数据缓冲区地址成功AX 实际读入字数BX 文件代号AX 0已到文件尾CX 读取字节数读错误 AX 错误码40写文件或设备DS DX 数据缓冲区地址成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 冷链兽药疫苗配送协议
- 2025年学校安全责任协议常用版(2篇)
- 生物科技技术入股合同协议
- 2025年联营造林合作协议(示范文本)
- 2025版水面水利工程承包与监理服务协议
- 2025年度旅游地产包销合作协议
- 2025年度第三方担保文化产业知识产权质押贷款协议
- 2025版实体店与食品企业合作直供协议
- 2025店面转让协议范本:涵盖合同解除与违约责任
- 2025年保温工程施工验收与保修合同范本
- 全景回顾2024年系统规划与管理师考试试题及答案
- 2025年碳排放管理员职业技能鉴定考试题库及答案
- 必修二英语单词表人教版
- Mission-Planner地面站操作手册
- 高效学习单词:音节记忆法课件解析
- 教学课件:《公差配合与技术测量》
- 2024年云南省建筑行业土建质量员理论考试模拟试题(100题)含答案
- 常用消毒剂的使用方法课件
- 《管理学原理及应用》考试复习题库(含答案)
- 北师大版《心理健康》九年级下册全套教学课件
- 给药错误的应急流程
评论
0/150
提交评论