Jadi di MIPS kita bisa mengalokasikan ruang untuk string di bagian .data
dari program kita. Namun, ini hanya berfungsi untuk variabel string yang telah ditentukan sebelumnya. Katakanlah seseorang memanggil fungsi sebagai gantinya di suatu tempat dalam kode kita seperti ini:
myFunc("blablabla");
Untuk melakukan ini di MIPS kita perlu menyimpan blablabla
di memori. Bagaimana kita mengalokasikan memori untuk menyimpan blablabla
di segmen .text
program kita, bukan di .data
?
2 jawaban
Sudahkah Anda mencoba ini?
li $v0, 9 # Code in %v0: 9 -> Allocate heap memory
li $a0, 8 # Allocate 8 bytes
syscall # System call for allocating space
Anda dapat mengalokasikan memori dari heap dan menyimpan string. Anda dapat mengubah 8 byte yang saya gunakan misalnya dengan jumlah karakter yang dimiliki string Anda. Pertanyaan tentang cara menghitung karakter telah dijawab.
Setelah syscall
register $v0 menyimpan alamat dari ruang yang dialokasikan.
Saya pikir Anda memiliki beberapa kebingungan. Konstanta string Anda tidak perlu berada di bagian teks. Mereka dapat dimasukkan ke dalam bagian data seperti variabel lainnya.
Panggilan fungsi di penghujung hari hanya mengambil alamat string (label yang akan Anda buat di bagian data).
Anda dapat merujuk ini di bagian teks di instruksi pemindahan.
.data
, kecuali bahwa Anda harus memastikan bahwa semua instruksi selaras kata. Tetapi kompiler mungkin akan menempatkan string literal itu di salah satu bagian data.