我想在mips程序集中創建push和pop方法。以下是一個Java代碼:如何在Assembly mips中從堆棧中推送和彈出?
static int pop()
{
if (i == 0) {
System.out.println ("Invalid Postfix");
System.exit(1);
}
i--;
return (p[i]);
}
和
static void push (int result)
{
if (i == MAX) {
System.out.println ("Too many tokens");
System.exit(1);
}
p[i] = result;
i++;
}
到目前爲止,我已經創建了push方法:
push:
beq $s1, $s0, error_overflow
sw $t2 , stack($t7) # p[i] = result
addi $t7, $t7, 4 # go to space for next int
addi $s1, $s1, 1 # i++
jr $ra
但是我不知道怎麼翻譯的return (p[i])
彙編語句。返回值是否存儲在$v0
?我需要將$v0
的內容移到另一個註冊表嗎?任何關於這個主題的谷歌搜索只會讓我困惑。任何幫助?
如果我在MIPS代碼混淆這裏的小抄:
$s0 = MAX
$s1 = stack pointer
$t7 = where I will store the numbers
$t2 = the number(result) that will be stored.
與其使用'stack($ t7)',我會使用指定爲堆棧指針的寄存器(即'$ sp' aka'$ r29')。如果需要設置'$ sp',請在開始時執行'la $ sp,stack_high'。然後,使用'sw $ whatever,0($ sp)'等。 –