欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

【mips】模拟有符号乘法的有关问题(有关问题出在乘数上)

更新时间: 2014-01-05 03:16:08 责任编辑: Author_N1

 

【MIPS】模拟有符号乘法的问题(问题出在乘数上)
我的思路是:(执行32次loop)
初始化sum=0
得到乘数的bit位的方法用的是mask
如:
被乘数: 1011
mask: 0001
bit位的数=被乘数&mask

loop内容:
1.如果乘数的bit位为1,则把被乘数加到sum中
2.右移乘数1位
3.左移被乘数1位

问题在于:
正数*正数 正常运行
负数*正数 正常运行
正数*负数 异常
负数*负数 异常

如果乘数是负数的话,会报错(产生溢出, overflow)

========

运行环境: Qtspim
源代码如下(MIPS):

              .data 0x10010010
msg1:    .asciiz "Please input first num:\n"
msg2:    .asciiz "Please input second num:\n"
msg3:    .asciiz "The result is:\n"
mask:     .word 0x00000001
              .text
              .globl main
main:
              lw $s0, mask   # $s0=1 (the mask)
              addi $t0, $zero, 31   # $t0=31 (The counter)
              move $s2, $zero   # $s2=sum, s2=0

              la $a0, msg1
              li $v0, 4
              syscall
              li $v0, 5
              syscall
              move $s1, $v0 # $s1=FirstNum

              la $a0, msg2
              li $v0, 4
              syscall
              li $v0, 5
              syscall
              move $t1, $v0 # $t1=SecondNum

loop:      and $t2, $s0, $t1# t2= s0 & t1
              beq $t2, $zero, not
              add $s2, $s2, $s1
not:        sll $s1, $s1, 1
              srl $t1, $t1, 1
              addi $t0, $t0, -1 # counter--
              beq $t0, $zero, stop # if counter==0, break loop
              j loop

stop:      la $a0, msg3
              li $v0, 4
              syscall
              move $a0, $s2
              li $v0, 1
              syscall
              li $v0, 10
              syscall


求大神解答啊
--参考方法--
先保存符号,再取正运算,结果再乘以符号数
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:16:08
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20257/
本文WWW.DOC100.NET DOC100.NET版权所有。