




已阅读5页,还剩88页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章汇编语言程序设计汇编语言程序的步骤 1 明确任务 确定算法 2 绘流程图 3 根据流程图编写汇编语言程序 4 上机调试程序 图5 1标准流程图符号 编译的过程 宏汇编程序 编译工具链接程序 生成目标代码MASM EXE LINK EXE 5 1汇编语言程序的上机过程1 源文件的建立和汇编 1 建立源程序文件 2 汇编源程序文件汇编程序主要功能 检查源程序中的语法错误并给出出错信息 产生目标文件 列表文件和对照文件 展开宏指令 汇编操作过程 设在当前C盘上已经建立了一个扩展名为ASM的源程序文件MYASM 汇编时发出如下命令 C MASMMYASM 或MASMMYASM ASM 具体的三个输入提示行显示如下 ObjectFilename MYASM OBJ SourceListing NUL LST 可打入源文件名或省略 CrossReference NUL CRF 可打入源文件名或省略 汇编程序对源文件进行汇编 若无错误信息则显示如下结果 0WarningErrors0SevereErrors 2 目标文件的链接连接软件LINK的功能 1 找到要连接的所有目标文件 2 确定所有段的地址值 3 确定所有浮动地址和外部符号所对应的存储地址 4 生成 EXE可执行文件 连接软件为LINK EXE 其过程如下 设源文件MYASM ASM已经由汇编软件汇编后生成MYASM OBJ 其连接命令为 C LINKMYASM或LINKMYASM OBJ则在屏幕上显示连接软件的版本号和三个输入提示行 三个输入提示行显示如下 RunFile MYASM EXE ListFile NUL MAP Libraries LIB 3 执行文件的调试 5 2顺序结构程序设计 例5 1用8086CPU的指令实现两个32位无符号数乘法的程序设计 1 明确任务 确定算法 2 绘流程图 图5 3 设置地址指针 AX 被乘数的低16位B SI 乘数的低16位D 部分积1 B D 部分积1存入缓冲区 AX 被乘数的高16位A 部分积2 A D 部分积1的高16位 部分积2的低16位 进位加至部分积2的高16位 结果存入缓冲区 部分积3 B C 与前面结果的对应16位相加 保存进位 部分积4 A C 恢复进位 部分积4与前面的和相加 保存结果到缓冲区 DI 乘数的高16位C 1 1 结束 开始 图5 3例5 1流程图 3 根据流程图编写汇编语言程序1NAME32BITMULTIPLY2DATASEGMENT3MULNUNDW0000 0FFFFH 0000 40FFFH 4DUP 5DATAENDS6STACKSEGMENTPARASTACK STACK 7DB100DUP 8STACKENDS9CODESEGMENT10ASSRMECS CODE DS DATA 11SS STACK ES DATA12MAINPROCFAR13START PUSHDS14MOVAX 015PUSHAX16MOVAX DATA 17MOVDS AX18MOVES AX19LEABX MULNUM20MULU32 MOVAX BX 21MOVSI BX 4 22MOVDI BX 6 23MULSI24MOV BX 8 AX25MOV BX 0AH DX26MOVAX BX 2 27MULSI28ADDAX BX 0AH 29ADCDX 030MOV BX 0AH AX31MOV BX 0CH DX32MOVAX BX 33MULDI 34ADDAX BX 0AH 35ADCDX BX 0CH 36MOV BX 0AH AX37MOV BX 0CH DX38PUSHF39MOVAX BX 2 40MULDI41POPF42ADCAX BX 0CH 43ADCDX 044MOV BX 0CH AX45MOV BX 0EH DX46RET47MAINENDP48CODEENDS49ENDSTART 例5 2用查表的方法将一位十六进制数转换成与它相应的ASC 码 1 明确任务 确定算法 2 绘流程图 图5 4 3 根据流程图编写汇编语言程序DATASEGMENTTABLEDB30H 31H 32H 33H 34H 35H 36H 37HDB38H 39H 41H 42H 43H 44H 45H 46HHEXDB ASCIDB DATAENDSTACK1SEGMENTPARASTACKDW20HDUP 0 TOPLABELWORDSTACK1ENDSCOSEGSEGMENTASSUMECS COSEG DS DATA SS STACK1BEING MOVAX DATAMOVDS AX MOVAX STACK1MOVSS AXMOVSP OFFSETTOPMOVSI OFFSETTABLEMOVAH 0MOVAL HEXADDSI AXMOVAL SI MOVASCI ALMOVAH 4CHINT21HCOSEGENDSENDBEING 5 3分支结构程序设计 5 3 1二分支结构例5 3在长度小于256的字符串中分别统计数字 字母和其它字符的个数 1 明确任务 确定算法 2 绘流程图 3 根据流程图编写汇编语言程序DATASEGMENTBUFDBNDB07H 2AH 47H 6AH 96HNUMDB3DUP DATAENDSCODESEGMENTMAINPROCFARASSUMECS CODE DS DATASTART PUSHDSSUBAX AXPUSHAXMOVAX DATAMOVDS AXMOVSI OFFSETBUFMOVCH SI MOVCL CHMOVBX 0INCSILP MOVAH SI CMPAH 30HJLNEXTCMPAH 39HJGABCINCBHJMPNEXTABC CMPAH 41HJLNEXTCMPAH 5AHJGNEXTINCBLNEXT INCSI DECCHJNZLPMOVSI OFFSETNUMMOV SI BHMOV SI 1 BLSUBCL BHSUBCL BLMOV SI 2 CLRETMAINENDPCODEENDSENDSTART 例5 4求补码数的绝对值 1 明确任务 确定算法 2 绘流程图 图5 7 3 根据流程图编写汇编语言程序STACKSEGMENTSTACKDW300DUP TOPLABELWORDSTACKENDSDATASEGMENTXADRDW DATAENDSCODESEGMENTMAINPROCFARASSUMECS CODE DS DATA SS STACKMOVAX STACKMOVSS AXMOVSP OFFSETTOP 堆栈的初始化过程START PUSHDS MOVAX 0PUSHAX 设定返回接口MOVAX DATAMOVDS AXMOVAX XADRANDAX AXJNSDONENEGAXMOVXADR AXDONE RETMAINENDPCODEENDSENDSTART 5 3 2多分支结构1 条件逐次测试法例5 5编程实现使键盘上A B F六个字母键成为6个输入命令 使之分别对应6个具有不同算法的控制子程序 1 明确任务 确定算法 2 绘流程图 图5 8 3 根据流程图编写汇编语言程序MOVAH lINT21HCMPAL A JEPACMPAL B JEPB CMPAL F JEPFHLTPA PB PF 2 列表跳转法 1 根据表内地址跳转法例5 6利用表内地址跳转法来实现例5 5的要求1 明确任务 确定算法 2 绘流程图 图5 10 3 根据流程图编写汇编语言程序ADATASEGMENTBASEDWPA PB PC PD PE PFKEYDB ADATAENDSASTACKSEGMENTPARASTACK STACK DW100DUP TOPLABELWORDASTACKENDSACODESEGMENTASSUMECS ACODE DS ADATA SS ASTACKMAINPROCFARSTART PUSHDSMOVAX 0PUSHAXMOVAX ADATAMOVDS AXMOVAX ASTACK MOVSS AXMOVSP OFFSETTOPLOP MOVAH 1INT21HCMPAL 41HJBLOPCMPAL 46HJALOPSUBAL 41HMOVBX OFFSETBASEMOVAH 0ADDAL ALADDBX AXJMPWORDPTR BX RETMAINENDPCODEENDSENDSTART 2 根据表内指令跳转法例5 7利用表内指令跳转法来实现例5 5的要求1 明确任务 确定算法 2 绘流程图 图5 12 3 根据流程图编写汇编语言程序DATASEGMENTBASEDBE9 PAL PAH E9 PBL PBH E9 PCL PCHDBE9 PDL PDH E9 PEL PEH E9 PFL PFHDATAENDS LOP MOVAH 1INT21HCMPAL 41HJBLOPCMPAL 46HJALOPSUBAL 41HMOVAH 0 MOVBL ALADDAL ALADDAL BLMOVBX OFFSETBASEADDBX AXJMPBX 3 根据表内关键字跳转法例5 8利用表内关键字跳转法实现例5 5的要求1 明确任务 确定算法 图5 13关键字跳转表 2 绘流程图 图5 14 图5 14流程图 3 根据流程图编写汇编语言程序BDATASEGMENTBASEDB41HDWPADB42HDWPBDB43HDWPCDB44HDWPDDB45HDWPEDB46HDWPFBDATATENDS LOP MOVAH 1INT21HCMPAL 41HJBLOPCMPAL 46HJALOPMOVSI OFFSETBASENEXT CMPAL SI JEDOADDSI 3JMPNEXTDO MOVBX WORDPTR SI 1 JMPWORDPTR BX 5 4循环结构程序设计5 4 1循环程序的组成与结构形式两种循环程序结构 WHILE DO结构和DO UNTIL结构 例5 9试编写一程序统计出某一内存单元中 1 的个数 并将结果存入RESULT单元中 1 明确任务 确定算法 2 绘流程图 图5 17 3 根据流程图编写汇编语言程序DATASEGMENTXDADW3AD8HRESULTDW DATAENDSCODESEGMENTMAINPROCFARASSUMECS CODE DS DATASTART PUSHDSMOVAX 0PUSHAXMOVAX DATAMOVDS AXMOVCX 0 MOVAX XDAAGAIN ANDAX AXJZEXITSHLAX 1JNCNEXTINCCXNEXT JMPAGAINEXIT MOVRESULT CXRETMAINENDPCODEENDSENDSTART 5 4 2循环程序的控制方法 1 计数法计数法分为正计数法和倒计数法 例5 10编制程序将两个n字节的无符号数相加 结果存入SUM开始的n 1字节存储区中 1 明确任务 确定算法 2 绘流程图 图5 18 3 根据流程图编写汇编语言程序SSEGSEGMENTPARASTACK SSEG STACKDB150DUP SSEGENDSDATASEGMENTDATA1DBNDUP DATA2DBNDUP SUMDBN 1DUP DATAENDSCSEGSEGMENTASSUMECS CSEG DS DATA SS SSEGMAINPROCFARSTART PUSHDSMOVAX 0PUSHAXMOVAX DATAMOVDS AXMOVAX SSEG MOVSS AXMOVSP SIZESTACKLEABX DATA1LEASI DATA2LEADI SUMMOVCX NCLCAGAIN MOVAL SI ADCAL BX MOV DI ALINCBXINCSIINCDILOOPAGAINADCBYTEPTR DI 0RETMAINENDPCSEGENDSENDSTART 2 条件控制法条件控制法 利用已知的条件对循环进行控制的方法 分两种情况 如循环最大次数已知 但有可能使用一些特征或条件使循环提前结束 循环次数未知 利用条件中的特征结束循环 例5 11编制程序用单字符输出的DOS功能调用向屏幕输出以 结束的字符串 1 明确任务 确定算法 2 绘流程图 图5 19 图5 19流程图 3 根据流程图编写汇编语言程序DSEGSEGMENTDATADB HOWAREYOU DSEGENDSSSEGSEGMENTPARASTACK KEG STACKDB200DUP 0 SSEGENDSCSEGSEGMENTMAINPROCFARASSUMECS CSEG DS DSEG SS SSEGSTART MOVAX DSEGMOVDS AXMOVAX SSEGMOVSS AX MOVSP SIZESTACKLEASI DATAAGAIN MOVDL SI CMPDL JZENDOUTMOVAH 2INT21HINCSIJMPAGAINENDOUT RETMAINENDPCSEGENDSENDSTART 3 逻辑尺控制法例5 12设有16个内存单元需要修改 修改规律是 第1 3 6 9 12号单元均加5 其余单元均加10 试用循环结构编程实现 1 明确任务 确定算法 2 绘流程图3 根据流程图编写汇编语言程序 DATASEGMENTXDADB16DUP LRULERDW0A490H rulercontrolerDATAENDSCODESEGMENTMAINPROCFARASSUMECS CODE DS DATASTART PUSHDSXORAX AXPUSHAXMOVAX DATAMOVDS AXMOVBX 0MOVCX 10H MOVDX LRULERAGAIN MOVAX XDA BX SHLDX 1JCADD5ADDAX 10JMPSHORTRESULTADD5 ADDAX 5RESULT MOVXDA BX AXINCBXLOOPAGAINRETMAINENDPCODEENDSENDSTART 5 4 3多重循环程序设计注意以下几点 1 设置好各重循环的初始状态 确保各重循环的正常运行 2 注意内外循环嵌套 3 防止死循环现象 例5 13设某一数组的长度为N 各元素均为字数据 试编制一个程序使该数组中的数据按照从小到大的次序排列 1 明确任务 确定算法 2 绘流程图3 根据流程图编写汇编语言程序 ADATASEGMENTDATADWNDUP ADATAENDSASTACKSEGMENTSTACK STACK DB100DUP TOPLABELWORDASTACKENDSACODESEGMENTASSUMECS ACODE DS ADATA SS ASTACKMAINPROCFARSTART MOVAX ASTACKMOVSS AXMOVSP OFFSETTOPPUSHDSSUBAX AXPUSHAXMOVAX ADATAMOVDS AXMOVBX 0 MOVCX NDECCXL1 MOVDX CXL2 MOVAX DATA BX CMPAX DATA BX 2 JBECONTIXCHGAX DATA BX 2 MOVDATA BX AXCONTI ADDBX 2LOOPL2MOVCX DXMOVBX 0LOOPL1RETMAINENDPACODEENDSENDSTART 5 5子程序结构程序设计子程序 是汇编语言中多次使用的一个相对独立的程序段 子程序结构程序设计主要包括三个方面 即 子程序的定义与调用 子程序的参数传送 子程序嵌套与递归调用5 5 1子程序的定义与调用1 子程序的定义子程序说明包括四个方面 1 描述该子程序模块的名称 功能及性能 2 说明子程序中用到的寄存器和存储单元 3 指出子程序的入口参数和出口参数 4 子程序中调用其它子程序的名称 例5 14定义一个显示两位十六进制数的子程序程序说明 名称 DISPP 功能 显示两位十六进制数 所用寄存器CX DX 人口参数 AL存放两位十六进制数 出口参数 无 调其它子程序 DISP1 子程序 DISPPPROCNEARPUSHDXPUSHCXMOVDL ALMOVCL 4ROLDL CLANDDL 0FHCALLDISP1MOVDL ALANDDL 0FHCALLDISP1POPCXPOPDXRETDISPPENDP 2 子程序的调用和返回例5 15编制显示四位十六进制数的子程序1 明确任务 确定算法 2 绘流程图3 根据流程图编写汇编语言程序 DISP4PROCNEARPUSHBXPUSHCXPUSHDXPUSHAXMOVAL AHCALLDISP2POPAXCALLDISP2POPDXPOPCXPOPBXRETDISP4ENDPDISP2PROCNEARMOVBL ALMOVDL ALMOVCL 4 ROLDL CLANDDL 0FHCALLDISP1MOVDL BLANDDL 0FHCALLDISP1RETDISP2ENDPDISP1PROCORDL 30HCMPDL 3AHJBDDDADDDL 07HDDD MOVAH 2INT21HRETDISP1ENDP 5 5 2子程序的参数传送实现参数传送分为四种 寄存器传送 固定缓冲区传送 地址表传送和堆栈传送 1 寄存器传送寄存器传送是一种最常用 最简单的参数传送实现方法 2 固定缓冲区传送固定缓冲区传送方法是采用存储器来实现参数传送的 它与寄存器传送类似 例5 16已知数组由100个字数据组成 试编程求出这个数组元素之和 1 明确任务 确定算法 2 绘流程图 图5 23 3 根据流程图编写汇编语言程序DATASEGMENTARYDW100DUP SUMDW DATAENDSCODESEGMENTASSUMECS CODE DS DATASTART MOVAX DATAMOVDS AXCALLRADDMOVAH 4CHINT21H 求和子程序RADDPROCNEARPUSHAXPUSHBXPUSHCXPUSHDXLEABX ARY MOVCX 100XORAX AXMOVDX AXCL1 ADDAX BX JNCCL2INCDXCL2 ADDBX 2LOOPCL1MOVSUM AXMOVSUM 2 DXPOPDXPOPCXPOPBXPOPAXRETRADDENDPCODEENDSENDSTART 3 地址表传送地址表传送 是采用存储器来实现参数传送的 例5 17已知数组A由100个字数据组成 数组B由50个字数据组成 试编程分别求出这两个数组元素之和 1 明确任务 确定算法 2 绘流程图3 根据流程图编写汇编语言程序 DATASEGMENTCNTADW100ARYADW100DUP SUMADD CNTBDW50ARYBDW50DUP SUMBDD TABLEDW3DUP DATAENDSCODESEGMENTASSUMECS CODE DS DATASTART MOVAX DATAMOVDS AXMOVAX OFFSETCNTAMOVTABLE AXMOVAX OFFSETARYAMOVTABLE 2 AX MOVAX OFFSETSUMAMOVTABLE 4 AXMOVSI OFFSETTABLECALLRADDMOVAX OFFSETCNTBMOVTABLE AXMOVAX OFFSETARYBMOVTABLE 2 AXMOVAX OFFSETSUMBMOVTABLE 4 AXMOVSI OFFSETTABLECALLRADDMOVAH 4CHINT21HRADDPROCNEARPUSHAXPUSHBX PUSHCXPUSHDXPUSHDIMOVBX SI MOVCX BX MOVBX SI 2 MOVDI SI 4 XORAX AXMOVDX AXCL1 ADDAX BX JNCCL2INCDXCL2 ADDBX 2LOOPCL1MOV DI AXMOV DI 2 DX POPDIPOPDXPOPCXPOPBXPOPAXRETRADDENDPCODEENDSENDSTART 4 堆栈传送堆栈传送 是采用存储器来实现参数传送的 例5 18已知数组A由100个字数据组成 数组B由50个字数据组成 要求用堆栈传送参数的子程序结构编程 试分别求出这两个数组元素之和 1 明确任务 确定算法 2 绘流程图3 根据流程图编写汇编语言程序 DATASEGMENTCNTADW100ARYADW100DUP SUMADD CNTBDW50ARYBDW50DUP SUMBDD DATAENDSCSEGSEGMENTASSUMECS CSEG DS DATASTART MOVAX DATAMOVDS AXMOVAX OFFSETARYAPUSHAXMOVAX OFFSETCNTA PUSHAXMOVAX OFFSETSUMAPUSHAXCALLNEARPTRRADDMOVAX OFFSETARYBPUSHAXMOVAX OFFSETCNTBPUSHAXMOVAX OFFSETSUMBPUSHAXCALLNEARPTRPADDMOVAH 4CHINT21HRADDPROCNEARPUSHBP MOVBP SPPUSHAXPUSHDXPUSHCXPUSHSIPUSHDIMOVSI BP 8 MOVDI BP 6 MOVCX DI MOVDI BP 4 XORAX AXMOVDX AXNEXT ADDAX SI JNCNOCAYINCDX NOCAY ADDSI 2LOOPNEXTMOV DI AXMOV DI 2 DXPOPDIPOPSIPOPCXPOPDXPOPAXPOPBPRET6RADDENDPCSEGENDSENDSTART 5 5 3子程序嵌套与递归调用1 子程序嵌套子程序嵌套 是指一个子程序的内部再调用其他子程序 图5 27子程序嵌套 2 递归子程序递归子程序 是这种具有递归调用性质的子程序 递归子程序必须注意以下两点 1 注意现场的保护 2 注意递归结束条件 例5 19计算S X Y 其中X Y的值在0 8之间 1 明确任务 确定算法 2 绘流程图 3 根据流程图编写汇编语言程序DATASEGMENTXYVALDW SVALDW0DATAENDSSTACK1SEGMENTPARASTACK STACK TOPDW64HDUP 0 STACK1ENDSCODESEGMENTASSUMECS CODE DS DATA SS STACK1START MOVAX DATAMOVDS AXMOVAX STACK1MOVSS AXMOVSP SIZETOP MOVSI OFFSETXYVALMOVBX SI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度跨境电商平台运营合作协议书
- 2025年老旧小区改造安置房维修基金结算及使用规范合同
- 2025年度高端商务车辆租赁与代销服务框架合同
- 2025年节能环保型UPS电源系统供应与能源管理服务合同
- 2025年采矿权质押融资与新能源矿产一体化开发服务协议
- 2025年生态环保建材区域独家代理合作协议
- 2025年企业设备保险权益转移与责任承接合同
- 2025年度多式联运物流中心租赁合同及供应链金融服务
- 2025年孕妇离婚后子女抚养及教育全面保障协议
- 2025年复合材料管道安装与玻璃钢防腐专业施工资质认证服务协议
- 2025年全国特种设备观光车N1证理论考试笔试试题(含答案)
- 1.1什么是新媒体 课件(共17张)-《新媒体营销》同步教学(北京出版社)
- 林地托管合同协议
- 2020-2025年中国智慧仓储行业市场调查研究及投资战略咨询报告
- 课题申报书:人工智能背景下高职艺术设计专业人才培养模式改革与创新研究
- 教育行业服务意识培训
- 韦尼克脑病治疗
- 质量异常应对策略与培训实践
- 秘书工作中的职业发展规划研究论文
- 《高处作业安全培训》课件
- 垃圾清运合同范本模板建筑
评论
0/150
提交评论