




已阅读5页,还剩60页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章汇编语言程序设计 4 1汇编语言源程序 高级语言高级语言是面向过程的语言 是脱离机器的语言 不用考虑计算机生产厂家 CUP型号 程序语句更接近于自然语言 因而易学 易懂 易掌握 应用也十分广泛 机器语言是指各种CPU所能直接识别和执行的二进制代码 这种语言难于记忆 书写和输入 汇编语言 汇编语言是一种将机器代码指令 符号 化了的编程语言 即每一条指令都用一个助记符来表示 再加上一系列的编程规则 优点 源程序采用助记符指令 容易记忆和书写 源程序经编辑 汇编 连接和调试非常容易形成正确的可执行文件 执行文件就是CPU能直接识别的二进制代码 因而具有实时 精确 快捷的特点 不足 因硬件结构不同 汇编语言指令也不同 4 1 1汇编语言源程序的结构 一个完整的汇编语言源程序通常由若干个逻辑段 SEGMENT 组成 包括数据段 附加段 堆栈段和代码段 每个逻辑段以SEGMENT语句开始 ENDS语句结束 整个源程序用END语句结束 段名1SEGMENT 段名1ENDS段名2SEGMENT 段名2ENDSEND 例 完整汇编语言程序的组成结构 求两个数相加和的程序DSEGSEGMENT 定义数据段DATA1DW0F865H 定义被加数DATA2DW360CH 定义加数DSEGENDS 数据段结束ESEGSEGMENT 定义附加段SUMDW2DUP 定义存放结果区ESEGENDS 附加段结束CSEGSEGMENT 定义代码段ASSUMECS CSEG DS DSEG ES ESEG 接上页程序 START MOVAX DSEGMOVDS AX 初始化DSMOVAX ESEGMOVES AX 初始化ESLEASI SUM SUM偏移地址送SIMOVAX DATA1 取被加数ADDAX DATA2 两数相加MOVES SI AX 和AX ES SI HLTCSEGENDS 代码段结束ENDSTART 源程序结束 4 1 2语句类型及格式 汇编语言分两大类 指令性语句由指令组成的可由CPU执行的语句格式如下 标号 前缀 操作码 操作数 操作数 注释 指示性语句只起说明作用 不生成目标代码 也叫伪操作语句 伪指令 格式如下 名字 伪操作 操作数 操作数 注释 4 1 3操作数 操作数寄存器存储器单元数据项数据项常量标号变量表达式 1 常量 数字常量以字符D结尾 十进制常量以字符B结尾 二进制常量以字符H结尾 十六进制常量字符串常量如 AB 2 标号 符号地址 例 LABLE MOVAX NUM1 JMPNEARLABLE 符号目标操作数不能与指令助记符或伪指令重名不允许由数字打头字符个数不超过31个 标号有三种属性 段 标号所在段的代码段地址偏移量 标号所在段的段地址到定义该标号的地址之间的字节数类型 NEAR 段内 和FAR 段间 3 变量 变量是某个数据区的名字 在指令中可以作为存储器操作数引用 变量必需以字母开头 由于数据区内容可以改变 所以变量也可以改变变量与标号一样也具有三种属性 段属性是它所在段的段地址 段值在DS或ES寄存器中 偏移量属性是变量所在段的段地址到变量地址之间的字节数 变量的类型有BYTE WORD DWORD 双字 QWORD 4字 TWORD 十字节 变量名与标号名的区别 变量名是变量的符号地址 标号是指令的符号地址 例如 MOVAX VAR1MOVBL VAR2JMPDONEDONE ADDAL 5 4 表达式 表达式不是指令 本身不能执行 汇编时对表达式进行相应的运算 程序执行时表达式已有指定的数值 表达式常用的运算符有算术运算符 逻辑运算符 取值运算符和属性运算符 表达式种类 算术运算符 和MOD 取余数 例如 N1DB45H 6 9MOVAL 8 7 逻辑运算符 AND OR XOR NOT例如 MOVAL 0ADHAND0CCH 取值算术运算符 OFFSET得到一个标号或变量的偏移地址 例如 MOVSI OFFSETDATA1将变量DATA1的偏移地址送SI 这条指令与下边的指令执行结果相同 LEASI DATA1SEG得到一个标号或变量的段地址 例如 MOVAX SEGDATA DATA段地址送 AXMOVDS AX 属性运算符PTR 指定位于其后的存储器操作数的类型CALLDWORDPTR BX 存储器操作数为4字节长MOVAL BYTEPTR SI 将SI指向的字节数送AL如有 VARDW1234HMOVAL VARMOVAL BYTEPTRVAR 其他运算符 方括号 在指令中用方括号表示存储器操作数 中的内容表示操作数的偏移地址 例如 MOVAX BX 段超越运算符 跟在段名之后 表示段超越 用来指明存储器操作数的段属性 例如 MOVAX ES DI 4 2伪指令 伪指令 指示性语句中的伪操作命令 在程序中的位置与指令性语句相同 介绍几种常用的伪操作指令 数据定义伪指令符号定义伪指令设定段寄存器伪指令过程定义伪指令宏命令伪指令模块定义与连接伪指令 数据定义伪指令的一般格式为 变量名 伪操作操作数 操作数 常用的数据定义伪操作有5种 DB Definebyte 定义字节类型的变量DW Defineword 定义字类型的变量DD Definedoubleword 定义双字类型的变量DQ Definequadword 定义四字类型的变量DT Definetenbytes 定义十字节类型的变量 4 2 1数据定义伪指令 例如 DATADB12 33HNUMDW100 5 88STRDB HELLO SUMDQ0011223344556677HDATADB3DUP 0 1 ABCDT1234567890H 连续10个字节的压缩BCD码 EQU用于给一个表达式赋予一个名字 名字EQU表达式表达式可以是一个常数 符号 数值表达式 地址表达式或指令助记符 如 CREQU0DHVAREQUTEN 2 1024ADREQUES BP DI 5 GOTOEQUJM 4 2 2符号定义伪指令 伪指令允许给符号赋一个常量或者结果是常量的表达式 EQU与 的区别 EQU不允许对同一个符号重复定义 伪指令允许对一个符号重复定义 如 VAR 10H VAR代表了数值10HVAR 25H VAR代表了数值为25H 为指令 段定义伪指令用来定义汇编语言程序中的逻辑段 其格式如下 段名 SEGMENT 段名 ENDSSEGMENT和ENDS成对出现 缺一不可 段名必需相同 不能与指令助记符和伪指令重名 4 2 3段定义伪指令 4 2 4设定段寄存器伪指令 该伪指令的一般格式为 ASSUME段寄存器名 段名 段寄存器名 段名 段寄存器名可以是CS DS ES或SS 在一个源程序中 ASSUME伪指令要放在可执行程序开始位置的前面 例如 CODESEGMENTASSUMECS CODE DS DATA ES EDATA SS STACKMOVAX DATAMOVDS AXMOVAX EDATAMOVES AXMOVAX STACKMOVSS AX CODEENDS汇编时 系统自动将代码段的段地址装入段寄存器CS 所以代码段不需要在程序中初始化 4 2 5过程定义伪指令 过程又叫子程序 在程序中重复使用的程序段可以用一个过程来定义 然后再用CALL指令调用 过程名PROC 过程体 RET过程名ENDP过程名为过程入口的符号地址 PROC和ENDP前的过程名必须相同 中间为过程体 NEAR为近调用即段内调用 只改变IP FAR为远调用 即段间调用 改变CS和IP 例 在一个子过程中又嵌套了一个过程 NAME1PROCFAR CALLNAME2 RETNAME2PROC RETNAME2ENDPNAME1ENDP 在程序中多次使用的程序段可以定义为宏指令 然后在需要时 通过宏指令名进行调用 宏调用 避免重复书写 宏指令名MACRO 宏体 ENDM宏指令名指出了宏的名称 同标识符的规定 形参为可选项 每个参数之间用 隔开 调用时用实际参数代替形式参数 4 2 6宏指令 使用方法宏程序在源程序中可以通过宏指令名进行调用 子程序要通过CALL指令进行调用 RET返回 占用内存宏指令简化了源程序 但不能简化目标程序 汇编後 每个调用处都会宏展开 占用内存 CALL指令产生相应的机器代码 节省内存 CALL执行过程 如现场保护 参数传递需要堆栈空间 执行时间CALL指令需要保护断点和恢复断点 宏不需要 宏程序用空间换取了时间 子程序用时间换取了空间 宏程序与子程序的差异 宏调用和宏展开的使用 源程序汇编后的宏展开ROTATEMACROSTART MOVAL DLROLAL 1 ROLAL 1ROLAL 1 ROLAL 1ROLAL 1 ROLAL 1ROLAL 1 ROLAL 1ENDM START MOVAL DLMOVAL BLROTATE ROLAL 1 ROLAL 1MOVAL BL ROLAL 1ROTATE ROLAL 1 程序可以有多个模块组成 用NAME伪指令为模块命名 用END结束源程序 标号 END 标号 END指示汇编程序停止汇编 后边的标号表示程序执行的开始地址 END伪指令将标号的段值和偏移地址分别提供给CS IP寄存器 4 2 7模块定义伪指令 DATASEGMENTTABLEDB12H 23H 34H 45H 56H DB67H 78H 89H 9AH 0FDHSUMDW DATAENDSSTACKSEGMENTDB50DUP STACKENDSCODESEGMENTASSUMECS CODE DS DATA ES DATA SS STACK 求从TABLE开始10个无符号字节数和 结果送SUM字单元 接上页 START MOVAX DATAMOVDS AXMOVES AXMOVAX STACKMOVSS AXLEASI TABLEMOVCX 10XORAX AXNEXT ADDAL SI ADCAH 0INCSIHLTLOOPNEXTCODEENDSMOVSUM AXENDSTART 4 3DOS功能调用 系统为用户提供了许多可供调用的功能模块 包括控制台输入输出 文件管理 系统测试 DOS DiskOperatingSystem 功能调用 是利用软中断INT21H指令实现的具有90多个子功能的中断服务程序 上电后已加载到内存 程序的入口也被放到中断矢量表中 在Pentium机上仍能运行 Windows98也继续提供所有的DOS功能调用 BIOS BasicInputandOutputSystem 基本I O系统功能调用 已固化在ROM中 包括系统测试 初始化引导程序 中断矢量装入程序或外部设备服务程序等 见附录C 所有的DOS功能调用都是通过指定功能号来调用INT21H的不同子功能 操作如下 送入口参数给指定寄存器 子程序的功能号 AH 执行INT21H指令 分析出口参数 下面介绍INT21H的几个最常用的功能 DOS系统功能调用的使用方法 功能号1 7 8都可以接收键盘输入的单字符 输入的字符以ASCII码形式放在AL中 7 8号功能无回显 1号功能有回显 例4 8 从键盘输入字符 Y 的程序段MOVAH 1 有回显键盘输入 功能号1 ALINT21H 接收一个键值 ALCMPAL Y 比较键入的字符是否 Y JEYES YES 1 键盘输入 键盘输入 功能号0AH可以接收键盘输入的字符串 字符串存放在存储器中 缓冲区调用功能前先将缓冲区的起始偏移地址预置入DX寄存器中 缓冲区总长度示意 1 2 3 最后的字节n 2 2 显示字符串 2 6显示单个字符 用9号功能显示以 结尾的一串字符 例4 10 从键盘上读入一串字符并显示出来 DATASEGMENTBUFDB50 最多键入50个字符ACTDB CHARSDB50DUP 20H DB DATAENDSCODESEGMENTASSUMECS CODE DS DATA 接上页 MOVDX OFFSETBUF 键入缓冲区MOVAH 0AH 字符串输入功能INT21H MOVDX OFFSETCHARS 字符串起始地址MOVAH 09H 字符串显示功能INT21H 3 返回到DOS 程序执行完 应该将控制权交给DOS操作系统 为了能使程序正常退出并返回DOS 可使用DOS系统功能调用的4CH号功能完成 MOVAH 4CH 功能号送AHINT21H 返回DOS或 MOVAX 4C00HINT21H 4 4汇编语言程序设计基础 4 4 1程序设计概述 1 程序质量的评价标准 好的程序 正确 好读 高效 节省资源 程序的正确性和完整性 程序的易读性 程序的快速和高效 程序所占内存的大小 尽量采用结构化 模块化的设计方法 语句后面加以注释 考虑程序的响应时间 实时处理能力 输入输出方式和结果占用内存的大小 汇编语言设计和其他高级语言设计一样可以分成以下几个步骤 分析问题 确定算法 画出程序流程图 编写源程序形成扩展名为ASM的源文件 经过汇编生成扩展名为OBJ的目标代码文件 经过链接生成扩展名为EXE的可执行文件 上机调试与修改 2 程序设计的基本步骤 利用编辑工具EDIT或记事本建立和修改扩展名为ASM的源程序文件 然后以ASCII码形式存入磁盘 利用宏汇编程序MASM EXE将源程序编译成扩展名为 OBJ的目标文件 利用链接程序LINK EXE对目标文件进行链接 形成一个可执行的浮动代码文件 文件的扩展名为 EXE 对程序进行检验和调试 3 具体操作 任何一个复杂的程序都是由简单的基本程序构成 都有以下基本程序结构 顺序程序 既无分支 无循环也无转移 分支程序 根据条件决定程序的执行 相当于高级语言的IF ELSE两个分支或CASE多分支语句 循环程序 用于反复执行的程序段 子程序 又称过程 相当于高级语言中的函数或过程 具有独立的功能模块 4 源程序的基本结构 顺序程序设计是指程序中的每一条指令是按指令的存放顺序执行的 没有分支 没有循环 4 4 2顺序程序设计 例4 11 有三个8位无符号数86H 34H和21H 编写S 86H 34H 21H的程序 分析 有三个数参加运算 所以要定义三个源操作数 由于他们的类型相同 可以只用一条定义伪指令 NUMDB86H 34H 21H定义一个变量存放结果 因为运算中有乘法 所以结果变量应伪16位 RESULTDW 两个乘数均为无符号数 所以选用指令MUL DATASEGMENTNUMDB86H 34H 21H 定义源操作数RESULTDW 定义结果存放单元DATAENDSCODESEGMENTASSUMECS CODE DS DATASTART MOVAX DATAMOVDS AX DS指向DATA段LEASI NUM NUM的偏移地址送SILEADI RESULT RESULT偏移地址送DIMOVAL SI AL 86H 程序 程序 MOVBL SI 1 BL 34HMULBL AX 86H 34HMOVBL SI 2 BL 21HMOVBH 0 BH 0SUBAX BX AX 86H 34H 21HMOV DI AX 结果S送RESULT单元MOVAH 4CH 返回DOSINT21HCODEENDSENDSTART 例4 12 内存自TABLE开始的连续16个单元中存放着0 15的平方值 称平方表 查表求DATA中任意数X 0 X 15 的平方值 并将结果放RESULT中 程序 DSEGSEGMENTTABLEDB0 1 4 9 16 25 36 49 64 81 100 121DB144 169 196 225 定义平方表DATADB RESULTDB 定义结果存放单元DSEGENDSSSEGSEGMENTSTACK STACK DW100DUP 定义堆栈空间SSEGENDSCSEGSEGMENTASSUMECS CSEG DS DSEG SS SSEG BEGIN MOVAX DSEG 初始化数据段MOVDS AXMOVAX SSEG 初始化堆栈段MOVSS AXLEABX TABLE 置数据指针MOVAH 0MOVAL DATA 取待查数ADDBX AX 查表MOVAL BX MOVRESUlT AL 平方数存RESULTCSEGENDSENDBEGIN 程序 4 4 3分支程序设计 JccL1cc不成立的程序段JMPL2L1 cc成立的程序段L2 后续语句 cc cc成立则 cc不成立则 后继语句 Y N 例4 13 编写程序 将数据区中以字节变量BUFFER为首地址的100个单元清零 分析 这是一个有两个分支的分支程序 00H送BUFFER起始的每个单元 每次判断计数值 100 不等则继续 否则停止 程序 DATASEGMENTBUFFERDB100DUP COUNTDB100 定义地址区长度DATAENDSSTACKSEGMENTDW32DUP STACKENDSCODESEGMENTASSUMECS CODE DS DATA SS STACK 程序 START MOVAX DATAMOVDS AX 初始化数据段MOVAX STACKMOVSS AX 初始化堆栈段MOVCL COUNT 置单元长度LEABX BUFFERAGAIN MOVBYTEPTR BX 0 100单元清零INCBXCMPBX CXINT21HJBAGAINCODEENDSMOVAH 4CHENDSTART 4 4 4循环程序 初始化 循环体 循环控制 N Y a 后判断条件 条件成立 L1 循环体JccL1 CX存入循环次数L1 循环体LOOPL1 初始化 循环控制 条件成立 循环体 N Y b 先判断条件 L2 JccL1循环体JMPL2L1 后续语句 注 cc为条件的否定 循环嵌套 在一个程序中 如果一个循环体内还包含另一个循环 称为双重循环 如果有几个这样的循环嵌套 称为多重循环 例如 一个从大到小的排序过程 例4 15 把从MEM单
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-河北-河北公路养护工一级(高级技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-江西-江西动物检疫员二级(技师)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-江苏-江苏动物检疫员一级(高级技师)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-广西-广西电工一级(高级技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西林木种苗工二级(技师)历年参考题库含答案解析
- 焊工入门基础知识培训课件
- 2025年事业单位工勤技能-安徽-安徽收银员五级(初级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-安徽-安徽农业技术员二级(技师)历年参考题库典型考点含答案解析
- 热轧钢管基础知识培训课件
- 2025年职业技能鉴定-茶艺师-茶艺师四级(中级工)历年参考题库含答案解析(5套)
- 《螺纹的种类和应用》课件
- 医学一等奖《白血病》课件
- 发现普洱茶的第一个医学实验报告
- 全自动血液细胞分析仪参数
- (完整版)过去完成时ppt
- 1输变电工程施工质量验收统一表式(线路工程)
- 养老护理员(技师、高级技师)知识考试复习题库(含答案)
- 学校安全“日管控、周排查、月总结”工作制度
- 机械原理课程设计15吨压片机设计
- 2023年五四青年节演讲比赛PPT担负青年使命弘扬五四精神PPT课件(带内容)
- 2023年义务教育音乐2022版新课程标准考试测试题及答案
评论
0/150
提交评论