2018最新汇编语言实现浮点小数的乘法.ppt

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据ASCII码转换的程序流程图 数据的存储的程序流程图 数据的转换及计算的程序流程图 数据逆转换的程序流程图 数据逆ASCII码转换及显示的程序流程图 程序代码 汇编语言实现浮点小数的乘法 程序设计总体思路: 小数的乘法利用C语言非常简单,利用汇编则 需要考虑很多问题,此程序的设计思路如下: 1、对运算的数据逐位的输入、判断、存储; 包括:符号、小数点,整数、小数小数位; 2、对于带符号的数,先对其绝对值进行运算; 3、对于小数的计算利用汇编比较繁琐,此程序 将小数转换成整数进行相乘的运算 4、由整数相乘的结果,正确的分离出原数据的 整数部分和小数部分 5、判断结果的符号、整数的位数,小数的位数, 逐位的分离并输出显示 程序设计思路: (1)两个浮点小数的输入 将两个小数逐位的输入,同时逐位经过判断符号位、整数位、小数点位、小数位,并实现数字由ASCII码向数值的转换,最终完成两个小数的输入。输入过程中,对符号个数(0、1、2)、整数位个数及小数位个数做出记录,输入后,符号的个数、整数、整数、小数点标志位、小数和小数的位数存放到不同的存储空间内。 例:-3.28的输入 (2)小数向整数的转换 根据对两个小数各自的小数位个数的记录,将小数的整数部分扩大相应的倍数后,与小数的小数部分相加,实现将小数调整为整数。 例:浮点小数3.14的转换。 (3)整数的乘法 将两个小数转化为整数后,用乘法指令实现两数的相乘,得到乘积。 例: (4)整数向小数的转换 由两个浮点数的小数位数的记录,可以轻易的获得整数向小数转变时的相应倍数。 例: (5)计算结果的转换及其显示 同样根据浮点数的整数位个数和小数位个数,获得各自的位数,进而进行各位的分离以及由数值向ASCII码的逆向转换,并逐位的显示。这里需要指出的是,显示时,符号根据符号位的值(0、1、2)进行判断。另外,在整数和小数部分需要显示小数点“.”。 (6)补充 此算法在计算过程中不考虑数的符号,统一的在计算结束后根据符号标志位进行判断。 总程序流程图 数据ASCII码的输入 数据的存储 数据的计算 数据的转换 数据逆ASCII码转换 数据逆转换 数据ASCII码转换 计算结果的显示 程序流程图 数据a输入 回车/空格? “-”? “.”? “0-9”? 数据b输入 回车/空格? “-”? “.”? “0-9”? 存储并结束数据输入 是 标志位加1 标志位加1 转化存入相应位 符号 标志位加1 标志位加1 转化存入相应位 小数点 整数/小数 整数/小数 符号 小数点 是 是 是 是 是 是 是 否 否 否 否 否 否 一、 数据a和b输入的程序流程图 需要指出:数据是逐位输入的, 所以每输入一位,立即进行相 应的ASCII码的转换,其转换 的流程图见下一页! 程序流程图 输入ASCII数据 符号标 志位+1 是否结束 是否“—” 是否‘.‘ 符号标 志位+1 是否0-9 由ASCII码转换为数字并存储 输入b/结束 是 是 是 是 否 否 否 否 程序流程图 ‘0—9’的数据 小数点标志位是否为‘1’ 数据存入整数部分 数据存入小数部分 输入1位小数位数+1 是否结束 结束 是 是 否 否 程序流程图 数据的整数部分 小数位数 标志位减1 为0 整数部分×10存入原始地址 整数于小数 部分相加 数据转换结束 数据的计算: 当数据a和数据b都完成上述 转换后,就完成了由小数到 整数的转换,再用MUL汇编 指令即可实现两数的相乘。 注意数据的保存,及标志位 的保护。 是 否 程序流程图 计算结果 小数位数和 减1为0 计算结果 逆转换结束 计算结果 整数与小数分离 计算结果÷10商存入原计算结果,余数存入原小数部分 是 否 程序流程图 输出‘—’ 符号位 是否为2 符号位 是否为0 符号位 是否为1 否 否 是 分离出整数的各位,调整为ASCII码,并显示 输出显示小数点 分离出小数的各位,调整为ASCII码,并显示 是 是 stack segment stack db 1024 dup(0) stack ends data segment act db 0; aint dw 0;//数a的整数部分 aflt dw 0;//数a的小数部分 bint dw 0;//数b的整数部分 bflt dw 0;//数b的小数部分 dota db 0;//数a的小数点标志值位 ca db 0; //数a的小数位个数位 dotb db 0; //数b的小数点标志值位 cb db 0; //数b的小数位个数位 sign db 0; //数a、b的

文档评论(0)

高江辉 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档