




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、微型计算机原理及应用微型计算机原理及应用第第4 4章汇编语言程序设计章汇编语言程序设计循环程序有两种结构:“先执行,后判断”和“先判断,后执行 。 4.4.4循环结构程序循环结构程序初始化初始化循环体循环体参数修改参数修改循环控制?循环控制?YN程序当中有一部分指令,需要反复的执行,需要编写循环结构程序。初始化初始化循环体循环体修改参数修改参数循环控制?循环控制?YN先执行,再判断条件先执行,再判断条件。先判断条件,再执行先判断条件,再执行无论哪种结构,循环程序都可由如下四部分组成:无论哪种结构,循环程序都可由如下四部分组成:(1)循环初始化部分 循环之前的一些准备工作。比如数据处理一般要设置
2、地址指针、循环次数及某标志的设置,相关寄存器的清零等操作。只有正确地进行了初始化设置,循环程序才能正确运行,及时停止。(2)循环体:)循环体: 是要重复执行的那部分指令或程序段。(3)修改参数:为下一次循环做些准备。比如说地址指针的修改,)修改参数:为下一次循环做些准备。比如说地址指针的修改,循环次数的检验循环次数的检验o(4)循环控制:就是循环的判别,我这次循环是否该结束了o循环结束的控制 :用计数器控制循环结束。(见实例)o 用特征码控制循环结束。(见实例) 循环程序结构循环程序结构【例【例1】 设内存设内存BUFF开始的单元中依次存放着开始的单元中依次存放着30个个8位无符号位无符号数,
3、求它们的和并放在数,求它们的和并放在SUM单元中,试编写程序单元中,试编写程序MOV SI,BUFF ;设地址指针;设地址指针MOVCX,30 ;设计数初值;设计数初值XOR AX,AX ;设累加器初值(标志位清零;设累加器初值(标志位清零AGAIN:ADDAL,SI ADCAH,0; INCSI LOOPAGAIN ;循环累加;循环累加 MOVSUM,AX 循环程序结构循环程序结构解决ADD AL,SI的进位问题AH=AH+0+CF数据段怎么处理?例例2 统计以统计以BUFFER为起始地址的为起始地址的100个单元中负数的个数个单元中负数的个数,并并将统计出来的负数个数送将统计出来的负数个数
4、送NUM单元。(单元。(P145)XOR BL,BL;存放负数的个数存放负数的个数MOV CX,100;统计次数统计次数LEA SI,BUFFERCLDNEXT: LODSB;取一个数取一个数TEST AL,80HJZ GOONINC BLGOON:LOOP NEXT;是负数,计数器加是负数,计数器加1MOV NUM,BL 例例3 将将BX中的中的16进制数转换为进制数转换为ASCII码码,存放到存放到BUF开始开始的内存单元中,并在屏幕上显示出数值。的内存单元中,并在屏幕上显示出数值。 数字数字0909对应的对应的ASCIIASCII码为码为30H-39H30H-39H(加(加30H30H)
5、 数字数字AFAF对应的对应的ASCIIASCII码为码为41H-46H 41H-46H (加(加37H37H) 循环程序结构循环程序结构MOV SI,OFFSET BUFMOV CH,4 ;四个;四个16进制数需要处理进制数需要处理NEXT: MOV CL,4 ;左移;左移4位位 ROL BX,CL MOV AL,BL AND AL,0FH CMP AL,0AH JC STORE ADD AL,7H STORE: ADD AL,30H MOV SI, AL MOVAH,2 MOVDL,AL INT21H INCSI DECCH JNZNEXT HLT 循环程序结构循环程序结构 循环程序结构循
6、环程序结构 例例4 4 统计统计AXAX寄存器中寄存器中1 1的个数,结果放到的个数,结果放到CLCL寄存寄存器中。器中。 MOV CL MOV CL,0 0 ;将来放;将来放1 1的个数的个数 L1L1: AND AXAND AX,AX AX ;AXAX不变,但影响不变,但影响ZFZF标志位标志位 JZ STOP JZ STOP ;如果;如果AX=0AX=0那么下面的程序就不必要那么下面的程序就不必要了了 SAL AX SAL AX,1 1 ;算术左移,将最低位送入;算术左移,将最低位送入CFCF JNC L2JNC L2 ; ;检验检验CFCF的值是的值是1 1还是还是0 0? INC C
7、L INC CL L2L2: JMP L1 JMP L1 STOPSTOP:MOV AHMOV AH,4CH 4CH INT 21H INT 21H 该程序没有设置循环次数,看AX是不是0决定是否循环 循环程序结构循环程序结构 参考程序(参考程序(2 2) MOV CHMOV CH,16 16 MOV CL MOV CL,0 0 L1L1: SAL AXSAL AX,1 1 JNC L2 JNC L2 INC CL INC CL L2L2: DEC CH DEC CH JNZ L1 JNZ L1 STOPSTOP:MOV AHMOV AH,4CH 4CH INT 21H INT 21H 先判断
8、,后执行先判断,后执行该程序有设置循环次数,看CH是不是0决定是否循环8.5 子程序设计子程序设计1.子程序的定义子程序的定义o程序设计中,把多次重复出现、具有通用性、能够完成特定处理任务的程序段编写成独立的程序模块。o 特性:o (1)重复性;(2)通用性;o (3)浮动性;(4)模块化;8.5.1子程序概念子程序概念主程序与子程序调用关系主程序与子程序调用关系主程序K:调用子程序ADK:J:调用子程序ADJ:子程序A 返回主程序8.5.1子程序概念子程序概念oMAINPROCFAR ;主程序o oCALLSUBR1 REToMAINENDPoSUBR1 PROCNEAR ;子程序(NEAR
9、可省略)o o REToSUBR1 ENDPMAIN及其子程序及其子程序SUBR1在同一代码段中,在同一代码段中,SUBR1定义为定义为NEAR属性。属性。如果调用程序和子程序不在同一个代码段中,如果调用程序和子程序不在同一个代码段中,则使用则使用FAR属性属性 程序的主程序看作程序的主程序看作DOS调用的一个子程序,调用的一个子程序,因而因而DOS对对MAIN的调用以及的调用以及MAIN中的中的RET就是就是FAR属性。属性。8.5.1子程序概念子程序概念CALL和和NEAR为为调用指令调用指令基本功能:基本功能:将子程序的返回地址(将子程序的返回地址(即即CALL指令的下一条指令的地址,指
10、令的下一条指令的地址,简称断点地址,包括段地址和偏简称断点地址,包括段地址和偏移地址移地址)压入堆栈,以便执行完)压入堆栈,以便执行完子程序后能返回主程序,并从断子程序后能返回主程序,并从断点处继续往下执行,然后按照某点处继续往下执行,然后按照某种寻址方式转向子程序的入口地种寻址方式转向子程序的入口地址去执行子程序址去执行子程序。子程序定义的语法格式:子程序定义的语法格式: PROC Attribute . RET ENDP子程序定义的语法格式子程序定义的语法格式SUBTPROCPUSHAX;现场保护现场保护PUSHBXPUSHCXPUSH DX ;子程序体子程序体POP DX;现场恢复现场恢
11、复POP CXPOP BXPOP AXRETSUBTENDPPUSH指令把指令把子程序所需要子程序所需要使用的寄存器使用的寄存器内容保存在堆内容保存在堆栈中栈中POP指令把寄指令把寄存器内容恢复存器内容恢复原状原状子程序结构形式子程序结构形式保护现场与恢复现场保护现场与恢复现场注意注意:子程序中用到的寄存子程序中用到的寄存器是应该保护的。器是应该保护的。如果使用寄存器在主程序和如果使用寄存器在主程序和子程序之间传送参数,这种子程序之间传送参数,这种寄存器就不一定需要保护,寄存器就不一定需要保护,特别是向主程序回送结果的特别是向主程序回送结果的寄存器,更不应该因保存和寄存器,更不应该因保存和恢复
12、寄存器而破坏了应该向恢复寄存器而破坏了应该向主程序传送的信息。主程序传送的信息。先入后出的原则先入后出的原则掌握以下几点:调用子程序用CALL指令,返回调用程序用RET指令。子程序允许嵌套调用。进入子程序后首先要保护主程序的运行状态(标志位)和使用的寄存器内容(称为保护现场保护现场),退出子程序前要恢复现场恢复现场。调用前要预先确定子程序中要使用哪些寄存器使用哪些寄存器,并定定义入口参数和出口参数义入口参数和出口参数。参数传递可利用寄存器、存储单元或堆栈(要用BP寻址)。子程序设计参数传递方法利用寄存器:主程序把给子程序的参数直接放在的约定的寄存器,子程序从中取参数;子程序处理结果也放在约定寄
13、存器中。利用存储单元:这种参数传递方法,把所需传递的参数直接放在子程序调用指令代码之后。利用堆栈:这种方法将参数压入堆栈,在子程序运行时从堆栈中取参数。返回主程序后主程序从堆栈中取结果。入口参数:主程序送给子程序处理的信息入口参数:主程序送给子程序处理的信息出口参数:子程序送给主程序的处理结果出口参数:子程序送给主程序的处理结果【例1】 两个6字节数相加。分析:将一个字节相加的程序段设计为子程序。主程序分3次调用该子程序,但每次调用的参数不同。oDATASEGMENTo ADD1 DB FEH,86H,7CH,35H,68H,77Ho ADD2 DB 45H,BCH,7DH,6AH,87H,9
14、0Ho SUM DB 6DUP(0)o COUNTDB6oDATAENDSoSTACKSEGMENToDB100DUP(?)oSTACKENDSoCODESEGMENToASSUME CS:CODE,DS:DATA,SS:STACKoMADD: MOV AX,DATAoMOV DS,AXoMOV AX,STACKoMOV SS,AXo MOV SI,OFFSET ADD1oMOV DI,OFFSET ADD2oMOV BX,OFFSET SUMoMOV CX,COUNT ;循环初值为6oCLCoAGAIN: CALL SUBADD ;调用子程序o LOOP AGAIN ;循环调用6次o MOV
15、AX,4C00Ho INT21Ho 子程序入口参数:子程序入口参数:SI,DI,BX 出口参数:出口参数:SI,DI,BXo SUBADD PROC ;完成一个字节相加oPUSH AX ;保护AX的值oMOV AL,SI ;SI是一个源操作数指针oADCAL,DI ;DI是另一个源操作数指针oMOV BX,AL ;BX是结果操作数指针oINCSIoINCDIoINCBXoPOPAX ;恢复AX的值oRETo SUBADDENDPoCODEENDSoEND MADD4.4.5 子程序设计子程序设计例例4-16从一个字符串删去一个字符。从一个字符串删去一个字符。DATASEGMENTSTRING
16、DB ExxperinceLENGTHDW $_STRINGKEYDB XDATAENDSCODESEGMENTASSUME CS:CODE,DS:DATAMAINPROC FARSTART:MOV AX,DATAMOV DS,AXLEA BX,STRING多余的多余的字符字符LEA CX,LENGTHPUSH BXPUSH CXMOV AL,KEYCALL DELCHARMOV AH,4CHINT 21HMAINENDPDELCHARPROCPUSH BPMOV BP,SPPUSH SIPUSH DIPUSH CX程序执行时堆栈最满时的状态程序执行时堆栈最满时的状态CLDMOV SI,BP4
17、MOV CX,SIMOV DI ,BP6REPNE SCASBJNE DONEMOV SI,BP4 DEC WORDPTRSIMOV SI,DIDEC DIREP MOVSBDONE: POPCX POPDI POPSI POPBP RET4DELCHAR ENDPCODE ENDS ENDSTART例例4-18当当I/O状态端口状态端口0378H的的Bit1为为0时,表示外设忙;为时,表示外设忙;为1则则表示外设可以接收数据。现将当前数据段中从表示外设可以接收数据。现将当前数据段中从BUFFER开始的连续开始的连续100个字节的内容从个字节的内容从I/O数据端口数据端口03F8H输出到外设。
18、输出到外设。SENDATAPROC FARPUSH AXPUSH DXPUSH SIPUSH CXLEA SI,BUFFERMOV CL,100AGAIN:MOV DX,0378HWAIT:IN AL,DXTEST AL,02HJZ WAITMOVAL,SIMOV DX,3F8HOUT DX,ALINC SIDEC CLJNZAGAINPOP CXPOPSIPOPDXPOP AXRETSENDATAENDP4.5常见程序设计举例常见程序设计举例DATA SEGMENTMASC DB 2,6,A,1MBIN DB 2 DUP(?)(?) DATA ENDSCODE SEGMENT ASSUMEC
19、S:CODE,DS:DATABEGIN: MOV AX,DATA MOV DS,AX MOV CL,4 MOV CH,CL LEA SI,MASC CLD 例例4-194-19把把ASCIIASCII码形式表示的数转换为二进制码。码形式表示的数转换为二进制码。 ASCIIASCII码存放码存放在以在以MASCMASC为首地址的内存单元中,转换结果放为首地址的内存单元中,转换结果放MBINMBIN。 XOR AX,AX XOR DX,DXNEXT1: LODS MASC AND AL,7FH CMP AL,0 JL ERROR CMP AL,9 JG NEXT2 SUB AL,30H JMP S
20、HORT NEXT3NEXT2:CMP AL,A JL ERROR CMP AL,F JG ERROR SUB AL,37HNEXT3:OR DL,AL ROR DX,CL DEC CH JNZ NEXT1 MOV WORD PTR MBIN,DX MOV AH,4CH INT 21HCODE ENDS EDN BEGIN例例4-20把存放在把存放在BUFF中的中的16位二进制数转换为位二进制数转换为ASCII表示的表示的等值数字字符串。例如等值数字字符串。例如FFFFH转换成等值的数字字符串转换成等值的数字字符串65535。DATA SEGMENTBUFF DW 4FB6HASCC DB 5
21、 DUP(?)(?) DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV CX,5 LEA DI,ASCC XOR DX,DX MOV BX,0AHAGAIN:DIV BX ADD DL,30H MOV DI,DL JL ERROR INC DI AND AX,AX JZ STO MOV DL,0 LOOP AGAINSTO: MOV AX,4CH INT 21HCODE ENDS END START例例4-21两个多字节二进制数求和。两个多字节二进制数求和。DATA SEGMENTBUFF1
22、DB 4FH,0B6H,7CH,34H,56H,1FHBUFF2 DB 13H,24H,57H,68H,FDH,9AH SUM DB 6 DUP(?)(?) CONT DB 3DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV SI,OFFSET BUFF1 MOV DI, OFFSET BUFF2 MOV BX, OFFSET SUM MOV CL,CONT ADD DL,30H MOV CH,0 CLCGOON:MOV AX,SI ADC AX,DI ADD SI,2 ADD DI,2 MO
23、V BX,AX ADD BX,2 LOOP GOON MOV AX,4CH INT 21HCODE ENDS END START例例4-22把一个二进制数转换为把一个二进制数转换为BCD码。码。分析:将一个二进制数转换为分析:将一个二进制数转换为BCD码,可以把该二进制数不断地码,可以把该二进制数不断地除以除以10,并记下余数,直到商为,并记下余数,直到商为0。余数序列就是所求的。余数序列就是所求的BCD码,码,第一个余数为该第一个余数为该BCD的最低位。的最低位。转换出的转换出的BCD码是扩展码是扩展BCD码,要得到压缩的码,要得到压缩的BCD码,要取码,要取各数字的低四位,将其拼接在一起。
24、各数字的低四位,将其拼接在一起。DATA SEGMENTMBIN DW 4FB6HMBCD DB 5 DUP(?)(?) DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AXMOV AX,MBIN LEA BX,MBCD XORDX,DX MOV CX,0AH DIV CX MOV BX, DL MOV DL,0 DIV CX INC BX MOV BX,DL MOV DL,0 DIV CX INC BX MOV BX, DL MOV DL,0 DIV CX INC BX MOV BX,DL INC BX MOV BX,AL MOV AH,4CH INT 21HCODE ENDS END START作业作业1.在下列程序运行后,请给相应的寄存器及存储单元填入运行的结在下列程序运行后,请给相应的寄存器及存储单元填入运行的结果。果。MOVAL,10HMOVCX,1000HM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年份三月聚丙烯基智能变色薄膜响应时间条款
- 行纪合同与委托合同的异同点
- 激发ai无限潜能,高质量ai提示词创作技巧
- 二零二五版担保人与借款人协议
- 知识产权归属及保密协议资讯二零二五年
- 装饰行业废料管理制度
- 销售公司工装管理制度
- 高校疫情餐厅管理制度
- 铁路护路日常管理制度
- 酒店公司人事管理制度
- 05第五章 预防中心静脉导管相关血流感染集束化护理措施和核查表
- 质量检验-控制流程图
- 术前停药指南
- “双减”作业设计-初中物理优秀作业设计案例
- 新能源汽车充电桩项目可行性报告
- 苏州大学PPT模板 9
- 一汽解放维修手册说明书
- 门静脉高压症PPT
- 禽流感人流感人间禽流感培训课件
- 2023年运行值长题库
- GB/T 4857.4-2008包装运输包装件基本试验第4部分:采用压力试验机进行的抗压和堆码试验方法
评论
0/150
提交评论