《汇编语言程序设计》第6章 算术运算与代码程序设计课件

上传人:我*** 文档编号:145015591 上传时间:2020-09-15 格式:PPT 页数:78 大小:756.50KB
返回 下载 相关 举报
《汇编语言程序设计》第6章 算术运算与代码程序设计课件_第1页
第1页 / 共78页
《汇编语言程序设计》第6章 算术运算与代码程序设计课件_第2页
第2页 / 共78页
《汇编语言程序设计》第6章 算术运算与代码程序设计课件_第3页
第3页 / 共78页
《汇编语言程序设计》第6章 算术运算与代码程序设计课件_第4页
第4页 / 共78页
《汇编语言程序设计》第6章 算术运算与代码程序设计课件_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《《汇编语言程序设计》第6章 算术运算与代码程序设计课件》由会员分享,可在线阅读,更多相关《《汇编语言程序设计》第6章 算术运算与代码程序设计课件(78页珍藏版)》请在金锄头文库上搜索。

1、第六章,算术运算与代码转换程序设计,第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位的二进制数,而运算结果也在此范围内,那么用一条基本加减运算指令就可以完成。实际上,我们所

2、面对的数据经常会超过8位、16位的范围,这就是多字节数的二进制加减运算。,二进制加减运算,6.1 加减法运算程序设计,例6.1 两个多字节无符号数分别存放在内存DATA1和DATA2开始的单元,数据长度存放在LEN单元,编程求两数之和,将结果存放在SUM开始的单元。,二进制加减运算,6.1 加减法运算程序设计,多字节数相加运算应考虑的问题有: (1)数据长度可存储在计算机中,也可定义成常量。 (2)为简化程序,应采用循环结构作程序主体。 (3)最低字节相加与其他字节相加有所不同。 (4)两个无符号数相加的最高字节产生的进位应处理成结果的最高字节,两个带符号数相加可能需要做溢出处理。,二进制加减

3、运算,6.1 加减法运算程序设计,注释1:清除进位标志,使最低字节的加法也可以利用循环体中的ADC指令。,注释2:在本次加法和下次加法间的语句都不影响进位标志,是为了保证相继高字节相加时,加入的是相应低字节产生的进位状态。如果含有影响进位标志的语句,则需要在本次加法后用LAHF保存标志,在下次加法前用SAHF恢复标志。,十进制加减运算,6.1 加减法运算程序设计,以4位二进制数对十进制数进行编码有两种情况。在一个字节中只含一个BCD码为非压缩型,其加减法调整指令分别为AAA和AAS。在一个字节中含两个BCD码为压缩型,其加减法调整指令分别为DAA和DAS。需要注意的是,调整指令要求加或减的结果

4、一定在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 代码转换程序

5、设计 6.5 排序与查找程序设计,6.2 乘除法运算程序设计,如果被乘数和乘数的长度不超过两个字节,或者被除数的长度不超过四个字节、除数的长度不超过两个字节,就可以直接使用8086.8088提供的乘除法指令实现乘除法运算。如果超过了这个范围,就要与其他指令配合,通过程序段实现多字节的乘除法。,6.2 乘除法运算程序设计,二进制乘法运算 二进制除法运算,二进制乘法运算,6.2 乘除法运算程序设计,乘法的目的操作数必须存放在AX中(或AL中),对应的乘积存放在DX及AX中(或AX中),乘法的源操作数可以是立即数寻址之外的任何寻址方式。,二进制乘法运算,6.2 乘除法运算程序设计,例6.4 两个多字

6、节无符号数分别存放在内存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要求被除数的高

7、字节小于除数,否则产生溢出。,二进制除法运算,6.2 乘除法运算程序设计,例6.5 无符号被除数和除数分别存放在内存DATA1字单元和DATA2字节单元中,编程求两数的商和余数,分别存放在QUO和REM单元。 被除数为字,除数为字节的无符号除法,如果被除数的高字节不小于除数就会产生溢出。避免的方法是对被除数和除数进行前插0扩展,分别成为双字和字。,二进制除法运算,6.2 乘除法运算程序设计,第6章算术运算与代码转换程序设计,6.1 加减法运算程序设计 6.2 乘除法运算程序设计 6.3 串操作程序设计 6.4 代码转换程序设计 6.5 排序与查找程序设计,6.3 串操作程序设计,一组仅由字或字

8、节组成的数据称为数据串。一个数据串最多可由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 串操

9、作程序设计,基本串操作指令在与重复前缀联用时,需要先做好下面的准备工作: (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 串操作程序设

10、计,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;循环执行,直到处理完十进制数的最低位,

11、十进制数就转换为对应的二进制编码。,二进制编码与BCD码之间的转换,6.4 代码转换程序设计,例6.8 若干正十进制整数(不大于32767)的ASCII码串存放在内存DSTR开始的单元,串间用逗号(2CH)分隔,最后以回车符(0DH)结束。编程,将每个十进制数的ASCII码串转换为二进制数存放在BIN开始的单元。 设入口条件是:SI指向ASCII码串的首地址,转换结果存放在CX中,编制实现将一个十进制ASCII码转换成相应二进制数的子程序如下。,二进制编码与BCD码之间的转换,6.4 代码转换程序设计,二进制编码与BCD码之间的转换,6.4 代码转换程序设计,二进制编码与BCD码之间的转换,6

12、.4 代码转换程序设计,2.二进制编码转换为十进制数 将待转换的二进制数除以10取余,所得余数就是转换后十进制数的个位数;再把商作为被除数,除以10取余,所得余数就是转换后十进制数的十位数。依此类推,就可将二进制数转换为相应的十进制数。,二进制编码与BCD码之间的转换,6.4 代码转换程序设计,例6.9 16位无符号二进制数存放在内存BIN16开始的单元。编程,将其转换为相应十进制数的非压缩BCD码,存放在内存DEC5开始的单元。,二进制编码与BCD码之间的转换,6.4 代码转换程序设计,设二进制数为1010110010111000B,对应的十进制数为44216D,二进制编码与BCD码之间的转

13、换,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.十六进制A

14、SCII码串转换为十六进制数,二、十、十六进制编码与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,其二是要将转换后的

15、数字逐位组合成为适合存储的字或字节。,二、十、十六进制编码与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 代码转换程序

16、设计,例6.13 十进制数的压缩BCD码存放在以内存DEC5开始的单元,字节数存放在LEN单元。编程,将此十进制数转换为ASCII码串,存放在以内存DASC6开始的单元,并在显示器上显示出来。 压缩BCD码的一个字节存放两个十进制位,而一次只能将一个十进制位转换为相应的ASCII码,因此需要将一个字节的高低两部分拆开分别存放在两个字节中。,二、十、十六进制编码与ASCII码之间的转换,6.4 代码转换程序设计,设待拆分的字节存放在DL中,拆分后高半部分存放在DH,低半部分存放在DL,子程序编制如下: DISC PROC PUSH CX MOV DH,DL ;在DH中保存副本 AND DH,0F0H ;高半部分放在DH MOV CL,4 SHR DH,CL AND DL,0FH ;低半部分放在DL POP CX RET DISC ENDP,Eg6_13.s,二、十、十六进制编码与ASCII码之间的转换,6.4 代码转换程序设计,4.十进制ASCII码串转换为十进制数

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号