




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章汇编语言程序设计教学内容5.1汇编语言程序的上机过程。5.2顺序结构程序设计。5.3分支结构程序设计。5.4循环结构程序设计。5.5子程序结构设计。教学目标1理解汇编语言程序的建立与运行的方法。2掌握顺序结构程序设计方法。3掌握分支结构程序设计方法。4掌握循环结构程序设计方法。5掌握子程序结构程序设计方法。,重点内容1汇编语言程序的上机过程。2顺序结构程序设计。3分支程序设计。4循环程序设计。5子程序结构程序设计。难点内容1分支程序设计。2循环程序设计。3子程序结构程序设计。学时数8学时,汇编语言程序的步骤:(1)明确任务,确定算法。(2)绘流程图。(3)根据流程图编写汇编语言程序。(4
2、)上机调试程序。,5.1汇编语言程序的上机过程1、源文件的建立和汇编(1)建立源程序文件(2)汇编源程序文件汇编程序主要功能:检查源程序中的语法错误并给出出错信息。产生目标文件,列表文件和对照文件。展开宏指令。,汇编操作过程:设在当前C盘上已经建立了一个扩展名为ASM的源程序文件MYASM,汇编时发出如下命令:C:MASMMYASM(或MASMMYASM.ASM)具体的三个输入提示行显示如下:ObjectFilenameMYASM.OBJ:SourceListingNUL.LST:(可打入源文件名或省略)CrossReferenceNUL.CRF:(可打入源文件名或省略)汇编程序对源文件进行汇
3、编,若无错误信息则显示如下结果:0WarningErrors0SevereErrors,2.目标文件的链接连接软件LINK的功能:1)找到要连接的所有目标文件;2)确定所有段的地址值;3)确定所有浮动地址和外部符号所对应的存储地址;4)生成.EXE可执行文件。连接软件为LINK.EXE,其过程如下:设源文件MYASM.ASM已经由汇编软件汇编后生成MYASM.OBJ,其连接命令为:C:LINKMYASM或LINKMYASM.OBJ则在屏幕上显示连接软件的版本号和三个输入提示行,三个输入提示行显示如下:RunFileMYASM.EXE:ListFileNUL.MAP:Libraries.LIB:
4、3.执行文件的调试(略),5.2顺序结构程序设计,例5.1用8086CPU的指令实现两个32位无符号数乘法的程序设计。1)明确任务,确定算法。2)绘流程图(图5.3)难点:8086指令系统中没有32位乘法指令,但可以用以下方法实现。abcd=(a65536+b)(c65536+d)=ac6553665536+ad65536+bc65536+bd=ac1616+ad16+bc16+bd,3)根据流程图编写汇编语言程序NAME32BITMULTIPLY2DATASEGMENT3MULNUNDW0000,0FFFFH,0000,40FFFH,4DUP(?)DATAENDS6STACKSEGMENTP
5、ARASTACKSTACK7DB100DUP(?)STACKENDS,9CODESEGMENT10ASSRMECS:CODE,DS:DATA,SS:STACK,ES:DATA12MAINPROCFAR13START:PUSHDS;为返回设置断点地址14MOVAX,0PUSHAX16MOVAX,DATA;取段基地址,DATA是段名,立即寻址17MOVDS,AX18MOVES,AX19LEABX,MULNUM;取偏移量20MULU32:MOVAX,BX;取b21MOVSI,BX+4;取d22MOVDI,BX+6;取c,23MULSI;b*d24MOVBX+8,AX;存b*d25MOVBX+0AH,
6、DX26MOVAX,BX+2;取a27MULSI;a*d28ADDAX,BX+0AH;存(a*d16)+b*d29ADCDX,030MOVBX+0AH,AX31MOVBX+0CH,DX32MOVAX,BX;再取b33MULDI;b*c34ADDAX,BX+0AH;存(b*c16)+(9a*d16+b*d)35ADCDX,BX+0CH36MOVBX+0AH,AX37MOVBX+0CH,DX,38PUSHF;保存可能的进位位39MOVAX,BX+2;取a40MULDI;a*c41POPF;恢复可能的进位位42ADCAX,BX+0CH;存(a*c1616)+43ADCDX,044MOVBX+0CH,
7、AX45MOVBX+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?DATAENDSSTACK1SEGMENTPARASTACKDW20HDUP(0)TOPLABELWORDSTACK1ENDS,COSEGSEGMENTASSUME
8、CS:COSEG,DS:DATA,SS:STACK1BEING:MOVAX,DATA;取段基地址,DATA是段名,立即寻址MOVDS,AXMOVAX,STACK1MOVSS,AXMOVSP,OFFSETTOPMOVSI,OFFSETTABLEMOVAH,0MOVAL,HEXADDSI,AXMOVAL,SIMOVASCI,AL,MOVAH,4CHINT21HCOSEGENDSENDBEING,作业:在存储器中有4个16位的无符号数a、b、c、d,编程实现a*b+c-d,结果放入存储器中。提示:1以例5-1为基础,修改处理部分实现本题要求。2注意a*b获得的积是32位数,结果也是32位数。3做加法
9、和减法时注意低16位到高16位的进位和借位的处理。,5.3分支结构程序设计,5.3.1二分支结构例5.4求补码数的绝对值。1)明确任务,确定算法。2)绘流程图(图5-7),3)根据流程图编写汇编语言程序STACKSEGMENTSTACKDW300DUP(?)TOPLABELWORDSTACKENDSDATASEGMENTXADRDW?DATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATA,SS:STACKMOVAX,STACKMOVSS,AXMOVSP,OFFSETTOPSTART:PUSHDSMOVAX,0PUSHAX,MOVAX,DATAMO
10、VDS,AXMOVAX,XADRANDAX,AXJNSDONENEGAXMOVXADR,AXDONE:RETMAINENDPCODEENDSENDSTART,例5.3在长度小于256的字符串中分别统计数字、字母和其它字符的个数。1)明确任务,确定算法。2)绘流程图(图5-6),3)根据流程图编写汇编语言程序DATASEGMENTBUFDBNDB07H,2AH,47H,6AH,96HNUMDB3DUP(?)DATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATASTART:PUSHDSSUBAX,AXPUSHAX,MOVAX,DATAMOVDS,AX
11、MOVSI,OFFSETBUFMOVCH,SIMOVCL,CHMOVBX,0INCSILP:MOVAH,SICMPAH,30HJLNEXTCMPAH,39HJGABCINCBHJMPNEXT,ABC:CMPAH,41H;大写字符JLNEXTCMPAH,5AHJGNEXTINCBLNEXT:INCSIDECCHJNZLPMOVSI,OFFSETNUMMOVSI,BHMOVSI+1,BLSUBCL,BHSUBCL,BLMOVSI+2,CL,RETMAINENDPCODEENDSENDSTART,5.3.2多分支结构1.条件逐次测试法例5.5编程实现使键盘上A、B、F六个字母键成为6个输入命令,使之
12、分别对应6个具有不同算法的控制子程序。1)明确任务,确定算法。2)绘流程图(图5-8),3)根据流程图编写汇编语言程序MOVAH,lINT21HCMPAL,AJEPACMPAL,BJEPBCMPAL,FJEPFHLTPA:PB:PF:,2.列表跳转法(1)根据表内地址跳转法例5.6利用表内地址跳转法来实现例5.5的要求1)明确任务,确定算法。2)绘流程图(图5-10),3)根据流程图编写汇编语言程序ADATASEGMENTBASEDWPA,PB,PC,PD,PE,PFKEYDB?ADATAENDSASTACKSEGMENTPARASTACKSTACKDW100DUP(?)TOPLABELWOR
13、DASTACKENDSACODESEGMENTASSUMECS:ACODE,DS:ADATA,SS:ASTACKMAINPROCFARSTART:PUSHDSMOVAX,0PUSHAX,MOVAX,ADATAMOVDS,AXMOVAX,ASTACKMOVSS,AXMOVSP,OFFSETTOPLOP:MOVAH,1INT21HCMPAL,41HJBLOPCMPAL,46HJALOPSUBAL,41HMOVBX,OFFSETBASEMOVAH,0ADDAL,ALADDBX,AXJMPWORDPTRBXRETMAINENDPCODEENDSENDSTART,(2)根据表内指令跳转法例5.7利用表内
14、指令跳转法来实现例5.5的要求1)明确任务,确定算法。2)绘流程图(图5-12),3)根据流程图编写汇编语言程序DATASEGMENTBASEDBE9,PAL,PAH,E9,PBL,PBH,E9,PCL,PCHDBE9,PDL,PDH,E9,PEL,PEH,E9,PFL,PFHDATAENDSLOP:MOVAH,1INT21HCMPAL,41HJBLOPCMPAL,46HJALOPSUBAL,41HMOVAH,0,MOVBL,ALADDAL,ALADDAL,BLMOVBX,OFFSETBASEADDBX,AXJMPBX,(3)根据表内关键字跳转法例5.8利用表内关键字跳转法实现例5.5的要求1
15、)明确任务,确定算法。2)绘流程图(图5-14),3)根据流程图编写汇编语言程序BDATASEGMENTBASEDB41HDWPADB42HDWPBDB43HDWPCDB44HDWPDDB45HDWPEDB46HDWPFBDATATENDS,LOP:MOVAH,1INT21HCMPAL,41HJBLOPCMPAL,46HJALOPMOVSI,OFFSETBASENEXT:CMPAL,SIJEDOADDSI,3JMPNEXTDO:MOVBX,WORDPTRSI+1JMPWORDPTRBX,作业:一个字节中存有2个十六进制数(高、低4位),用分支法将其分别转换成对应的ASC码。提示:1以例5-4为
16、基础,修改处理部分实现本题要求。2注意高4位和低4位分别处理。309和AF的ASC码分别处于2个连续空间。4在分支结构中注意上一个处理结束后要用转移指令跳过下一个处理。,5.4循环结构程序设计5.4.1循环程序的组成与结构形式两种循环程序结构:WHILE_DO结构和DO_UNTIL结构,例5.9试编写一程序统计出某一内存单元中1的个数并将结果存入RESULT单元中。1)明确任务,确定算法。2)绘流程图(图5-17),3)根据流程图编写汇编语言程序DATASEGMENTXDADW3AD8HRESULTDW?DATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,D
17、S:DATASTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATA;取段基地址,DATA是段名,立即寻址MOVDS,AXMOVCX,0MOVAX,XDA;取XDA中的数,直接寻址,AGAIN:ANDAX,AXJZEXITSHLAX,1JNCNEXTINCCXNEXT:JMPAGAINEXIT:MOVRESULT,CXRETMAINENDPCODEENDSENDSTART,5.4.2循环程序的控制方法(1)计数法计数法分为正计数法和倒计数法。例5.10编制程序将两个n字节的无符号数相加,结果存入SUM开始的n+1字节存储区中。1)明确任务,确定算法。2)绘流程图(图5-18),3
18、)根据流程图编写汇编语言程序SSEGSEGMENTPARASTACKSSEGSTACKDB150DUP(?)SSEGENDSDATASEGMENTDATA1DBNDUP(?)DATA2DBNDUP(?)SUMDBN+1DUP(?)DATAENDSCSEGSEGMENTASSUMECS:CSEG,DS:DATA,SS:SSEGMAINPROCFARSTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATA,MOVDS,AXMOVAX,SSEGMOVSS,AXMOVSP,SIZESTACKLEABX,DATA1LEASI,DATA2LEADI,SUMMOVCX,NCLCAGAIN:MO
19、VAL,SIADCAL,BXMOVDI,ALINCBXINCSIINCDILOOPAGAIN,ADCBYTEPTRDI,0RETMAINENDPCSEGENDSENDSTART,(2)条件控制法条件控制法利用已知的条件对循环进行控制的方法。分两种情况:如循环最大次数已知,但有可能使用一些特征或条件使循环提前结束。循环次数未知,利用条件中的特征结束循环。例5.11编制程序用单字符输出的DOS功能调用向屏幕输出以“%”结束的字符串。1)明确任务,确定算法。2)绘流程图(图5-19),3)根据流程图编写汇编语言程序DSEGSEGMENTDATADBHOWAREYOU?%DSEGENDSSSEGSEG
20、MENTPARASTACKKEGSTACKDB200DUP(0)SSEGENDSCSEGSEGMENTMAINPROCFARASSUMECS:CSEG,DS:DSEG,SS:SSEGSTART:MOVAX,DSEGMOVDS,AXMOVAX,SSEGMOVSS,AXMOVSP,SIZESTACKLEASI,DATA,AGAIN:MOVDL,SICMPDL,%JZENDOUTMOVAH,2INT21HINCSIJMPAGAINENDOUT:RETMAINENDPCSEGENDSENDSTART,(3)逻辑尺控制法例5.12设有16个内存单元需要修改,修改规律是:第1、3、6、9、12号单元均加5
21、,其余单元均加10,试用循环结构编程实现。1)明确任务,确定算法。2)绘流程图,3)根据流程图编写汇编语言程序DATASEGMENTXDADB16DUP(?)LRULERDW0A490HDATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATASTART:PUSHDSXORAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVBX,0MOVCX,10HMOVDX,LRULER,AGAIN:MOVAX,XDABXSHLDX,1JCADD5ADDAX,10JMPSHORTRESULTADD5:ADDAX,5RESULT:MOVXDABX,AXI
22、NCBXLOOPAGAINRETMAINENDPCODEENDSENDSTART,5.4.3多重循环程序设计注意以下几点:1)设置好各重循环的初始状态,确保各重循环的正常运行。2)注意内外循环嵌套。3)防止死循环现象。例5.13设某一数组的长度为N,各元素均为字数据,试编制一个程序使该数组中的数据按照从小到大的次序排列。1)明确任务,确定算法。2)绘流程图,3)根据流程图编写汇编语言程序ADATASEGMENTDATADWNDUP(?)ADATAENDSASTACKSEGMENTSTACKSTACKDB100DUP(?)TOPLABELWORDASTACKENDSACODESEGMENTASS
23、UMECS:ACODE,DS:ADATA,SS:ASTACKMAINPROCFARSTART:MOVAX,ASTACKMOVSS,AXMOVSP,OFFSETTOPPUSHDS,SUBAX,AXPUSHAXMOVAX,ADATAMOVDS,AXMOVBX,0MOVCX,NDECCXL1:MOVDX,CXL2:MOVAX,DATABXCMPAX,DATABX+2JBECONTIXCHGAX,DATABX+2MOVDATABX,AXCONTI:ADDBX,2LOOPL2,MOVCX,DXMOVBX,0LOOPL1RETMAINENDPACODEENDSENDSTART,5.5子程序结构程序设计子程
24、序是汇编语言中多次使用的一个相对独立的程序段。子程序结构程序设计主要包括三个方面,即:子程序的定义与调用子程序的参数传送子程序嵌套与递归调用5.5.1子程序的定义与调用1、子程序的定义子程序说明包括四个方面:(1)描述该子程序模块的名称、功能及性能(2)说明子程序中用到的寄存器和存储单元(3)指出子程序的入口参数和出口参数(4)子程序中调用其它子程序的名称,例5.14定义一个显示两位十六进制数的子程序程序说明:;名称:DISPP;功能:显示两位十六进制数;所用寄存器CX,DX;入口参数:AL存放两位十六进制数;出口参数:无;调其它子程序:DISP1,子程序如下:DISPPPROCNEARPUS
25、HDXPUSHCXMOVDL,ALMOVCL,4ROLDL,CLANDDL,0FHCALLDISP1MOVDL,ALANDDL,0FHCALLDISP1POPCXPOPDXRETDISPPENDP,2、子程序的调用和返回例5.15编制显示四位十六进制数的子程序1)明确任务,确定算法。2)绘流程图,3)根据流程图编写汇编语言程序DISP4PROCNEARPUSHBXPUSHCXPUSHDXPUSHAXMOVAL,AHCALLDISP2POPAXCALLDISP2POPDXPOPCXPOPBXRETDISP4ENDP,DISP2PROCNEARMOVBL,ALMOVDL,ALMOVCL,4ROLD
26、L,CLANDDL,0FHCALLDISP1MOVDL,BLANDDL,0FHCALLDISP1RETDISP2ENDP,DISP1PROCORDL,30HCMPDL,3AHJBDDDADDDL,07HDDD:MOVAH,2INT21HRETDISP1ENDP,5.5.2子程序的参数传送实现参数传送分为四种:寄存器传送、固定缓冲区传送、地址表传送和堆栈传送。1、寄存器传送寄存器传送是一种最常用、最简单的参数传送实现方法。2、固定缓冲区传送固定缓冲区传送方法是采用存储器来实现参数传送的,它与寄存器传送类似。例5.16已知数组由100个字数据组成,试编程求出这个数组元素之和。1)明确任务,确定算法
27、。2)绘流程图(图5.23),3)根据流程图编写汇编语言程序DATASEGMENTARYDW100DUP(?)SUMDW?,?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXCALLRADDMOVAH,4CHINT21H,;求和子程序RADDPROCNEARPUSHAXPUSHBXPUSHCXPUSHDXLEABX,ARYMOVCX,100XORAX,AXMOVDX,AXCL1:ADDAX,BXJNCCL2INCDX,CL2:ADDBX,2LOOPCL1MOVSUM,AXMOVSUM+2,DXPOPDXPOPCXP
28、OPBXPOPAXRETRADDENDPCODEENDSENDSTART,3、地址表传送地址表传送是采用存储器来实现参数传送的。例5.17已知数组A由100个字数据组成,数组B由50个字数据组成,试编程分别求出这两个数组元素之和。1)明确任务,确定算法。2)绘流程图,3)根据流程图编写汇编语言程序DATASEGMENTCNTADW100ARYADW100DUP(?)SUMADD?CNTBDW50ARYBDW50DUP(?)SUMBDD?TABLEDW3DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX,M
29、OVAX,OFFSETCNTAMOVTABLE,AXMOVAX,OFFSETARYAMOVTABLE2,AXMOVAX,OFFSETSUMAMOVTABLE4,AXMOVSI,OFFSETTABLECALLRADDMOVAX,OFFSETCNTBMOVTABLE,AXMOVAX,OFFSETARYBMOVTABLE2,AXMOVAX,OFFSETSUMBMOVTABLE4,AXMOVSI,OFFSETTABLECALLRADD,MOVAH,4CHINT21HRADDPROCNEARPUSHAXPUSHBXPUSHCXPUSHDXPUSHDIMOVBX,SIMOVCX,BXMOVBX,SI+2M
30、OVDI,SI+4XORAX,AXMOVDX,AX,CL1:ADDAX,BXJNCCL2INCDXCL2:ADDBX,2LOOPCL1MOVDI,AXMOVDI+2,DXPOPDIPOPDXPOPCXPOPBXPOPAXRETRADDENDPCODEENDSENDSTART,4、堆栈传送堆栈传送是采用存储器来实现参数传送的。例5.18已知数组A由100个字数据组成,数组B由50个字数据组成,要求用堆栈传送参数的子程序结构编程,试分别求出这两个数组元素之和。1)明确任务,确定算法。2)绘流程图,3)根据流程图编写汇编语言程序DATASEGMENTCNTADW100ARYADW100DUP(?)S
31、UMADD?CNTBDW50ARYBDW50DUP(?)SUMBDD?DATAENDSCSEGSEGMENTASSUMECS:CSEG,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,OFFSETARYAPUSHAX,MOVAX,OFFSETCNTAPUSHAXMOVAX,OFFSETSUMAPUSHAXCALLNEARPTRRADDMOVAX,OFFSETARYBPUSHAXMOVAX,OFFSETCNTBPUSHAXMOVAX,OFFSETSUMBPUSHAXCALLNEARPTRPADD,MOVAH,4CHINT21HRADDPROCNEARPUSHBPMOVBP,SPPUSHAXPUSHDXPUSHCXPUSHSIPUSHDIMOVSI,BP8MOVDI,BP6MOVCX,DIMOVDI,BP4XORAX,AXMOVDX,AX,NEXT:ADDAX,SIJNCNOCAYINCDXNOCAY:ADDSI,2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机电工程考试数据分析技术试题及答案
- 2025年光通讯用石英玻璃材料合作协议书
- 公共部门创新与政策落地机制研究试题及答案
- 2025年医疗健康数据隐私保护技术在医疗数据共享平台中的合规应用报告
- 西方政治制度下的公共卫生治理试题及答案
- 无人机配送技术在物流行业物流行业市场拓展中的应用与机遇报告
- 政府透明度与公共政策效果试题及答案
- 把握网络工程师考试方向与2025年试题与答案指引
- 高效的网络管理方法与试题及答案
- 公共政策互动中的利益冲突管理试题及答案
- 钻芯法检测技术自测题单选题100道及答案
- 《Python程序设计基础教程(微课版)》全套教学课件
- 行贿忏悔书-保证书
- HG∕T 4377-2012 浮动上滤式过滤器
- 机关事务管理局门套施工合同
- 毕业设计(论文)-某中型货车悬架总成设计
- 广东省汕尾市2023-2024学年八年级下学期7月期末生物试题
- 2024年上海卷高考数学真题试卷及答案
- 《百合花开》教学设计
- 模拟电子技术基础智慧树知到期末考试答案章节答案2024年北京航空航天大学
- 人教版高中物理必修1
评论
0/150
提交评论