2016-04-03 157 views
0

我需要编写一个汇编程序,它将两个有符号数相乘(在 二进制补码系统中)。乘数和被乘数可以是8位数据范围内的任何数字和任何符号。确保你的汇编程序是通用的。MIPS程序将两个数相乘

这是我有,但我得到的错误“程序完成运行(下降)”,我不知道为什么。

.data 
str1: .asciiz "Enter a" 
str2: .asciiz "Enter b" 
str3: .asciiz "a*b = " 

main: 
li $v0, 4 
la $a0, str1 
syscall 

li $v0, 5 
syscall 
add $s0, $v0, $zero 

li $v0, 4 
la $a0, str2 
syscall 

li $v0, 5 
syscall 
move $s1, $v0 

mult $s0, $s1 
mflo $t2 
li $v0, 1 
move $a0, $t2 
syscall 

li $v0, 4 
la $a0, str3 
syscall 

li $v0, 10 
syscall 

回答

2

您已将代码放入数据部分。在main:之前,您应该有.text指令。您也可能需要.globl main

+0

哦哇完全错过了,谢谢! – smd

+0

'mars'模拟器是宽容的。如果没有'main',它将从'.text'的第一个位置开始[不在原始代码中]。另一方面,'spim'模拟器模拟'jal main'来启动程序[并且,IIRC,'a0'是'argc','a1'是'argv'],需要'.text','。 globl main'和'main:'。没有这一切,'spim'会抱怨一个未定义的引用,或者其他的一些 –