这似乎应该有效,但显然不行。当我尝试计算字符串的长度时,它返回一些疯狂的长号。当我一步程序它工作正常但打印出错误的数字。有人能指点我回到正轨,以便我可以开展下一个功能吗?我只需要找出丢掉计数的内容
############################################
# Program Name: strings.s
# Programmer: David Bierbrauer
# Date: 9/07/2017
############################################
# Functional Description:
#
#
############################################
# Cross References:
#
#
############################################
.data # Data declaration section
stringa: .asciiz "Enter the first string: "
stringb: .asciiz "\nEnter the second string: "
.text
main: # Start of code section
#li $v0, 4 #get first string input
la $a0, stringa
jal read
jal length
jal print
#get second string input
la $a0, stringb
jal read
jal length
jal print
j end
length:
li $t0, -1 #loop count 0
j lengthloop
lengthloop: #exit address $s1
lb $t1, 0($a0) #load next char into $t1
beqz $t1, endlength
addi $a0, $a0, 1 #increment string pointer
addi $t0, $t0, 1 #increment count
j lengthloop
endlength:
jr $ra
equality:
lb $t2, 0($a0)
lb $t3, 0($a1)
bne $t2,$t3 notequal
append:
print:
li $v0, 1
la
syscall
jr $ra
read:
li $v0, 4
syscall #print prompt
li $v0,9
li $a0,80
syscall
move $a0,$v0
li $v0,8
li $a1,80
syscall
jr $ra
end:
li $v0, 10
syscall
答案 0 :(得分:0)
您发布的代码甚至没有汇编,因为la
例程中有一个迷路print
。
除此之外,您的length
例程会在$t0
中返回长度,而您的print
例程会假定值在$a0
中。这就是你输出错误的原因。
答案 1 :(得分:0)
你的print
看起来很奇怪。 spim
对我大吼大叫 - la
伪指令的语法错误。我想,你的意思是
print: li $v0, 1 la $a0, 0($t0) syscall jr $ra