2014-09-25 26 views
0

我試圖創建一個鏈接列表W /動態內存分配MIPS從用戶輸入。MIPS動態單鏈表

我想知道是否有通常用於創建節點的一般結構(C中的結構) - 例如可能使它成爲將在條件語句中調用的子進程。

我想翻譯的結構是這樣的:

struct p { 
    char name[256]; 
    int phone; 
    float rating; 
    struct p *next; 
}; 

該結構的各部分的投入將用戶(這一部分,我知道該怎麼做和存儲)來輸入,但我不確定如何在堆上分配寄存器值以動態完成此操作。

最終我會根據評分對這些值進行排序。

幫助表示讚賞 - 謝謝!

+0

什麼是平臺?動態內存分配是您通常要求操作系統執行的操作,而不是滾動您自己的操作。結構很簡單 - 只需計算總大小並使用偏移量即可。 – 2014-09-25 16:57:27

+0

我正在使用QtSpim執行,並且無法計算總大小,因爲用戶可以輸入隨機數量的結構進行評估。我只是練習堆棧/堆棧訪問,並堅持這一點。 – ahagouel 2014-09-25 17:33:02

+1

您將需要使用syscall 9在Spim中分配堆內存。 – markgz 2014-09-25 18:28:50

回答

1

如果寄存器$t9包含struct p實例的地址,則可以使用來自$t9的偏移量訪問結構的字段。

加載name的第一個字符做lw $t0, 0($t9)

加載phone做`lw $ t0,256($ t9)。

要加載ratinglwc1 $f0, 260($t9) # 256 + sizeof(int)

要加載nextlw $t0, 264($t9) # 256 + sizeof(int) + sizeof(float)

+0

這可以存儲在一個子進程中 - 像「make_node」,可以從用戶讀取東西時調用嗎? – ahagouel 2014-09-25 18:21:31

+0

是的,您可以在子程序中使用一堆存儲指令將用戶輸入的值存儲到結構的字段中。 – markgz 2014-09-25 18:27:04

2

在鏈表中,每個節點包括兩個項目:

1. 數據

2. 下一個節點的地址

爲了分配足夠的內存,你必須找到你需要的字節數。在你的情況下,你需要256字節的數組字段,4字節的int字段,8字節的浮動字段和4字節的下一個節點的地址..

如果你想創建你的拳頭結構,你可以這樣做:

addi $v0,$0,9 addi $a0,$0,272 syscall

,現在你可以分配值的struct ...

對於例如,如果您想將電話號碼7存儲在電話區域中,您可以d o此:

addi $t0,$0,7 
sw $t0,256($v0) 
+0

我不一定需要256 ...只是我選擇的一個數字。對於字符串輸入是否足夠了?這些將會是名字(例如John Doe) – ahagouel 2014-09-25 18:56:21

+0

如果你想要John Doe這個名字,每個角色需要1個字節,你至少需要8個字節。通常情況下,長名稱是很好的選擇,所以在我看來放32個字節 – Anastasis 2014-09-25 19:02:08