汇编语言实现浮点相乘的程序Word文档格式.docx

上传人:b****7 文档编号:22855734 上传时间:2023-02-05 格式:DOCX 页数:13 大小:110.14KB
下载 相关 举报
汇编语言实现浮点相乘的程序Word文档格式.docx_第1页
第1页 / 共13页
汇编语言实现浮点相乘的程序Word文档格式.docx_第2页
第2页 / 共13页
汇编语言实现浮点相乘的程序Word文档格式.docx_第3页
第3页 / 共13页
汇编语言实现浮点相乘的程序Word文档格式.docx_第4页
第4页 / 共13页
汇编语言实现浮点相乘的程序Word文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

汇编语言实现浮点相乘的程序Word文档格式.docx

《汇编语言实现浮点相乘的程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《汇编语言实现浮点相乘的程序Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

汇编语言实现浮点相乘的程序Word文档格式.docx

操作数组合及功能

举例

无符号数乘法

MULsrc

AX=AL*r8、m8

DX.AX=AX*r16/m16

EDX.EAX=EAX*r32/m32

mulbl

imulbx

muldvar

有符号数乘法

IMULsrc

双操作数乘法

IMULdest,src

r16=r16*r16/m16/i8/i16

r32=r32*r32/m32/i16/i32

imuleax,10

imulebx,ecx

三操作数乘法

IMULdest,src,imm

r16=r16/m16*/i8/i16

r32=r32*m32/i8/i32

imulax,bx,-2

Imuleax,ebx,5

除法指令

无符号数除法

DIVsrc

AL=AX÷

r8/m8的商,AH=AX÷

r8/m8余数

AX=DX.AX÷

r16/m16的商,DX=DX.AX÷

r16/m16余数

EAX=EDX.EAX÷

r132/m32的商,EDX=EDX.EAX÷

r32/m32余数

Divbl

Idivbx

Dibebx

有符号数除法

IDIVsrc

2.缓存区的定义

readbuf1byte256dup(0)

3.算法

1)数据存储:

汇编语言只能进行整数相乘的计算,所以我们可以通过键盘将输入的浮点数通过字符记录到缓冲区中,每输入一个字符,内部程序对该字符进行判断是数字还是小数。

2)将小数转化成整数并记录:

如果是数字,则储存在缓冲区的是ASCII码,所以应该减去30H,然后通过乘10累加的形式得到整数。

3)如果是小数点:

记录小数点所在位置,同时指向下一位字符

4)例如4.32这个数字。

将它以字符的形式存入缓冲区中,并记录字符数:

4。

通过指针指向缓冲区地址,读取字符’4’,他的ASCII码是34H。

34H-30H=4H,4*10=40,保存40这个值。

指针加一,读取’.’。

软件流程图:

浮点字符串转换成整数流程图:

调试过程和步骤:

1.程序代码:

includeio32.inc

.data

msg1byte'

请输入第一个数字'

13,10,0

msg2byte'

请输入第二个数字'

13,10,0

readbuf1byte256dup(0)

readbuf2byte256dup(0)

numbyte00h;

记录负号个数

.code

start:

xorecx,ecx

xorebx,ebx

moveax,offsetmsg1

calldispmsg

moveax,offsetreadbuf1;

设置入口参数eax

callreadmsg;

调用输入字符串子程序

movedx,eax;

edx记录字符位数

pushedx;

字符位数压入堆栈保护--------压入堆栈

movesi,offsetreadbuf1;

esi指向readbuf1

cmpbyteptr[esi],'

-'

jzagain3

again1:

.'

jnzagain2

pushecx;

堆栈ecx----------

incesi

decedx

again2:

incecx;

read2循环字符为数字时

moval,[esi]

subal,30h

imulebx,10

movzxeax,al

addebx,eax

cmpedx,00H

jnzagain1

jmpdone1

again3:

;

read1记录负号数num

incnum

jmpagain1

done1:

done保护ebx,小数化成的整数,ecx小数位数-----------压入堆栈

pushebx

popebx

popecx

popedx

subedx,ecx

pushedx

;

------------------------------------------------------------------

moveax,offsetmsg2

moveax,offsetreadbuf2;

movesi,offsetreadbuf2;

jzagain6

again4:

jnzagain5

again5:

jnzagain4

jmpdone2

again6:

jmpagain4

done2:

popebx;

ebx存入换算后的数据二整数

popedx

decedx;

edx存入数据二小数位数

popecx;

数据一的小数位数

popeax;

数据一的整数

addecx,edx

imuleax,ebx

movebx,1

done3:

dececx

cmpecx,0

jnzdone3

movedx,0

divebx

calldispuid

moveax,'

calldispc

moveax,edx

-------------------------------------------------------------------

exit0

endstart

2.调试过程:

1)在D:

\32位微机配套软件dos16\MASM目录下新建一个asm文档,名为float

2)打开并编写程序

3)打开D:

\32位微机配套软件dos16\MASM目录下该图标:

4)

5)

6}

实验结果:

Matlab计算结果:

结果分析:

用汇编语言编写的程序计算结果和MATLAB计算结果一致。

而且比MATLAB计算结果更精确。

结束语:

通过本作业,更加深了对乘法指令特别是除法指令的使用细节。

加深了对缓存区的理解以及堆栈“先进后出”的理解。

唯一的一个遗憾是没有实现带符号的浮点数相乘。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 韩语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1