




已阅读5页,还剩60页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章汇编语言程序设计 5 1程序设计概述5 2汇编 链接和运行程序5 3模块化的程序设计5 4汇编语言程序设计的基本方法 内容与要求 掌握汇编语言的基本语法 语句 操作数的寻址方式与汇编表示 常量与数值表达式 标号 变量与地址表达式 2 掌握顺序 分支 循环程序设计的基本方法和一般技巧 3 掌握子程序与堆栈技术 4 了解宏汇编和宏指令的应用 1 机器语言 MachineLanguage 机器语言是一种用二进制表示指令和数据 能被机器直接识别的计算机语言 它的缺点是不直观 不易理解和记忆 因此编写 阅读和修改机器语言程序都比较繁琐 但机器语言程序是计算机惟一能够直接理解和执行的程序 具有执行速度快 占用内存少等特点 5 1程序设计概述 2 高级语言 HighLevelLanguage 如果说机器语言是面向机器的 那么高级语言 如BASIC FORTRAN等 则是 面向过程 的语言 利用这些语言编程 程序员可以完全不考虑机器的结构特点 不必了解和熟记机器的指令系统 仅使用一些接近人们书写习惯的英语和数学表达式形式的语句去编制程序 这样编写的程序与问题本身的数学模型之间有着良好的对应关系 可在各种机器上通用 不同机器之间仅做少量修改 但是 这种用高级语言编写的源程序并不能在机器上直接执行 需要被翻译成对应的目标程序 即机器语言程序 机器才能运行 把具有这种翻译作用的程序称为解释程序或编译程序 见图5 1 由于高级语言程序是在未考虑机器的结构特点的条件下编写的 因而它就不能充分利用某种具体CPU所具有的某些特性 而通过编译或解释程序生成的目标程序往往比较冗长 占有较多的内存空间 执行时间也比较长 这就限制了它在某些场合下的运用 例如 实时的数据采集 检测和在线的实时控制等 往往要求程序的目标代码尽可能少占内存并有尽可能快的执行速度 在这些场合下 使用高级语言编写的程序常常不能满足要求 3 汇编语言 AssemblyLanguage 汇编语言是一种采用助记符表示的程序设计语言 即用助记符来表示指令的操作码和操作数 用标号或符号代表地址 常量或变量 助记符一般都是英文字的缩写 以方便人们书写 阅读和检查 实际上 用汇编语言编写的汇编语言源程序就是机器语言程序的符号表示 汇编语言源程序与其经过汇编所产生的目标代码程序之间有明显的一一对应关系 故也称汇编语言为符号语言 用汇编语言编写程序能够直接利用硬件系统的特性 如寄存器 标志 中断系统等 直接对位 字节 字寄存器或存储单元 I O端口进行处理 同时也能直接使用CPU指令系统和指令系统提供的各种寻址方式 编制出高质量的程序 这样的程序不但占用内存空间少 而且执行速度快 当然 由于源程序和所要解决的问题的数学模型之间的关系不够直观 使得汇编语言程序设计需要较多的软件开发时间 也增加了程序设计过程中出错的可能性 用汇编语言编写的源程序也需要翻译成目标程序才能被机器执行 这个翻译过程称为汇编 完成汇编任务的程序称为汇编程序 见图5 2 图5 2汇编程序的功能示意图 5 2汇编 链接和运行程序 5 3模块化的程序设计 举例 Createashellformodularprogrammingusingthecompletesegmentdefinition onefilewillcontainthemainmodule EXTRNSUBPROG1 FAREXTRNSUBPROG2 FARPUBLIC declaredataheretobeshared STSEGSEGMENTPARASTACK STACK DW64DUP STSEGENDS DTSEGSEGMENTPARA DATA definedatahereDTSEGENDS CODSEG ASEGMENTPARA CODE MAINPROCFARASSUMECS CODSEG A DS DTSEG SS STSEGMOVAX DTSEGMOVDS AX CALLSUBPROG1 callsubprogCALLSUBPROG2 callsubprog MOVAH 4CHINT21HMAINENDPCODSEG AENDSENDMAIN andinanotherfile SUBPROG1PROGRAM EXTRN declaredatathatisdefinedexternallyPUBLICSUBPROG1 declareproceduresthatarecalledexternallyCODSG BSEGMENTPARA CODE SUBPROG1PROCFARASSUMECS CODSG B theinstructionsthatperformtheworkofthe subroutinegohereRETSUBPROG1ENDSCODSG BENDSEND 注意 1 EXTRN在调用其他模块的过程中 必须用伪指令EXTRN告诉汇编程序EXTRN后的过程或变量不在此模块中 2 PUBLIC在说明变量或过程的模块中 必须用伪指令PUBLIC告诉链接程序此变量或过程能被其他模块所访问 3 CALL4 RET5 C LINKPROGRAM1 OBJ PROGRAM2 OBJ PROGRAMn OBJ 5 4汇编语言程序设计的基本方法5 4 1程序设计步骤1 问题的定义2 算法及表示方法3 选择适当的指令4 编写程序5 4 2结构化程序设计1 顺序结构2 分支结构3 循环结构4 子程序设计 程序设计概述 写任何程序最成功的方式是先人工的解决问题 1 找出算法 用结构IF THEN ELSE CASE REPEAT UNTIL WHILE DO FOR DO写算法 然后再将该算法翻译成一种合适的程序设计语言 结构化的程序设计 2 建立算法使用的数据结构 5 4 1程序设计步骤1 问题的定义仔细思考程序所要解决的问题 即用自然语言描述 做什么 以及程序做这些工作时的时序 如 1 从传感器读取温度值 2 加上调整因子 3 将结果存储在存储单元里 2 算法及表示方法用来表示程序设计问题的操作序列成为算法 即 怎样做 表示方法 1 流程图2 伪指令 3 选择适当的指令 按功能 一 数据传送类指令二 算术运算指令三 位操作指令四 串操作指令五 程序转移指令六 处理机控制指令 4 编写程序 从算法到程序 将算法转换成汇编语言 1 建立算法使用的数据结构1 数据在哪儿 存放在存储器还是在寄存器中 2 数据类型是什么 字节 字或双字 3 数据结构是什么 单个数据 一维 二维数组 4 数据为无符号数还是符号数 2 在代码段开始处写出变量 段寄存器 外围设备等所需要的初始化指令 初始化表 数据段寄存器DS堆栈段寄存器SS 附加段寄存器ES堆栈段指针SP8255A可编程并行端口8259A优先级中断控制器8254可编程计数器8251可编程串行端口初始化数据变量设置中断允许标志 3 选择实现算法中每一主要动作所需要的指令 并决定数据在这些指令中的存放形式 4 按照主要指令的要求 用MOV指令或其他的指令把数据送到正确的位置 例题 1 定义问题 已知某日的最高温度和最低温度 要求计算这一天的平均温度 2 算法设计 最高温度加最低温度将和除以2得到平均温度3 数据结构 DATASEGMENTHI TEMPDB92H 实际值可能是从传感器读取的数值LO TEMPDB52HAV TEMPDB DATAENDS4 初始化表 MOVAX DATAMOVDS AX 5 选择指令 选择算法中每一主要动作所需的指令 按功能选择指令 并决定数据在这些指令中的存放形式 最后则按照指令的要求 用MOV或其他的指令把数据传送的正确的位置 ADDdest source 查指令表并阅读细节ADCdest source dest dest source CFDIVsource DIV02immedmodenotallowed 6 编写程序 DATASEGMENTHI TEMPDB92HLO TEMPDB52HAV TEMPDB DATAENDS CODESEGMENTMAINPROCFARASSUMECS CODE DS DATAMOVAX DATAMOVDS AXMOVAL HI TEMPADDAL LO TEMPMOVAH 00HADCAH 00HMOVBL 02DIVBLMOVAV TEMP ALMOV4CHINT21HMAINENDPCODEENDSENDMAIN 5 4 2结构化程序设计1 顺序结构ReadtemperaturefromsensorAddcorrectionfactorof 7Storecorrectedvalueinmemory 例题 1 定义问题 将ASCII码 47 转换成压缩BCD码 2 算法设计 转换第一个ASCII码到非压缩BCD数 转换第二个ASCII码到非压缩BCD数 将第一个BCD数的低半字节左移四位 在一个字节中组合两个BCD数 3 数据结构 DATASEGMENTVAL ASCDB 47 VAL BCDDB DATAENDS 4 初始化表 MOVAX DATAMOVDS AX5 选择指令 1 用AND指令完成屏蔽操作 ANDdest sourceASCII400110100屏蔽00001111结果000001002 用循环位移指令左移四位 ROLdest CL3 用OR指令组装字节ORdest sourceORAL BL 6 编写程序 KeyASCIIUnpackedBCDPackedBCD434000001007370000011101000111 47H ORG0010HVAL ASCDB 47 VAL BCDDB MOVAX WORDPTRVAL ASCANDAX 0F0FHXCHGAH ALMOVCL 4ROLAH CLORAL AHMOVVAL BCD AL 2 分支结构 IF THEN ELSE 问题定义 有一台控制印刷线路板制造机器的8086微机 其作用是检查温度传感器 然后按照从传感器读到的温度值打开绿灯或黄灯 如果温度低于300C 则打开黄灯以告诉操作员溶液的温度不够 如果温度高于或等于300C 则打开绿灯 算法设计 输入温度值IF温度 300CTHEN打开黄灯ELSE打开绿灯读传感器 3 数据结构 AL INAL DX 4 初始化表 MOVDX 0FFFEH pointDXtoportcontrolMOVAL 99H registerandloadcontrolwordOUTDX AL toinitializeports5 选择指令 INCMPJccOUT6 编写程序 PORTS UseFFF8H temperatureinput FFFAH lampcontroloutput yellow bit0 green bit1 CODESEGMENTASSUMECS CODE initialize8086portFFFAHasoutputport FFF8Hasinput MOVDX 0FFFEH pointDXtoportcontrolMOVAL 99H registerandloadcontrolwordOUTDX AL toinitializeportsMOVDX 0FFF8HINAL DXCMPAL 30JBYELLOW iftemp 30thenlightyellow lampJMPGREEN elselightgreenlamp YELLOW MOVAL 01H loadcodetolightyellowlampMOVDX 0FFFAH pointDXatoutputportOUTDX AL sendcodetolightyellowlampJMPEXIT gotonextmainlineinstructionGREEN MOVAL 02HMOVDX 0FFFAHOUTDX ALEXIT MOVDX 0FFFCH nextmainlineinstructionINAL DX readphsensorCODEENDSEND 输入温度值IF温度 300CTHEN打开绿灯ELSE打开黄灯读传感器 CMPAL 30JAEGREENJMPYELLOWGREEN MOVAL 02HMOVDX 0FFFAHOUTDX ALJMPEXITYELLOW MOVAL 01HMOVDX 0FFFAHOUTDX ALEXIT MOVDX 0FFFCHINAL DXCODEENDSEND 2 多重IF THEN ELSE结构 IFconditionTHENstatement s 1ELSEIFconditionTHENstatement s 2ELSEstatement s 3 问题定义 有一台控制印刷线路板制造机器的8086微机 其作用是检查温度传感器 然后按照从传感器读到的温度值打开绿灯 黄灯或红灯 如果温度低于300C 则打开黄灯以告诉操作员溶液的温度不够 如果温度高于或等于300C但低于400C 则打开绿灯 否则 打开红灯 算法设计 输入温度值IF温度 300CTHEN打开黄灯ELSEIF温度 400CTHEN打开绿灯ELSE打开红灯读传感器 CODESEGMENTASSUMECS CODEMOVDX 0FFFEHMOVAL 99HOUTDX ALMOVDX 0FFF8HINAL DXMOVDX 0FFFAHCMPAL 30JBYELLOWCMPAL 40JBGREEN RED MOVAL 04HOUTDX ALJMPEXITYELLOW MOVAL 01HOUTDX ALJMPEXITGREEN MOVAL 02HOUTDX ALEXIT MOVDX 0FFFCHINAL DXCODEENDSEND 3 循环结构WHILE DO LOOPWHILEconditionDOstatement s WHILEnot24samplesDOReaddatasamplefromsensorAddcorrectionfactorof 7StoreresultinmemoryWait1hour 例1 定义问题假设在一个化学处理控制过程中 只有当溶液温度上升到1000C后 才能继续进行下一步的处理 如果溶液温度低于1000C 则需打开一个加热器并等待温度上升到1000C 如果溶液温度等于或者高于1000C 则继续进行下一步的处理 由于打开加热器前需要测设条件 温度 因此WHILE DO结构适合于解决这样的问题 当然如果溶液的温度因过度加热而足够高时 则不需要打开加热器 2 算法设计 a 输入温度值WHILE温度 100DO关闭加热器打开加热器 3 数据结构AL INAL DX 4 初始化表MOVDX 0FFFEH initializeportFFFAHforoutputMOVAL 99H andportFFF8HforinputOUTDX AL5 选择指令INCMPJccOUT 6 编写程序 ports usesFFF8Hfortemperaturedatainput FFFAHforheatercontroloutput 0 off 1 onCODESEGMENTASSUMECS CODEMOVDX 0FFFEH initializeportFFFAHforoutputMOVAL 99H andportFFF8HforinputOUTDX ALTEMP IN MOVDX 0FFF8H pointatinputportINAL DX inputtemperauredataCMPAL 100 iftemp 100thenJAEHEATER OFF turnheateroff MOVAL 01H elseloadcodeforheateronMOVDX 0FFFAH pointDXtooutputportOUTDX AL turnheateronJMPTEMP IN WHILEtemp 100read tempagainHEATER OFF MOVAL 00H loadcodeforheateroffMOVDX 0FFFAH pointDXtooutputportOUTDX AL turnheateroffCODEENDSEND a 加热器控制程序清单 算法设计 b 输入温度值WHILE温度 100DO打开加热器关闭加热器 TEMP IN MOVDX 0FFF8HINAL DXCMPAL 100JBHEATER ONJMPHEATER OFFHEATER ON MOVAL 01HMOVDX 0FFFAHOUTDX ALJMPTEMP INHEATER OFF MOVAL 00HMOVDX 0FFFAHOUTDX ALCODEENDSEND 3 循环结构 REPEAT UNTILREPEAT动作UNTIL某些条件实现REPEATGetdatasamplefromsensorAddcorrectionof 7StoreresultinamemorylocationWait1hourUNTIL24samplestaken 例1 1 问题定义 许多与微机接口的系统的工作是首先在并行信号线上输出数据 然后再输出以单独信号用以指示有效数据在并行线上 这个数据准备信号通常被称为选通 一个ASC 编码计算机键盘就是一种选通数据系统的例子 下图说明了这种键盘的并行数据线和选通线是怎样与微机端口连接的 当在键盘上敲入某个键时 键盘中的电路将检测敲入的键 然后将该键的ASC 码发送到连接端口FFF8H的8位数据线上 当经过一段时间数据已驻留在这些数据线上后 键盘中的电路发出一个压键选通信号 以指示8位数据线上的数据已经有效 选通信号可以是有效高信号或有效低信号 对于本例假设一个有效ASC 码已在并行数据线上时 选通信号趋向于高 2 算法设计REPEAT读键盘选通信号UNTIL选通信号 1从键盘读ASCII码 3 数据结构AL INAL DX 4 初始化表MOVDX 0FFFAH pointDXatstrobeport5 选择指令INJccIN6 编写程序 usesFFFAH Strobesignalinp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年宠物针灸安全操作面试题及答案
- 草坪园艺技术使用中常见问题解决大全
- 2025年护卫犬训练理论模拟题库
- 2025年安全员考试备考冲刺题解
- 2025年智能制造工程师面试技巧与答案
- 2025年安全员安全生产法规试题
- 2025年事务局培训管理岗位面试题库答案
- 2025年农村经济管理实务技能考核试卷及答案解析
- 2025年金融业务拓展经理综合能力测验试卷及答案解析
- 2025年地震观测员技能鉴定初级模拟题
- 节假日值班人员安排管理制度
- 2024年化工行业典型生产安全事故警示
- (正式版)DB44∕T 2683-2025 《老年肌少症中西医结合健康管理规范》
- 2025年农电招聘面试题目及答案
- 领导小组管理办法
- 01 华为采购管理架构(20P)
- 基孔肯雅热的个案护理
- GA/T 2167-2024移民管理机构对外窗口设置规范
- 拥抱大赛活动方案
- DeepSeek在教育和学术领域的应用场景与案例(上中下合集)
- 深圳市生产安全事故调查处理工作规范
评论
0/150
提交评论