




已阅读5页,还剩106页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 5 章 基 本 汇 编 语 言 程 序 设 计 封面 1 1 第 5 章 基 本 汇 编 语 言 程 序 设 计 第5章基本汇编语言程序设计 第5章 基本汇编语言程序设计 5.1 顺序程序设计 5.2 分支程序设计 5.3 循环程序设计 本章要点及习题分析 2 2 第 5 章 基 本 汇 编 语 言 程 序 设 计 5.1顺序程序设计(e) 5.1 顺序程序设计 指令按程序中的书写顺序逐条执行,称为顺序程 序。除非编程解决非常简单的问题,顺序程序并不 多见,但是顺序程序往往是复杂程序结构的一部分 ,如分支结构的一个分支,循环结构的循环体等。 3 3 第 5 章 基 本 汇 编 语 言 程 序 设 计 例5.1 例5.1:设有3个字变量x,y和z,求出三者之和,结 果存入字变量w。 DATAS SEGMENT Xdw 5 Ydw 6 Zdw 7 Wdw ? DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX mov ax,x add ax,y add ax,z mov w,ax MOV AH,4CH INT 21H CODES ENDS END START 4 4 第 5 章 基 本 汇 编 语 言 程 序 设 计 【例5-3】 将一个字节压缩BCD码转换为两个ASCII码 。 分析:一个字节的压缩BCD码就是用一个字节的二 进制数表示两位十进制数,如十进制数96表示成压缩 BCD码就是96H,转换成ASCII码就是把压缩BCD码表示 的十进制数的高位和低位分开,并以ASCII码表示, 即转换成39H和36H。 5 5 第 5 章 基 本 汇 编 语 言 程 序 设 计 DATASEGMENT BCDBUF DB 96H;定义1个字节的压缩BCD码 ASCBUF DB 2DUP(?) ;定义2个字节的结果单元 DATA ENDS CODE SEGMENT ASSUME CS: CODE,DS: DATA START: MOV AX,DATA MOV DS,AX MOV AL,BCDBUF ;取出BCD码 MOV BL,AL ;送BL暂存 MOV CL,4 SHR AL,CL ;高4位变成低4位,高4位补0(96H09H) ADD AL,30H ;变成ASCII码(39H) 6 6 第 5 章 基 本 汇 编 语 言 程 序 设 计 MOVASCBUF,AL;存储第1个ASCII 码 ANDBL,0FH ;屏蔽掉高4位,只保留低4位(96H06H) ADDBL,30H;变成BCD码(36H) MOVASCBUF+1,BL;存储第2个 码 MOVAH,4CH INT21H CODE ENDS ENDSTART 7 7 第 5 章 基 本 汇 编 语 言 程 序 设 计 【例5-4】 利用直接查表法完成将键盘输入的一位 10进制数(09)转换成对应的平方值并存放在 SQRBUF单元中。 分析:09的平方值分别为0、1、4、9、16、25 、36、49、64、81。把平方值放在一起形成一个平 方值表,根据输入的值和对应平方值所在单元地址 之间的关系(表首地址加上输入的值),查出相应的 平方值。 8 8 第 5 章 基 本 汇 编 语 言 程 序 设 计 DATA SEGMENT SQUTABDB 0,1,4,9,16,25,36, 49,64,81 SQUBUFDB? DATA ENDS CODE SEGMENT ASSUMECS: CODE,DS: DATA START:MOVAX,DATA 9 9 第 5 章 基 本 汇 编 语 言 程 序 设 计 MOVDS,AX MOVBX,OFFSET SQUTAB ;平方表首地址 MOVAH,1 INT21H ;由键盘输入个数,得到其ASCII 码 SUBAL,30H;由ASCII码得到相应的数 XLAT;查表 MOVSQUBUF,AL ;存储结果 MOVAH,4CH INT21H CODEENDS END START 1010 第 5 章 基 本 汇 编 语 言 程 序 设 计 5.2分支程序设计 4.2 分支程序设计 条件转移指令Jcc和无条件转移指令JMP用于实现 程序的分支结构,JMP不测试条件,Jcc可根据条件 是否成立决定转移到指定位置或不转移而顺序执行 后续指令。由于Jcc不支持条件表达式,而是以当前 标志位的状态为条件,故Jcc之前一定要安排设置标 志位的指令,如加减法、比较、测试等指令。基本 分支类型分为单分支和双分支。 1111 第 5 章 基 本 汇 编 语 言 程 序 设 计 单分支 1. 单分支类型 对同一个问题,根据选择的条件不同,单分支结 构的流程图有两种画法,对应的程序也有两种编法。 如计算AX中的有符号数的绝对值。 1212 第 5 章 基 本 汇 编 语 言 程 序 设 计 单分支 cmp ax,0 jge noneg neg ax Noneg: mov result,ax cmp ax,0 jnge yesneg jmp done yesneg: neg ax Done: mov result,ax AX0 ? 求补指令 Y N 保存结果 AX0? 求补指令 Y N 保存结果JMP 1313 第 5 章 基 本 汇 编 语 言 程 序 设 计 双分支 2.双分支程序 两个分支都有语句 体,如何选择条件不重 要。 流程图中分支体的 位置就是程序的实际顺 序,故分支语句体最 后一定要有一条 指令,跳过语句体, 转移到“后续操作”。 条件成立? 分支语句体2 Y N 分支语句体1 后 续 操 作 1414 第 5 章 基 本 汇 编 语 言 程 序 设 计 双分支 双分支举例:显示BX的最高位。 shl bx,1 jc one ;转分支体 mov dl,0 ;分支体1 jmp next;转后续操作 One: mov dl,1 ;分支体2 next: mov ah,2 ;后续操作 int 21h .分支程序的其他问题 有些双分支问题可以先假设一种情况,把双分 支改成单分支问题。如上例,先假设BX最高位为0, 在分支外准备显示0;如最高位为0,即可直接跳到后 续操作;如最高位为1才需要执行分支体。 mov dl,0 shl bx,1 jnc next mov dl,1 next:mov ah,2 int 21h 1515 第 5 章 基 本 汇 编 语 言 程 序 设 计 多分支 分支的嵌套形成多分支,嵌套形式多种多样。 例1:求符号函数 1 当 X0 Y= 0 当 X=0 -1 当 XSTR2,FLAG为1;如果STR1 8? ja start1 and ax,000fh;将ASCII码转换成数字 9090 第 5 章 基 本 汇 编 语 言 程 序 设 计 补充3/3 dec ax shl ax,1;等效于add ax,ax mov bx,ax jmp tablebx ;(段内)间接转移:IPtable+bx start2:mov ah,9 int 21h .exit 0 disp1: mov dx,offset msg1;处理程序1 jmp start2 Disp2: . end 9191 第 5 章 基 本 汇 编 语 言 程 序 设 计 习题5.4 习题分析 4.4 编写一个程序,把从键盘输入的一个小写字母 用大写字母显示出来。 框图:(省略输入字符的判断:简单的顺序程序 ) 1号调用:输入字符 ALAL-20H 2号调用:显示字符 结 束 9292 第 5 章 基 本 汇 编 语 言 程 序 设 计 5.5 4.5 已知用于LED数码管显示的代码表为: LEDTABEL DB 0C0H,0F9H(共16项数据) 依次表示09,AF这16个数码的显示代码,编写 一个程序实现将lednum中的一个数字转换成对应的 LED显示代码。(查表程序) BX代码表首地址 ALlednum 执行指令XLATAL中即为所求的显示代码 9393 第 5 章 基 本 汇 编 语 言 程 序 设 计 5.8 4.8 如果在例题4.4的tabel中依次添入msg1 msg8,程序应该如何修改?(Tabel dw msg1,.) mov bx,ax mov bx,ax jmp tabelbx mov dx,tabelbx Start2: mov ah,9 mov ah,9 int 21h int 21h .exit 0 .exit 0 end 程序变得更加简单 。 取显示信息 偏移地址 取转移地 址送IP 9494 第 5 章 基 本 汇 编 语 言 程 序 设 计 5.9 4.9 编制一个程序,将变量BUFX、BUFY中较大者送 入BUFZ;若两者相等,则把其中之一送入BUFZ中。 设变量为无符号8位数。 ALBUFX CMP AL,BUFY AL小于BUFY? ALBUFY BUFZAL Y N DONE: JAE DONE 9595 第 5 章 基 本 汇 编 语 言 程 序 设 计 5.10 4.10 设变量bufX为有符号数,编程将其符号状态 保存在singX,如X大于等于0,保存0;如X小于0, 保存-1。 该题为一个可以演变成单分支的双分支结构: 测试bufX符号 0 -1singX 0singX next Y 0singX 测试bufX符号 0 -1singX next Y 9696 第 5 章 基 本 汇 编 语 言 程 序 设 计 5.11 4.11 X、Y、Z是三个有符号16位数(教材误印为16 进制数),编写程序: 1)三个数都不相等,显示0; 2)有两个数相等,显示1; 3)三个数都相等,显示2。 三个数比较,应有5种情况: X=Y=Z 显示2 X=YZ 显示1 X=ZY 显示1 XY=Z 显示1 XYZ 显示0 编程时必须要考虑到所有5种情况。 9797 第 5 章 基 本 汇 编 语 言 程 序 设 计 5.11框图 X-Z X=Y=ZX=YZXY=ZX=ZY ZF=1 X-Y X-Z Y-Z XYZ ZF=1 ZF=1 ZF=0 ZF=0 ZF=1 ZF=0 9898 第 5 章 基 本 汇 编 语 言 程 序 设 计 5.13 4.13 例题4.8内外循环次数共是多少?如果要求从 大到小排序,程序如何修改? 待排序的数据共20项外循环次数为19次,每轮 外循环中对应的内循环次数如下: 第1轮 内循环次数19 第2轮 18 第18轮 2 第19轮 1 因此,内循环次数共19+18+17+2+1=190 ,内外循环总数为190+19=209次。 如果要求从大到小排序,每次比较时只要保证 后面的数不大于前面的数,则第一轮外循环结束后 ,最小的数就排在了最后。 9999 第 5 章 基 本 汇 编 语 言 程 序 设 计 5.16 4.16 编程实现把键入的一个字符,用二进制形式 (0/1)显示出它的ASCII码值。A显示 01000001 1号功能调用(AL) CX8 AL左移(循环左移)1位 CF=0? MOV DL,31H MOV DL,30H A B B MOV AH,2 INT 21H 循环结束? 结束 Y N A 0 1 100100 第 5 章 基 本 汇 编 语 言 程 序 设 计 5.20 4.20 编程判断主存0070:0开始的1KB中有无字符 串DEBUG。 DS0070H;BX0;CX1024-5 CMP BYTE PTRBX,D 是D? SIBX;SISI+1 CMP BYTE PTRSI,E 是E? SISI+1 是B? SISI+1 是U? SISI+1 是G? A A 设置找到标志 结束 B B BXBX+1 查完? 结束 N 101101 第 5 章 基 本 汇 编 语 言 程 序 设 计 5.21 4.21 编程将一个16位无符号数转换成5位BCD码。 转换算法为:二进制数除以10000,商为万位 ,再用余数除以1000,得到千位,依次可以得到百 位、十位、个位。 另外,也可以仿照例题4.14的算法,先得到个 位,然后依次得到十位、百位、千位、万位。 102102 第 5 章 基 本 汇 编 语 言 程 序 设 计 5.22 4.22 过程定义的一般格式?子程序入口为什麽常 有PUSH指令,出口为什麽POP指令?下面的程序段 有无不妥?若有请改正。 CRRAY PROC PUSH AX XOR AX,AX XOR DX,DX AGAIN:ADD AX,BX ADC DX,0 INC BX INC BX LOOP AGAIN RET ENDP CRRAY 位置不对 如果需要保护AX,缺POP AX。 实际上DX AX为出口参数, 两个寄存器都不能保护和 恢复;BX携带入口参数, 可保护也可不保护。当然 , 有保护,势必有恢复。 103103 第 5 章 基 本 汇 编 语 言 程 序 设 计 5.27 4.27 按如下子程序说明编写过程: ;子程序功能:把用ASCII码表示的两位十进 制数转换为对应的二进制数 ;入口参数:DH=十位数的ASCII码 DL=个位数的ASCII码 ;出口参数:AL=对应的二进制数 如果用ASCII码表示的十进制数为多位数,可 参照例题4.13进行处理,此题只有两位十进制数, 简单。 104104 第 5 章 基 本 汇 编 语 言 程 序 设 计 5.28 4.28 写一个子程序,根据入口参数AL=0/1/2,分 别实现大写字母转换成小写、小写转换成大写或大 小写相互转换。欲转换的字符串在string中,用0 结束。 子程序中有三个分支,每个分支完成不同的转 换,转换过程可参照例题4.7。 转入分支的方法:2种。 注意,每个分支的结束点都应有一条JMP指令 ,跳转到恢复现场、返回主程序的程序段。 105105 第 5 章 基 本 汇 编 语 言 程 序 设 计 5.29 4.29 编制一个子程序,把一个16位二进制数用十 六进制形式显示。分别运用三种参数传递方法,并 用一个主程序验证。 1)采用AX寄存器传递16位二进制数 2)采用wordTEMP变量传递16位二进制数 3)采用堆栈传递16位二进制数 16位二进制数可以用4位十六进制数表示,该 问题演变成将4位二进制数转换成ASCII码,转换过 程可参照例题4.10,或参照本课件“具有局部变量 的子程序”使用查表法编写。 应先转换最高4位二进制数,然后依次转换。 106106 第 5 章 基 本 汇 编 语 言 程 序 设 计 二进制数转换成ASCII码总结 二进制数转换成ASCII码总结: 1.二进制数转换成二进制形式的ASCII码 如习题4.16:01000101B30H 31H 30H 2.二进制数转换成十六进制形式ASCII码 4位二进制数0-9,A-F 3.二进制数转换成十进制形式的ASCII码 (二进制数转换成BCD码) 二进制数除以10,得到个位,再除以10,得到 十位, 也可参照习题4.21的方法,先得到最高位 ,然 后依次得到低位。 反向转换可自行总结。 107107 第 5 章 基 本 汇 编 语 言 程 序 设 计 实验评讲 乘法运算:若A=245,B=43, D=6405,E=-2,编程计算A*B ,D*E DATAS SEGMENT A DB 245 B DB 43 CC DW ? D DW 6405 E DW 0FFFEH S1 DW ? S2 DW ? DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV AL,A MUL B MOV CC,AX MOV AX,D IMUL E MOV S1,AX MOV S2,DX MOV AH,4CH INT 21H CODES ENDS END START 偏移量内存数值十进制 0000F5245 00012B43 0002 0003 0004056405 000519 0006FE-2 0007FF 0008 0009 000A 000B 偏移量内存数值 十进制 0000F5245 00012B43 00022710535 000329 0004056405 000519 0006FE-2 0007FF 0008F6-12810 0009CD 000AFF 000BFF 108108 第 5 章 基 本 汇 编 语 言 程 序 设 计实验评讲 实验3.6 键盘输入2个一位十进制数加法运算,并 显示输出
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国冷饮纸杯行业市场全景分析及前景机遇研判报告
- 教师晋级评价总结
- 2024年度浙江省二级造价工程师之土建建设工程计量与计价实务综合检测试卷B卷含答案
- 行政部门半年工作总结
- 医院护理安全管理
- 专题:根据汉语提示填空 七年级英语下册期末复习考点培优专项鲁教版(五四学制)(含答案解析)
- 高考历史核心考点押题预测 改革开放(含解析)
- 自考本科艺术教育
- 幼儿园小班数学《小狗请客》课件
- 幼儿园小班美术教案《画妈妈》
- 2023年湖南省常德市中考地理试卷【附答案】
- (更新版)国家开放大学电大《计算机绘图(本)》网考形考作业试题及答案
- 扩频通信中直接扩频系统的同步技术
- 项目部内审检查表
- 春雨计划患教指南-高血压治疗与合理用药
- 学校校本课程开辟汇报材料
- GB/T 42103-2022游乐园安全风险识别与评估
- 棒球运动主题教育PPT模板
- 级本科诊断学绪论+问诊
- GB 14648-1993民用航空器飞行事故等级
- GA 1800.5-2021电力系统治安反恐防范要求第5部分:太阳能发电企业
评论
0/150
提交评论