- 1、本文档共29页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
黄强 汇编 第6章数值和非数值程序设计
在汇编语言程序设计中,常常遇到数值运算问题和非数值处理问题。其中常见的数值运算是加、减、乘、除四则运算。相比来讲,使用汇编语言完成数值运算远比使用高级语言难以实现。因为汇编语言的指令语句所提供的运算位数是有限的,且每条指令的功能是有限的。数值运算有定点数运算和浮点数运算。由于数的表达方式不同,它们的运算方法也不同。随着计算机的发展,非数值处理如代码转换、字符处理、表处理、 检索排序等的使用已经超过了数值运算程序设计,因而也是我们重点掌握的内容。 本章以定点数运算为主介绍数值程序设计,并以代码、字符、表等的处理介绍非数值程序设计。;6.1 数值运算程序设计;6.1.2 加法运算; 【例6.1 】 在以DAT0和DAT1开始的缓冲区中各有一组二进制数,低字节放在低地址,高字节放在高地址。其字节长度都为10,编程求其和,结果存于DAT2开始的缓冲区。 分析:本题显然属于多字节二进制数加法,为确保运算结果的精度,使用多字节定点加法运算。程序中用加法指令实现字节相加运算,而多字节相加则用循环程序实现。首先从低字节开始加,每循环一次完成一个字节的相加运算,然后再进行高字节加法运算,依次类推。循环次数即参加运算的字节数。需要注意的是,高字节相加时应考虑低字节相加可能的进位。程序如下:;【例6.2 】在以DAT0和DAT1开始的缓冲区中各有一组压缩的BCD数,其字节长度为8,低位数位于低地址,编程求其和,结果存于DAT2开始的缓冲区。 分析:本题同例6.1类似,也属于多字节二进制数加法,只不过参与运算的是压缩的BCD数,同样使用多字节加法运算完成。程序如下:; 可以看出,压缩BCD数的加法运算与二进制数加法运算所用的方法是基本相同的,只不过BCD数的运算要用DAA指令进行十进制调整。对于非压缩的BCD数,其加法运算同上面的方法一致,只是调整指令换成了AAA。;6.1.3 减法运算; 【例6.3 】在以DAT0和DAT1开始的缓冲区中各有一组二进制无符号数,低字节放在低地址,高字节放在高地址。其字节长度都为8,编程求其差,结果存于DAT2开始的缓冲区。(注:不考虑借位)。 分析:本题属于多字节二进制数减法,使用多字节减法运算完成。程序如下:; 【例6.4 】在以DAT0和DAT1开始的缓冲区中各有一组8位非压缩的BCD数,低位数位于低地址,编程求其差,结果显示在屏幕上。 分析:本题属于多字节BCD数减法运算,同样使用以上的程序结构完成。程序如下:;6.1.4 乘法运算; 【例6.5 】在内存字单元W1和字节单元B1各有一个有符号数为-128H和0A1H,求其乘积,结果存入W2开始的单元中。 分析:本题为一个16位有符号数同一个8位有符号数进行乘法运算。由于乘数与被乘数的位数应该相同,故将8位的有符号数进行字节扩展,使之变成16位的有符号数,再进行乘法运算。程序如下:; 【例6.6 】在以DAT为首地址的缓冲区中有一个6个字节的二进制无符号数,将其与字节单元B1中的一位无符号数相乘,结果存入RSLT开始的缓冲区。 分析:本题的实现并不复杂,只需将6个字节的数据作为被乘数,其每一个字节依次与B1中的乘数相乘再保存结果即可。只是乘数每次与较高字节的乘积还要加上低位的进位,就象普通的乘法运算一样。程序如下:; 本例是多位被乘数与一位乘数相乘,有关被乘数与乘数都是多字节的情况,可用类似的方法解决。本例中二进制数乘法运算的方法同样适用于其它进制,非压缩的BCD数乘法运算也可以使用本方法,只是每次乘法运算完毕后都要用AAM进行相应的十进制调整。下面举例说明。; 【例6.7 】在以DAT为首地址的缓冲区中有一个6位非压缩的BCD数,低位数位于低地址,将其与字节单元B1中非压缩的BCD数相乘,结果存入RSLT开始的缓冲区。要求用子程序完成非压缩BCD数的乘法运算。 分析:本题同例6.6的编程方法是相似的,只是牵涉到子程序设计。我们用BCDM子程序完成乘法运算,子程序与主程序之间采用寄存器和存储单元传递参数。程序如下:; 【例6.8】在B1和B2单元分别有一个两位压缩的BCD数,求其乘积,结果存入RSLT开始的缓冲区。要求用子程序完成压缩BCD数的乘法运算。 分析:对于压缩BCD数的乘法运算,并没有专门的十进制调整指令,故不能直接用两数相乘的方法。但我们知道,一个被乘数m乘以乘数n相当于被乘数m累加n次。而压缩BCD数的加法运算有相应的十进制调整指令,所以本题可用BCD数累加的方法完成。由于两位BCD数相乘结果可能为3位BCD数,故保留两个字节存储单元用于存储乘积。程序如下:;6.2 数据处理程序设计;6.2.2 代码转换
您可能关注的文档
最近下载
- 罗宾斯组织行为学第18版英文教学课件robbinsjudge_ob18_inppt_18.pptx
- 2024年6月英语四级真题(全3套).pdf
- 罗宾斯组织行为学第18版英文教学课件robbinsjudge_ob18_inppt_17.pptx
- 罗宾斯组织行为学第18版英文教学课件robbinsjudge_ob18_inppt_16.pptx
- 罗宾斯组织行为学第18版英文教学课件robbinsjudge_ob18_inppt_15.pptx
- 医院诊所药品医疗器械的效期管理制度.doc
- 工业机器人应用基础 课件 模块四 工业机器人的典型应用实训.pptx
- 罗宾斯组织行为学第18版英文教学课件robbinsjudge_ob18_inppt_14.pptx
- 小学六年级数学百分数知识点总结.docx VIP
- 罗宾斯组织行为学第18版英文教学课件robbinsjudge_ob18_inppt_13.pptx
文档评论(0)