我在想如何指定從C到MIPS的變量聲明,如果我不初始化它們的話。我想這與初始化它會是這樣的:MIPS中堆棧/幀指針的可變偏移
# C code
int x = 7;
# MIPS code
.data
x: .word 7
但如果我的C代碼看起來是這樣的:
int x;
void main() {
.
.
x = 7;
.
.
}
,我要用來堆棧指針一些內存($ SP)當聲明'x'時,然後在將指針分配給7時將指針移回'x'?如果是的話,我怎麼會知道要增加指針以達到$ sp中'x'的位置?據我所知,員工的很多已經到7
編輯分配「X」以前也發生過:
很抱歉的混亂。我的問題不是關於全局變量。所以代碼也可以是這樣的:
void main() {
.
.
int x;
.
.
x = 7; # or simply x;
.
.
}
正如人們在評論中提到的那樣,它需要被堆棧分配。所以我想我的問題是關於我需要增加堆棧指針的數量。我是否應該記住偏移量爲「x」,每當我想使用它時,我都會這樣做:
addi $sp, $sp, x_offset
lw $t0, 0($sp)
addi $sp, $sp, -x_offset
我理解這個概念對嗎?
順便說一句,爲什麼你不使用'gcc -O0 -S codeTest.c'來觀察編譯器如何以非天真的非優化方式來執行它,只需輸出一些代碼(相當於代表解析的內部編譯器結構C源)?您可能還想嘗試用'-O3'來看看它如何切換這個數據樹以發出「最佳」(編譯器最好)機器代碼以達到相同的結果。 – Ped7g