3480|4

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求救:一段8086程序,找高手指点 [复制链接]

一段8086程序进行两个32位数的乘法,因为刚刚开始学,搞不清楚。
程序如下:
data               segment
mulnum       dw            0000,0fffh,0000,offfh,4dup(?)
data               ends
stack              segment   para stack 'stack'
                        db               100dup(?)
stack             ends
code             segment
                      assume    cs:code,ds:data,ss:stack,es:data
start             porc         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

    为什么要引入这个dx ,还分配了新地址,而且传送至ax时有值吗                 mov            [bx+0ah],dx
                                                                                                                                    mov           ax,[bx+2]

     如果各位大哥方便的话,帮我把上面的程序加上注释,好吗?
   先行谢过!!!!!!!!
此帖出自单片机论坛

最新回复

8086啊。好久没摸了。占个位置。我先去看下手册再来回复你 首先你这个是8086累加形乘法运算,那么对于一个乘法A*B来说。就是对A进行循环B次的相加。 这里就有一个问题。地址。首先存储器是定位的。比如一个16位乘法器。一个地址的空间是16位0xFFFF。 这个时候,两个数相加如果产生进位。这个进位放哪里。当然要放在下一个地址空间。这个ADC DX,0;的作用就是自动偏移 ADD指令是带进位加法。相加后产生进位。ADC作用是引入进位。也就是说 DX+0+CF,这样当有进位时自动偏移加一 这样既可保存每一个进位到偏移地址。你可以试一下。吧ADC DX,0;这句去掉。你最终只能得到一个16位数。可16位乘十六位应该产生的是32位数啊 [ 本帖最后由 leang521 于 2009-12-17 10:40 编辑 ]  详情 回复 发表于 2009-12-17 10:14
点赞 关注
 

回复
举报

159

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

对算法没有研究帮不了你

为什么要学8086的汇编啊?以后打算往哪个方向发展啊?
此帖出自单片机论坛
 
个人签名*我的EMAIL:     sunke9@qq.com  
*我的博客http://blog.ednchina.com/sunke9/
*我网店:https://sunke9.taobao.com/
承接:电子、自动控制产品设计开发;单片机、ARM编程。
 

回复

1759

帖子

0

TA的资源

裸片初长成(高级)

板凳
 
呵呵,我也不懂8086的汇编了,现在学这个有什么用呢?
此帖出自单片机论坛
 
个人签名南京璞晓电子   www.cpx0.com需要
msn:njlianjian@hotmail.com
 
 

回复

6366

帖子

4914

TA的资源

版主

4
 
呵呵,这个难住了不少人
我们对汇编了解不多,更何况你的是计算机的汇编语言,还不是51的汇编,帮不了你
此帖出自单片机论坛
 
 
 

回复

2130

帖子

0

TA的资源

五彩晶圆(中级)

5
 
8086啊。好久没摸了。占个位置。我先去看下手册再来回复你
首先你这个是8086累加形乘法运算,那么对于一个乘法A*B来说。就是对A进行循环B次的相加。
这里就有一个问题。地址。首先存储器是定位的。比如一个16位乘法器。一个地址的空间是16位0xFFFF。
这个时候,两个数相加如果产生进位。这个进位放哪里。当然要放在下一个地址空间。这个ADC DX,0;的作用就是自动偏移
ADD指令是带进位加法。相加后产生进位。ADC作用是引入进位。也就是说 DX+0+CF,这样当有进位时自动偏移加一
这样既可保存每一个进位到偏移地址。你可以试一下。吧ADC DX,0;这句去掉。你最终只能得到一个16位数。可16位乘十六位应该产生的是32位数啊

[ 本帖最后由 leang521 于 2009-12-17 10:40 编辑 ]
此帖出自单片机论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表