我正在尝试学习MIPS程序集,因为我有一些空闲时间,并且我正在尝试编写一个程序,将数字推送到堆栈,然后弹出它们。我希望它计算在达到负数之前弹出的数字的数量,然后每次得到负数时,保持计数弹出了多少负数和正数。
到目前为止,我得到了这个: #count the number of negative words on the stock by poping the stack until a non- negative word is found
#and print out the number of words found
.text
.globl main
#this code reads the numbers from the data area and stores in them in a stack
#the numbers are located in the test area and the number of numbers in the num area
main: la $t0, test
lw $t1, num
loop: lw $t2,($t0)
sub $sp, $sp, 4
sw $t2($sp)
add $t0, $t0, 4
add $t1, $t1, -1
bnez $t1, loop
#pop from the stack and print the number of numbers in the stack before a nonnegative number is reached
#then keep count of how many negative and positive ones there are total
#code I cannot come up with would go here
.data
test: .word
2, 0xfffabfff,2,-4,-9,0x99999999,0x90000000,-2147479536,0x80000000
num: .word 10
ans: .asciiz "Number is = "
endl: .asciiz "\n"
我把它推向正确,尽管我可以说,但我无法弄清楚正在推动和计数。我该怎么办呢?
答案 0 :(得分:6)
流行音乐将与推动相反。因此,如果您使用它来推送$t2
:
sub $sp,$sp,4
sw $t2,($sp)
你会弹出它:
lw $t2,($sp)
addiu $sp,$sp,4
计算堆栈上否定词的数量将是一个循环,从堆栈中弹出一个单词,如果弹出值>> 0则使用BGEZ
退出循环或以其他方式增加一个柜台并重复。