鱼C论坛

 找回密码
 立即注册
查看: 4573|回复: 14

[汇编作业] 两个32位无符号数乘法程序

[复制链接]
发表于 2018-11-18 17:20:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
data                segment
mulnum                 dw                0000,0ffffh,0000,0ffffh,4 dup(?)
data                ends
stack                segment para stack'stack'
                        db                100 dup(?)
stack                ends
code                segment
                        assume cs:code,ds:data,
                                ss:stack,es:data
start                proc                far
begin:                push                ds       
                        mov                ax,0
                        push                ax       
                        mov                ax,data
                        mov                ds,ax
                        mov                es,ax       
                        lea                bx,mulnum
mulu32:                mov        ax,[bx]               
                        mov        si,[bx+4]               
                        mov        di,[bx+6]               
                        mul        si                       
                        mov        [bx+8],ax               
                        mov        [bx+0ah],dx
                        mov        ax,[bx+2]               
                        mul        si                       
                        add        ax,[bx+0ah]
                        adc        dx,0       
                        mov        [bx+0ah],ax
                        mov        [bx+0ch],dx       
                        mov        ax,[bx]       
                        mul        di
                        add        ax,[bx+0ah]
                        adc        dx,[bx+0ch]
                        mov        [bx+0ah],ax
                        mov        [bx+0ch],dx
                        pushf                       
                        mov        ax,[bx+2]
                        mul        di
                        popf
                        adc        ax,[bx+0ch]
                        adc        dx,0
                        mov        [bx+0ch],ax
                        mov        [bx+0eh],dx
                        ret
start                endp
code                ends
end                begin

为什么在MSAM上link时会出错!!!!!!!
求助大佬们,在线等

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-23 11:35:09 | 显示全部楼层
上面代码有的地方误用全角字符了,修改了以下几处,编译连接正常。
1. assume cs:code,ds:data,ss:stack,es:data (写成一行)
2. mulu32:   mov  ax,[bx] (中括号误用了全角)
3. mov [bx+0ch],dx (逗号误用了全角)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-25 14:14:09 | 显示全部楼层
superbe 发表于 2018-11-23 11:35
上面代码有的地方误用全角字符了,修改了以下几处,编译连接正常。
1. assume cs:code,ds:data,ss:stack,e ...

哦哦,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-25 14:19:49 | 显示全部楼层
superbe 发表于 2018-11-23 11:35
上面代码有的地方误用全角字符了,修改了以下几处,编译连接正常。
1. assume cs:code,ds:data,ss:stack,e ...

仿照两个32位数相乘的例子写一个两个64位数相乘,我用的是扩展的寄存器,为什么没有结果输出呢?还有就是两个32数相乘也没有结果输出,在cmd命令行中运行后就是新建了一个cmd命令行,也没有什么输出?感到好困惑?如果你有时间,还望你告知?再次感谢你对问题的回答。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-25 20:54:29 | 显示全部楼层
程序中没有添加输出结果的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-26 13:00:26 | 显示全部楼层
superbe 发表于 2018-11-25 20:54
程序中没有添加输出结果的代码

怎么添加还望大佬指点指点,我的汇编没有学好,万分感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-27 15:17:40 | 显示全部楼层
本帖最后由 superbe 于 2018-11-27 15:28 编辑

添加了显示代码 看这样行不行。我也是初学哈。上传的代码显示不正常,只好上传文件了。
mulu32.jpg

mulu32.rar

956 Bytes, 下载次数: 11

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-11-28 09:40:49 | 显示全部楼层
superbe 发表于 2018-11-27 15:17
添加了显示代码 看这样行不行。我也是初学哈。上传的代码显示不正常,只好上传文件了。

为什么你的代码在我的MASM 615中运行出错,我在虚拟机中xp系统中装的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-28 09:41:24 | 显示全部楼层
水柔炎 发表于 2018-11-28 09:40
为什么你的代码在我的MASM 615中运行出错,我在虚拟机中xp系统中装的

能把你的.exe文件发一下吗?谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-28 12:17:02 | 显示全部楼层
我把assume cs:code....一行放错地方了(在masm5.0里不报错),你还放到原来code segment下,masm6.15就不报错了。
虚拟机xp在cmd窗口下运行如果没有显示结果,按Alter+Enter把cmd窗口全屏再执行。
感觉还是dosbox好用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-11-28 15:06:44 | 显示全部楼层
superbe 发表于 2018-11-28 12:17
我把assume cs:code....一行放错地方了(在masm5.0里不报错),你还放到原来code segment下,masm6.15就不报 ...

谢谢,看到结果了,非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-28 15:11:58 | 显示全部楼层
superbe 发表于 2018-11-28 12:17
我把assume cs:code....一行放错地方了(在masm5.0里不报错),你还放到原来code segment下,masm6.15就不报 ...

如果不用子程序调用,是否可以写出两个64位数字相乘,得到一个128位的数字,用eax等寄存器
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-5 11:31:01 | 显示全部楼层
参考上面32位改写的64位乘法的程序,在masm32下编译连接,CMD窗口下运行。验证下结果对不对。
mulu64.jpg

mulu64.rar

1.69 KB, 下载次数: 2

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-5 11:37:54 | 显示全部楼层
Project->Console Assemble & Link。包里有EXE文件。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-5 16:54:57 | 显示全部楼层
superbe 发表于 2018-12-5 11:37
Project->Console Assemble & Link。包里有EXE文件。

谢谢,我已经知道了,我们的老师讲解了,他用.386的写了出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 09:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表