




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022-3-221微型计算机原理与接口技术微型计算机原理与接口技术第四章第四章 汇编语言程序设计(汇编语言程序设计(II)熊旺平熊旺平2022-3-222l 程序设计方法概述程序设计方法概述l 结构化程序设计方法结构化程序设计方法q顺序结构q分支结构q循环结构q子程序结构l宏汇编和条件汇编宏汇编和条件汇编2022-3-223 能读懂汇编语言源程序能读懂汇编语言源程序 掌握汇编语言程序设计的基本方法掌握汇编语言程序设计的基本方法 能根据给定问题能根据给定问题,进行一般的汇编程序设计进行一般的汇编程序设计2022-3-224一个好的程序须具备如下特点:一个好的程序须具备如下特点:l程序结构模块化
2、,易读,易调试及维护。程序结构模块化,易读,易调试及维护。l执行速度快。执行速度快。l占用内存空间小。占用内存空间小。2022-3-225n 分析问题,抽象出描述问题的数学模型,并确定实分析问题,抽象出描述问题的数学模型,并确定实现数学模型的算法。现数学模型的算法。n 绘制程序流程图,先画各大模块,再细化各子模块。绘制程序流程图,先画各大模块,再细化各子模块。n 分配存储空间及工作单元。分配数据段、堆栈段、分配存储空间及工作单元。分配数据段、堆栈段、代码段各在内存什么位置,各个寄存器主要做什么代码段各在内存什么位置,各个寄存器主要做什么用。用。n 按流程图设计编写程序按流程图设计编写程序n 静
3、态检查,上机调试。静态检查,上机调试。n 程序运行,分析结果。程序运行,分析结果。程序设计的基本步骤程序设计的基本步骤2022-3-226 一方面学习结构化编程,另一方面进一步学一方面学习结构化编程,另一方面进一步学习和掌握汇编语言程序设计的特点和技巧。习和掌握汇编语言程序设计的特点和技巧。n顺序结构顺序结构n分支结构分支结构n循环结构循环结构1.子程序结构子程序结构2022-3-227微机原理与应用微机原理与应用2022-3-228l教材教材P171 例例4-64lExercises1 说明程序中说明程序中 AND AL,0FH 的的作用作用l友情提示友情提示:从键盘输入值的特点考虑从键盘输
4、入值的特点考虑lExercises2l 用用XLAT表转换指令完成上述求平方根程序表转换指令完成上述求平方根程序l友情提示友情提示:可参考教材可参考教材P74 指令指令2022-3-229分支结构分支结构一般分支结构一般分支结构实现方法举例实现方法举例多分支结构多分支结构1 直接应用条件转移实现直接应用条件转移实现逐个判断逐个判断,运行速度慢运行速度慢2 利用跳转表实现利用跳转表实现可直接找到入口地址可直接找到入口地址2022-3-2210 内存中有一个字符串其始地址为内存中有一个字符串其始地址为BUF,字符串长,字符串长度度NDH,字母,字母A-Z(41H-5AH)的个数)的个数-DL,其,
5、其余字符的个数余字符的个数=N-DH-DL。 DATA SEGMENT BUF DB N ;数组个数数组个数 DB 01H,32H,43H,49H,41H,54H DB 3 DUP(0) ;留留3个单元个单元存结果存结果DATA ENDSl ASCII09 0011000000111001 AF 010000010100011039H 9 3AH58D A 41H65D 587652022-3-2211CODE MOV CH, N ;字符串长度字符串长度 MOV BX, 1 ;地址基准地址基准 MOV DX, 0 ;DH,DL清零清零LP: MOV AH, BUFBX ;取一字符取一字符 CM
6、P AH, 30H JL NEXT ;9,转是否为字转是否为字母母 INC DH ;是数字是数字,个个数加数加1 JMP NEXTABC: CMP AH, 41H ;判断是否为字母判断是否为字母 JL NEXT ;Z转出转出 INC DL ;字母个数加字母个数加1NEXT:INC BX DEC CH JNZ LP MOV BUFBX, DH MOV BUFBX+1, DL MOV AH,N SUB AH, DH SUB AH, DL MOV BUFBX+2, AH2022-3-2213lExercises1l若要求分别计算出数字若要求分别计算出数字09和字母和字母az和其他符号的个数,应如何修
7、改和其他符号的个数,应如何修改程序?程序?2022-3-2214l最简单的方法:利用多个条件转移指令来实最简单的方法:利用多个条件转移指令来实现现l速度优化的方法:利用跳转表来实现速度优化的方法:利用跳转表来实现q根据表内地址分支l跳转表中存放了每个分支的入口地址跳转表中存放了每个分支的入口地址q根据表内指令分支l跳转表中跳转表中直接直接存放了转移指令存放了转移指令q根据关键字分支l跳转表中存放了关键字和入口地址跳转表中存放了关键字和入口地址q关键是提供了一种找到分支程序入口地址的方法2022-3-2215l简单多分支程序示例:简单多分支程序示例:有有8个加工子程序,入口地址分个加工子程序,入
8、口地址分别为别为P1,P2,P3 P8。编程实现检测键盘输入命令,。编程实现检测键盘输入命令,使系统分别转向使系统分别转向8个加工程序。个加工程序。MOV AH,1INT21HCMP AL,1JEP1CMP AL,2JEP2CMP AL,8JEP8JMP STP1:P2:P8:ST:HLT请指出程序中的存在的问题请指出程序中的存在的问题2022-3-2216l用跳转表实现多分支用跳转表实现多分支P2高位高位P2低位低位P1高位高位P1低位低位BASEBASEBASEBASE2 2P1P1P2P2P2高位高位P2低位低位E9P1高位高位P1低位低位E9BASEBASEJMP P1JMP P1JM
9、P P2JMP P2383231BASEBASE关键字值关键字值P1P1程序程序入口地址入口地址P2P2程序程序入口地址入口地址P8P8程序程序入口地址入口地址根据表内地址分支根据表内地址分支 根据表内指令分支根据表内指令分支 根据关键字分支根据关键字分支2022-3-2217l用跳转表实现多分支用跳转表实现多分支DATA SEGMENTBASE DB E9,P1低低,P1高高,E9 DB E9E9,P9低低,P9高高DATA ENDSMOV AH,1INT 21HAND AL,0FHMOV AH,0MOV BL,ALADD AL,ALADD AL,BLMOV BX,OFFSET BASEAD
10、D BX,AXJMP BXP2高位高位P2低位低位E9P1高位高位P1低位低位E9BASEBASEJMP P1JMP P1JMP P2JMP P22022-3-2218l设有首地址为设有首地址为BUFFER的数组,已按升序排好,数组长度为的数组,已按升序排好,数组长度为N(10),),在该数组中查找数在该数组中查找数M(80),若找到则从数组中删除,若找不到将它插),若找到则从数组中删除,若找不到将它插入正确的排序位置,入正确的排序位置,DX中记录数组最后的长度。中记录数组最后的长度。DATA SEGMENTBUFFERDW5,10,32,47,53,77,89,106,115,124NDB1
11、0MEQU80DATA ENDSCODEMOVAX,M;待查数;待查数MOVCX,N;记数;记数MOVDX,NMOVDI,OFFSET BUFFERCLD2022-3-2219REPNESCASW;串扫描查找串扫描查找JEDEL;查到;查到ZF1DECDX;未查到,此数插入正确位置;未查到,此数插入正确位置MOVSI,DX;关键字与最后一个数比较;关键字与最后一个数比较ADDSI,DX;计算最后一个数的指针计算最后一个数的指针(字字)L1:CMPAX,BUFFERSIJLL2;关键字比数组中的某个字小;关键字比数组中的某个字小MOVBUFFERSI+2,AX ;否则插在后面;否则插在后面JMP
12、L3L2:MOVBX,BUFFERSI;数组下移一位;数组下移一位MOVBUFFERSI+2,BXSUBSI,2JMPL1L3:ADDDX,2JMPNEXT12022-3-2220DEL:JCXZ NEXT ;找到,删除此元素;找到,删除此元素DEL1: MOVBX,DI;其后元素依次前移;其后元素依次前移MOVDI-2,BXADDDI,2LOOP DEL1NEXT: DECDX;改变数组长度;改变数组长度NEXT1: RET2022-3-2221l循环结构的关键:循环结构的关键:循环控制循环控制循环结构分类循环结构分类先执行,后判断先执行,后判断先判断,后执行先判断,后执行(1 1)初始化:
13、为循环作准备,设置循环计数器,设置变量初值。)初始化:为循环作准备,设置循环计数器,设置变量初值。(2 2)循环体:循环的核心,包括循环的全部执行指令。)循环体:循环的核心,包括循环的全部执行指令。(3 3)修改参数:修改操作数地址,为下次循环作准备。)修改参数:修改操作数地址,为下次循环作准备。(4 4)循环控制:修改计数器值,判断循环控制条件,决定是否跳)循环控制:修改计数器值,判断循环控制条件,决定是否跳 出循环。出循环。u一般的循环控制可以由一般的循环控制可以由LOOPLOOP或条件跳转语句完成。或条件跳转语句完成。u若循环中有不同的操作要求,若循环中有不同的操作要求,可以用逻辑尺的方
14、法实现可以用逻辑尺的方法实现2022-3-2222MOVSI,OFFSET BUFMOV CH,4NEXT:MOVCL,4ROLBX,CLMOVAL,BLANDAL,0FHADDAL,30HCMPAL,3AHJLSTOREADDAL,7 STORE:MOVSI,AL MOVAH,2MOVDL,ALINT21HINCSIDECCHJNZNEXTHLT将将BX中的中的16进制数转换为进制数转换为ASCII码,存放到码,存放到BUF开始的内存单元中去,开始的内存单元中去,并在屏幕上显示出来。并在屏幕上显示出来。BX 1001 0100 1111 0111AL 0011 1001ASCII09 001
15、1000000111001 AF 010000010100011039H 9 3AH58D A 41H65D 587652022-3-2223l在循环工程中,有时要求按不同的次序处理两种函数操作,在循环工程中,有时要求按不同的次序处理两种函数操作,可用逻辑尺方法完成。可用逻辑尺方法完成。l某个采样系统,第某个采样系统,第1,2,5,7,10次采样时,采用次采样时,采用FUN1计算公式计算,第计算公式计算,第3,4,6,8,9次采样时采用次采样时采用FUN2计算公式计算,试编程完成该任务。计算公式计算,试编程完成该任务。l任务分析:任务分析:q可以设置一个开关位,分别用0(FUN1)或1(FUN
16、2)表示不同的计算公式q在具体实现时可以用位串来表示,每次循环都将位串中的一位左移至CF,用CF来控制不同分支。实现此控制的位串称为逻辑尺。q根据要求,本例中的位串为 0011 0101 1000 0000 2022-3-2224FUN1=X+5FUN2=X-3DATA SEGMENTLOGRULEQU 0011010110000000B ;逻辑尺逻辑尺COUNTEQU10;循环次数;循环次数BUFDB20DUP(?);采集数据;采集数据BLOCKDB20DUP(?);处理后数据;处理后数据DATA ENDSCODE 2022-3-2225MOVDX,LOGRUL;循环尺;循环尺-DXMOVC
17、X,COUNT;设循环次数设循环次数MOVSI,OFFSET BUFMOVDI,OFFSET BLOCK;设指针地址;设指针地址NEXT: MOVAX,WORD PTR SIROLDX,1;左移一位;左移一位JCFUN2;进位为;进位为1,转,转FUN2FUN1: ADDAX,5JMPNEXT1FUN2: SUBAX,3NEXT1:MOVWORD PTR DI,AX;送结果;送结果INCSI;修改指针地址;修改指针地址INCSIINCDIINCDILOOPNEXTMOVAH,4CH;返回;返回DOSINT21HDX 0011 0101 1000 00002022-3-2226l汇编语言中多次使
18、用的程序段可写成一个相汇编语言中多次使用的程序段可写成一个相对独立的程序段对独立的程序段,将它定义为将它定义为“过程过程”或子程或子程序。序。l使用子程序可使程序结构模块化,程序清晰使用子程序可使程序结构模块化,程序清晰易懂,维护方便。易懂,维护方便。l子程序说明通常包括:子程序说明通常包括:q功能描述:子程序的名称,功能及性能q子程序中用到的寄存器和存储单元q子程序的入口参数,出口参数q子程序中调用其它子程序的名称2022-3-2227l子程序说明:子程序说明:;名称:;名称:BCD2BIN;功能:将一个字节的;功能:将一个字节的BCD码转换成二进制码码转换成二进制码;所用寄存器:;所用寄存
19、器:CX;入口参数:;入口参数:AL存放两位存放两位BCD码码;出口参数:;出口参数:AL存放二进制数存放二进制数;调用其它子程序:无;调用其它子程序:无2022-3-2228BCD2BINPROCNEAR(或或FAR)PUSH CXMOV CH,ALAND CH,0FHMOV CL,4SHRAL,CLMOV CL,10MUL CLADD AL,CHPOP CXRETBCD2BINENDPBCD AL 0100 1000BIN AL 0011 00002022-3-2229l保护调用程序的返回地址保护调用程序的返回地址q由CALL指令本身完成,CPU执行CALL指令是会自动将当前断点的偏移地址
20、IP入栈,若是段间调用,将CS和IP入栈。当子程序返回时,遇到子程序中的RET指令,则自动将当前栈顶值弹出到IP和CS寄存器中。l保护某些寄存器的内容保护某些寄存器的内容q子程序要用到某些寄存器,为了不破坏寄存器中原有的信息,要将需保护的寄存器内容入栈,一般安排在子程序开头,用一组PUSH指令,在程序结尾用POP依次弹出。l主程序和子程序间参数的传递形式主程序和子程序间参数的传递形式q用寄存器传递参数:适合参数较少的情况,传递速度较快。q用存储器传递参数:适合参数较多的情况,需事先在存储器中建一个参数表。 q用堆栈传递参数:适合参数多的情况,尤其是在子程序嵌套与递归调用的情况下,比较不容易出错
21、。 2022-3-2230l数据段定义两个数组,编程实现数组段数据段定义两个数组,编程实现数组段分别求和(不计溢出)。分别求和(不计溢出)。主程序:主程序:DATASEGMENTARY1DW100 DUP (?)SUM1DW?ARY2DW100 DUP (?)SUM2DW?DATAENDSLEASI,ARY1MOVCX,LENGTH ARY1CALLSUMLEASI,ARY2MOVCX,LENGTH ARY2CALLSUM子程序:子程序:SUMPROCNEARXORAX,AXL1:ADDAX,WORD PTRSIINCSIINCSILOOPL1MOVWORD PTRSI,AXMOVAH,4CH
22、INT21HRETSUMENDP2022-3-2231 1. 10进制数进制数-2进制数进制数 将键盘输入的将键盘输入的10进制数(进制数(0-65535)转换成)转换成2进制数,并存入进制数,并存入BX寄存器中,如键入一个非寄存器中,如键入一个非10进进制数,则退出。制数,则退出。 分析分析 l先利用先利用1号号DOS功能调用,从键盘输入一数字,并在功能调用,从键盘输入一数字,并在AL中得到它的中得到它的ASCII码。码。l再将它转换成再将它转换成2进制数(减去进制数(减去30H),并判断是否为),并判断是否为数字数字0-9,若不是则退出子程序,若是,则将,若不是则退出子程序,若是,则将2进
23、制进制数数-BX中。中。l再从键盘输入第二个数字,若该数为再从键盘输入第二个数字,若该数为0-9,则将先输,则将先输入的数乘以入的数乘以10后再加上后输入的数,结果存进后再加上后输入的数,结果存进BX。后面再输入的数做同样的处理。后面再输入的数做同样的处理。2022-3-2232 10进制数进制数-2进制数进制数 子程序子程序: DEC_BINPROC NEAR MOV BX, 0GET_CHAR: MOV AH, 1 ;键入数字键入数字 INT 21H SUB AL, 30H JL EXIT ;9,退出退出 JA EXIT ;是数字是数字0-9 CBW ;将将AL中的字节中的字节-字字 XC
24、HG AX, BX MOV CX, 10 ;将先键入的数乘将先键入的数乘以以10 MUL CX XCHG AX, BX ADD BX, AX ;再加上新键入的数再加上新键入的数JMP GET_CHAR EXIT: RET DEC_BIN ENDP2022-3-22332. 2进制数进制数-16进制数进制数 将将BX寄存器中的寄存器中的2进制数转换成进制数转换成16进制数,进制数,并在并在CTR上显示出来。上显示出来。 分析分析 由于每由于每4位位2进制数可用一个进制数可用一个16进制数表示,进制数表示,所以所以BX中的中的2进制数可转换成进制数可转换成4个个16进制数字,进制数字,每左移每左移
25、4次可得到一个次可得到一个16进制数,将其转换成进制数,将其转换成ASCII码后,在码后,在CRT上显示出来,重复上显示出来,重复4次,可次,可将将BX中的数以中的数以4个个16进制数字显示出来。进制数字显示出来。2022-3-22342进制数进制数-16进制数子程序进制数子程序: BIN_HEXPROC NEAR MOVCH, 4 ;重复重复4次可得到次可得到4个个16进制数进制数ROTATE:MOV CL, 4 ROL BX, CL ;BX左移左移4次次 MOV AL, BL AND AL, 0FH ;截得一个截得一个16进制数字进制数字(4位二位二进制进制) ADD AL, 30H ;转换成转换成ASCII码码 CMP AL, 3AH JL DISPLAY ADD AL, 7HDISPLAY:MOV DL, AL ;显示显示 MOV AH, 2 INT 21H DEC CH ;4个数字都显示完了?个数字都显示完了? JNZ ROTATE ;没有没有,则
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司摄影比赛策划方案
- 公司糖酒会策划方案
- 公司新年文艺活动方案
- 公司检查活动方案
- 公司组织与管理策划方案
- 公司经营团建活动方案
- 公司社团手工活动方案
- 公司搞游园活动方案
- 公司母亲节现场活动方案
- 公司科普短视频策划方案
- 2025年小学语文知识考核试题及答案
- 地生结业考试试题及答案
- 2025教育机构教师劳动合同模板
- 学校档口租赁合同提点模式协议书
- 工商业光伏技术方案
- 2025年中国便携式气体检测仪行业市场规模调研及投资前景研究分析报告
- Unit 8 Once upon a Time Section A 1a-1e Pronunciation 课件 2024-2025学年英语人教版7年级下册
- 2025国家开放大学《人文英语1》综合测试形考任务答案
- 事业单位计算机类考试题库及答案
- 西安2025年西安市事业单位招聘433名高层次及紧缺特殊专业人才笔试历年参考题库附带答案详解
- 项目负责人资格证明书(6篇)
评论
0/150
提交评论