我已经编写了这段代码,但遇到了一个问题:
第37行第5列:"":操作数类型不正确
但是我已经宣布并且正确地调用了它,不是吗?与存储在$t1 and $t2
的.ascizz数据一样,我知道两个程序都可以运行,因为我可以将它们分开,只是我在第37行放置的条件,这是错误的。
我相信当使用li x,5 5时,问题可能是第3行第3行的错误。我认为这是调用变量x的错误方法。
我是新手,这可能只是一个简单的修复,但是一旦掌握了这个,我可以设置任意数量的变量,即x,y,z。为他们分配数字并应用条件。这是我对这个小练习的期望结果。
.data
prompt1: .asciiz "\n\n Enter firs integer please: "
prompt2: .asciiz "Enter second integer please: "
result: .asciiz "The result is:"
x: .word 60
array1: .space 12 # declare 12 bytes of storage to hold array of 3 integers
.text
main:
#t0 - to hold first integer
#t1 - to hold secon integer
#t2 - to hold sum of $t1 and $t0
# first number
li $v0, 4 # system call to print string asking for input
la $a0, prompt1 # address of string to print
syscall
li $v0, 5 # system call to read integer
syscall
move $t0, $v0 # move the read number stored in $v0 into $t0
#second number
li $v0, 4
la $a0, prompt2
syscall
li $v0, 5
syscall
move $t1, $v0
#thir number
li x, 5
syscall
move $t3, $v0
add $t2,$0,$0
add $t2, $t1, $t0 # add contents of $t0 and $t1 and store in $t2
bge st2, $t3, end # Branch to Label if st2 ≥ x (signed)
# print out contents of $t2
li $2,1 # $v0<-service#1 (print int)
move $4, $t2 # $a0<-$8, move result to $a0
syscall # call to system service
li $v0, 10 #syscall to exit
syscall
end:
la $t0, array1 # load base address of array into register $t0
li $t1, 5 # $t1 = 5 ("load immediate")
sw $t1, ($t0) # first array element set to 5; indirect addressing
li $t1, 13 # $t1 = 13
sw $t1, 4($t0) # second array element set to 13
li $t1, -7 # $t1 = -7
sw $t1, 8($t0) # third array element set to -7
li $v0, 1
move $a0, $t2
syscall
答案 0 :(得分:0)
li
伪指令将立即值放入寄存器。您无法使用它将数据移动到内存中。如果要将数据放在位置x
,则需要先将立即值存储在寄存器中,然后使用sw
。