忽略溢出的乘法器其实比较容易实现,只需按照手动运算一步步求解即可。
其大致可以分为4步(其为Copy版):
1. 测试乘数最低位是否为1,是则给乘积加上被乘数,将结果写入乘积寄存器;
2. 被乘数寄存器左移1位;
3. 乘数寄存器右移一位;
4. 判断是否循环了32次,如果是,则结束,否则返回步骤1。
其流程图十分清晰:
然后其优化(溢出提示)即在后面加上对结果的高32位判断即可。
代码实现如下:
.data
str1: .asciiz "Please enter two numbers:\n"
str2: .asciiz "Result:\n"
str3: .asciiz "GG:result overflow!\n"
CONTROL: .word32 0x10000
DATA: .word32 0x10008
.text
lwu r21,CONTROL(r0)
lwu r22,DATA(r0)
daddi r24,r0,4 ;set string outp