水柔炎 发表于 2018-11-18 17:20:01

两个32位无符号数乘法程序

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,               
                        mov        di,               
                        mul        si                       
                        mov        ,ax               
                        mov        ,dx
                        mov        ax,               
                        mul        si                       
                        add        ax,
                        adc        dx,0       
                        mov        ,ax
                        mov        ,dx       
                        mov        ax,       
                        mul        di
                        add        ax,
                        adc        dx,
                        mov        ,ax
                        mov        ,dx
                        pushf                       
                        mov        ax,
                        mul        di
                        popf
                        adc        ax,
                        adc        dx,0
                        mov        ,ax
                        mov        ,dx
                        ret
start                endp
code                ends
end                begin

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

superbe 发表于 2018-11-23 11:35:09

上面代码有的地方误用全角字符了,修改了以下几处,编译连接正常。
1. assume cs:code,ds:data,ss:stack,es:data (写成一行)
2. mulu32:   movax,[bx] (中括号误用了全角)
3. mov ,dx (逗号误用了全角)

水柔炎 发表于 2018-11-25 14:14:09

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

哦哦,谢谢

水柔炎 发表于 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命令行,也没有什么输出?感到好困惑?如果你有时间,还望你告知?再次感谢你对问题的回答。

superbe 发表于 2018-11-25 20:54:29

程序中没有添加输出结果的代码

水柔炎 发表于 2018-11-26 13:00:26

superbe 发表于 2018-11-25 20:54
程序中没有添加输出结果的代码

怎么添加还望大佬指点指点,我的汇编没有学好,万分感谢

superbe 发表于 2018-11-27 15:17:40

本帖最后由 superbe 于 2018-11-27 15:28 编辑

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

水柔炎 发表于 2018-11-28 09:40:49

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

为什么你的代码在我的MASM 615中运行出错,我在虚拟机中xp系统中装的

水柔炎 发表于 2018-11-28 09:41:24

水柔炎 发表于 2018-11-28 09:40
为什么你的代码在我的MASM 615中运行出错,我在虚拟机中xp系统中装的

能把你的.exe文件发一下吗?谢谢

superbe 发表于 2018-11-28 12:17:02

我把assume cs:code....一行放错地方了(在masm5.0里不报错),你还放到原来code segment下,masm6.15就不报错了。
虚拟机xp在cmd窗口下运行如果没有显示结果,按Alter+Enter把cmd窗口全屏再执行。
感觉还是dosbox好用。

水柔炎 发表于 2018-11-28 15:06:44

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

谢谢,看到结果了,非常感谢

水柔炎 发表于 2018-11-28 15:11:58

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

如果不用子程序调用,是否可以写出两个64位数字相乘,得到一个128位的数字,用eax等寄存器

superbe 发表于 2018-12-5 11:31:01

参考上面32位改写的64位乘法的程序,在masm32下编译连接,CMD窗口下运行。验证下结果对不对。

superbe 发表于 2018-12-5 11:37:54

Project->Console Assemble & Link。包里有EXE文件。

水柔炎 发表于 2018-12-5 16:54:57

superbe 发表于 2018-12-5 11:37
Project->Console Assemble & Link。包里有EXE文件。

谢谢,我已经知道了,我们的老师讲解了,他用.386的写了出来
页: [1]
查看完整版本: 两个32位无符号数乘法程序