已阅读5页,还剩73页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章,算术运算与代码转换程序设计,第6章算术运算与代码转换程序设计,6.1加减法运算程序设计6.2乘除法运算程序设计6.3串操作程序设计6.4代码转换程序设计6.5排序与查找程序设计,第6章算术运算与代码转换程序设计,6.1加减法运算程序设计6.2乘除法运算程序设计6.3串操作程序设计6.4代码转换程序设计6.5排序与查找程序设计,6.1加减法运算程序设计,二进制加减运算十进制加减运算,二进制加减运算,6.1加减法运算程序设计,如果加减法运算的操作数是8位或16位的二进制数,而运算结果也在此范围内,那么用一条基本加减运算指令就可以完成。实际上,我们所面对的数据经常会超过8位、16位的范围,这就是多字节数的二进制加减运算。,二进制加减运算,6.1加减法运算程序设计,例6.1两个多字节无符号数分别存放在内存DATA1和DATA2开始的单元,数据长度存放在LEN单元,编程求两数之和,将结果存放在SUM开始的单元。,二进制加减运算,6.1加减法运算程序设计,多字节数相加运算应考虑的问题有:(1)数据长度可存储在计算机中,也可定义成常量。(2)为简化程序,应采用循环结构作程序主体。(3)最低字节相加与其他字节相加有所不同。(4)两个无符号数相加的最高字节产生的进位应处理成结果的最高字节,两个带符号数相加可能需要做溢出处理。,二进制加减运算,6.1加减法运算程序设计,注释1:清除进位标志,使最低字节的加法也可以利用循环体中的ADC指令。,注释2:在本次加法和下次加法间的语句都不影响进位标志,是为了保证相继高字节相加时,加入的是相应低字节产生的进位状态。如果含有影响进位标志的语句,则需要在本次加法后用LAHF保存标志,在下次加法前用SAHF恢复标志。,十进制加减运算,6.1加减法运算程序设计,以4位二进制数对十进制数进行编码有两种情况。在一个字节中只含一个BCD码为非压缩型,其加减法调整指令分别为AAA和AAS。在一个字节中含两个BCD码为压缩型,其加减法调整指令分别为DAA和DAS。需要注意的是,调整指令要求加或减的结果一定在AL中。,十进制加减运算,6.1加减法运算程序设计,例6.2两个单字节非压缩BCD码数据分别存放在内存的DATA1和DATA2单元中,编程求两数的和与差,分别将结果存入SUM和DIF单元。,十进制加减运算,6.1加减法运算程序设计,十进制加减运算,6.1加减法运算程序设计,例6.3两个压缩BCD码数据分别存放在内存的DATA1和DATA2单元中,编程求两数之差,将结果存入DIF单元。,十进制加减运算,6.1加减法运算程序设计,Eg.6_3.s,第6章算术运算与代码转换程序设计,6.1加减法运算程序设计6.2乘除法运算程序设计6.3串操作程序设计6.4代码转换程序设计6.5排序与查找程序设计,6.2乘除法运算程序设计,如果被乘数和乘数的长度不超过两个字节,或者被除数的长度不超过四个字节、除数的长度不超过两个字节,就可以直接使用8086.8088提供的乘除法指令实现乘除法运算。如果超过了这个范围,就要与其他指令配合,通过程序段实现多字节的乘除法。,6.2乘除法运算程序设计,二进制乘法运算二进制除法运算,二进制乘法运算,6.2乘除法运算程序设计,乘法的目的操作数必须存放在AX中(或AL中),对应的乘积存放在DX及AX中(或AX中),乘法的源操作数可以是立即数寻址之外的任何寻址方式。,二进制乘法运算,6.2乘除法运算程序设计,例6.4两个多字节无符号数分别存放在内存DATA1和DATA2开始的单元,数据长度分别存放在LEN1和LEN2单元中,编程求两数的乘积,将结果存放在PRDT单元。分析:设被乘数的长度为L1,乘数的长度为L2,那么需要进行L1*L2次乘法运算,得到L1*L2个部分积,从而将多字节乘法转换成相应部分积的加法。,二进制乘法运算,6.2乘除法运算程序设计,Eg.6_4.s,二进制除法运算,6.2乘除法运算程序设计,除法的目的操作数必须存放在DX及AX中(或AX中),对应的商存放在AX中(或AL中),余数存放在DX中(或AH中),除法的源操作数可以是立即数寻址之外的任何寻址方式。无符号除法指令DIV要求被除数的高字节小于除数,否则产生溢出。,二进制除法运算,6.2乘除法运算程序设计,例6.5无符号被除数和除数分别存放在内存DATA1字单元和DATA2字节单元中,编程求两数的商和余数,分别存放在QUO和REM单元。被除数为字,除数为字节的无符号除法,如果被除数的高字节不小于除数就会产生溢出。避免的方法是对被除数和除数进行前插0扩展,分别成为双字和字。,二进制除法运算,6.2乘除法运算程序设计,第6章算术运算与代码转换程序设计,6.1加减法运算程序设计6.2乘除法运算程序设计6.3串操作程序设计6.4代码转换程序设计6.5排序与查找程序设计,6.3串操作程序设计,一组仅由字或字节组成的数据称为数据串。一个数据串最多可由64K字节组成。串操作指令规定源寄存器使用SI,源串隐含存放在DS段中,也可通过段跨越指出;目的寄存器使用DI,目的串隐含存放在ES段中,而且必须在ES段,不可进行段跨越。串操作指令的执行将自动修改SI、DI的值,修改方向由标志寄存器中的DF位确定。,6.3串操作程序设计,例6.6一个字符串的长度为20,存放在数据段中STR1开始的单元,编程把它们传送到附加段中STR2开始的单元。,6.3串操作程序设计,方法1:利用LOOP指令用软件方法重复执行MOVSB的操作,6.3串操作程序设计,方法2:利用REP指令实现MOVSB的操作,6.3串操作程序设计,基本串操作指令在与重复前缀联用时,需要先做好下面的准备工作:(1)将源串首地址(若反向操作则是末地址)存放在SI中;(2)如果是与REP联用,将附加段中的目的串首地址(若反向操作则是末地址)存放在DI中;(3)将数据长度存放在CX中;(4)设置方向标志。,6.3串操作程序设计,例6.7一个字符串以Null(00H)为结束符,存放在以ES:STR为起始地址的单元。一个关键字存放在DS:CHAR单元,编程,在字符串中查找第一个与此关键字相同的字符。如果找到,将相应字符在ES段中的位移量存放在CX中,并将它在字符串中的序号存放在DX中,否则CX置全1。,6.3串操作程序设计,Eg6_7.s,第6章算术运算与代码转换程序设计,6.1加减法运算程序设计6.2乘除法运算程序设计6.3串操作程序设计6.4代码转换程序设计6.5排序与查找程序设计,6.4代码转换程序设计,二进制编码与BCD码之间的转换二、十、十六进制编码与ASCII码之间的转换,二进制编码与BCD码之间的转换,6.4代码转换程序设计,1.十进制数BCD码转换为二进制数2.二进制编码转换为十进制数,二进制编码与BCD码之间的转换,6.4代码转换程序设计,1.十进制数BCD码转换为二进制数将十进制数的高位乘以10,与次高位相加,再乘以10;循环执行,直到处理完十进制数的最低位,十进制数就转换为对应的二进制编码。,二进制编码与BCD码之间的转换,6.4代码转换程序设计,例6.8若干正十进制整数(不大于32767)的ASCII码串存放在内存DSTR开始的单元,串间用逗号(2CH)分隔,最后以回车符(0DH)结束。编程,将每个十进制数的ASCII码串转换为二进制数存放在BIN开始的单元。设入口条件是:SI指向ASCII码串的首地址,转换结果存放在CX中,编制实现将一个十进制ASCII码转换成相应二进制数的子程序如下。,二进制编码与BCD码之间的转换,6.4代码转换程序设计,二进制编码与BCD码之间的转换,6.4代码转换程序设计,二进制编码与BCD码之间的转换,6.4代码转换程序设计,2.二进制编码转换为十进制数将待转换的二进制数除以10取余,所得余数就是转换后十进制数的个位数;再把商作为被除数,除以10取余,所得余数就是转换后十进制数的十位数。依此类推,就可将二进制数转换为相应的十进制数。,二进制编码与BCD码之间的转换,6.4代码转换程序设计,例6.916位无符号二进制数存放在内存BIN16开始的单元。编程,将其转换为相应十进制数的非压缩BCD码,存放在内存DEC5开始的单元。,二进制编码与BCD码之间的转换,6.4代码转换程序设计,设二进制数为1010110010111000B,对应的十进制数为44216D,二进制编码与BCD码之间的转换,6.4代码转换程序设计,二进制编码与BCD码之间的转换,6.4代码转换程序设计,例6.10编写一个单字节无符号二进制整数转换为相应压缩BCD码的子程序。子程序的入口条件是:SI指向二进制数所在单元,转换后的压缩BCD码存放在DI指向的字单元,二进制编码与BCD码之间的转换,6.4代码转换程序设计,二、十、十六进制编码与ASCII码之间的转换,6.4代码转换程序设计,1.二进制数转换为二进制ASCII码串2.二进制ASCII码串转换为二进制数3.十进制数转换为十进制ASCII码串4.十进制ASCII码串转换为十进制数5.十六进制数转换为十六进制ASCII码串6.十六进制ASCII码串转换为十六进制数,二、十、十六进制编码与ASCII码之间的转换,6.4代码转换程序设计,1.二进制数转换为二进制ASCII码串二进制数由0和1组成,转换为ASCII码的方法较为简单。将二进制位从高到低逐位移出,如果移出的是0则转换为30H(0的ASCII码),如果移出的是1则转换为31H(1的ASCII码),如此处理直到最低位,就得到相应的ASCII码串。,二、十、十六进制编码与ASCII码之间的转换,6.4代码转换程序设计,2.二进制ASCII码串转换为二进制数二进制的ASCII码串转换为相应二进制数有两个内容:其一是将各个ASCII码转换为数字0或1,其二是要将转换后的数字逐位组合成为适合存储的字或字节。,二、十、十六进制编码与ASCII码之间的转换,6.4代码转换程序设计,例6.12编程,将从键盘上接收到的16位二进制ASCII码转换成相应的二进制数,存放在以内存BIN16开始的单元。,二、十、十六进制编码与ASCII码之间的转换,6.4代码转换程序设计,二、十、十六进制编码与ASCII码之间的转换,6.4代码转换程序设计,3.十进制数转换为十进制ASCII码串十进制数由09组成,ASCII码是30H39H,到ASCII码的转换只要在数字的基础上加30H(0的ASCII码)即可。,二、十、十六进制编码与ASCII码之间的转换,6.4代码转换程序设计,例6.13十进制数的压缩BCD码存放在以内存DEC5开始的单元,字节数存放在LEN单元。编程,将此十进制数转换为ASCII码串,存放在以内存DASC6开始的单元,并在显示器上显示出来。压缩BCD码的一个字节存放两个十进制位,而一次只能将一个十进制位转换为相应的ASCII码,因此需要将一个字节的高低两部分拆开分别存放在两个字节中。,二、十、十六进制编码与ASCII码之间的转换,6.4代码转换程序设计,设待拆分的字节存放在DL中,拆分后高半部分存放在DH,低半部分存放在DL,子程序编制如下:DISCPROCPUSHCXMOVDH,DL;在DH中保存副本ANDDH,0F0H;高半部分放在DHMOVCL,4SHRDH,CLANDDL,0FH;低半部分放在DLPOPCXRETDISCENDP,Eg6_13.s,二、十、十六进制编码与ASCII码之间的转换,6.4代码转换程序设计,4.十进制ASCII码串转换为十进制数十进制ASCII码减去30H(0的ASCII码)就得到相应的BCD码。,二、十、十六进制编码与ASCII码之间的转换,6.4代码转换程序设计,例6.14编程,将从键盘上接收到的四位十进制ASCII码转换成相应的非压缩BCD码,存放在以内存DEC4开始的单元。,Eg6_14.s,二、十、十六进制编码与ASCII码之间的转换,6.4代码转换程序设计,5.十六进制数转换为十六进制ASCII码串(1)查表法(2)运算法,二、十、十六进制编码与ASCII码之间的转换,6.4代码转换程序设计,(1)查表法例6.15十六进制数的ASCII码表存放在数据段TAB开始的单元,如图所示。编程实现将DX中的4位十六进制数转换为相应的4个ASCII码字符,从高位开始顺序存放在DI所指单元开始的空间。,二、十、十六进制编码与ASCII码之间的转换,6.4代码转换程序设计,二、十、十六进制编码与ASCII码之间的转换,6.4代码转换程序设计,(2)运算法数字09的ASCII码为30H39H,可以直接加上30H;字母AF的ASCII码为41H46H,在直接加上30H后作一次判断,如果是字母就还要加上07H。也可以先作判断,是数字就加30H转换,是字母就加37H转换。,二、十、十六进制编码与ASCII码之间的转换,6.4代码转换程序设计,例6.16编程,将BX寄存器内的二进制数用十六进制数的形式在屏幕上显示出来。,二、十、十六进制编码与ASCII码之间的转换,6.4代码转换程序设计,二、十、十六进制编码与ASCII码之间的转换,6.4代码转换程序设计,6.十六进制ASCII码串转换为十六进制数十六进制ASCII码转换为十六进制数,同样还需要根据对输入字符的判断做出不同的处理。数字的ASCII码减去30H,字母AF的ASCII码减去37H,字母af的ASCII码减去57H。,二、十、十六进制编码与ASCII码之间的转换,6.4代码转换程序设计,例6.17编程,将从键盘上接收的四位十六进制数ASCII码转换为相应的十六进制数存放在以内存HEX4开始的单元中。,二、十、十六进制编码与ASCII码之间的转换,6.4代码转换程序设计,Eg6_17.s,第6章算术运算与代码转换程序设计,6.1加减法运算程序设计6.2乘除法运算程序设计6.3串操作程序设计6.4代码转换程序设计6.5排序与查找程序设计,6.5排序与查找程序设计,排序查找,排序,6.2排序与查找程序设计,1.起泡排序2.插入排序,排序起泡排序,6.2排序与查找程序设计,起泡排序的过程是:首先将第一项与第二项进行比较,若为逆序(a1a2),则将两项互换,然后比较第二项和第三项,依此类推,直至第n-1个元素和第n个元素比较过为止。上述过程称为第一趟起泡排序,其结果是最大值元素被放在表的最后,即第n个位置。然后进行第二趟起泡排序,对前n-1个元素进行同样的操作,结果是将次大值元素放在第n-1个位置。,排序起泡排序,6.2排序与查找程序设计,排序起泡排序,6.2排序与查找程序设计,例6.18数据表存放在以内存TABLE开始的单元。用起泡法编程,将其按递减顺序排序,排序后仍存放在以TABLE开始的单元。,排序起泡排序,6.2排序与查找程序设计,Eg6_18.s,排序插入排序,6.2排序与查找程序设计,插入排序的基本操作是:将一个元素插入到已进行过排序处理的有序表中,从而得到一个新的、元素个数增1的有序表。初始状态是把第一个元素作为有序子表,取第二个元素插入后得到一个含有两个元素的有序子表,再取第三个元素插入后得到一个含有三个元素的有序子表,依此类推,将表中所有元素插入有序子表,排序完成。,排序插入排序,6.2排序与查找程序设计,排序插入排序,6.2排序与查找程序设计,例6.19数据表存放在以内存TABLE开始的单元。用插入法编程,将其按升序排序。,Eg6_19.s,查找,6.2排序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 法治宣传员考试题及答案
- 防火涂料2025检验报告(二)
- 食用油生产加工项目可行性研究报告
- 高效节能环保电机项目可行性研究报告参考模板-图文
- java实现协议书代理
- 项目占股协议书范本
- 快速冷却岛创新创业项目商业计划书
- 多功能印刷品覆膜机创新创业项目商业计划书
- (全国2025年7月)国际市场营销学(二)试题及答案
- 2025能源审计报告评审岗位晋升考核试卷
- 盆腔脓肿诊治中国专家共识(2023年版)
- 中心静脉压的测量方法及临床意义
- 七年级体育与健康 身体检查与体质测试教案
- 店铺(初级)营销师认证考试题库附有答案
- 俄罗斯进口冻肉合同范本
- 2024智能网联汽车自动驾驶功能仿真试验方法及要求
- 现代通信技术导论智慧树知到期末考试答案章节答案2024年北京科技大学
- 煤矿瓦斯抽放规范(AQ1027-2006)
- 安全全年培训计划
- 叙事技巧-如何运用插叙和双线叙事
- 上海野生动物园行业分析
评论
0/150
提交评论