查看完整版本: 組合語言的問題
頁: [1]

b2581167 發表於 2017-10-9 10:31 PM

組合語言的問題

本帖最後由 b2581167 於 2017-10-9 10:32 PM 編輯

我現在在看conupter organization and design
有兩個讓我疑惑的問題
第一是這兩個題目的比較
一、假設A為含有100個word的Array,且compiler 已如前述將g與h存於s1及s2中。
      Array起始位址存於s3中。c語言敘述為:g=h+A;翻成組合語言是...

      lw t0,8(s3)
      add s1,s2,t0

二、設變數h存於s2中且陣列A的起始位址存在s3中。
      c語言敘述為:A=h+A;翻成組合語言是...

      lw t0,32(s3)
      add t0,s2,t0
      sw t0,48(s3)

問題一:這兩個答案的解法讓我困惑,理論上兩邊的答案lw的地方,
          不都要是 lw t0,32(s3)才對嗎?為什麼一個是word一個是byte。
          那這樣如果用lh、lb又該怎麼表示?

問題二:在書上我有看到在procedure call時,tX不會被保存,sX的會被保存,
          可是在procedure call的時候,值會不會被保存,不是跟程式設計有關嗎,
          關tX與sX本身會不會被保存有甚麼關聯。
          例如:我今天caller他有s0、s1、t0、t1的值不能被callee重寫,
          所以我會用sp來本這些值存起來,假如callee使用了s0s1s2、t0t1t2,
          結束以後回到caller,s0、s1、t0、t1的原值都一樣會被保存,
          所以有沒有保存不是設計師在決定的嗎?
          是我哪裡搞錯了嗎@@

PS:順便問一個腦腦的問題,
     $ra的全寫是return address,
     $sp的全寫是stack pointer,
     那$s跟$t的全寫是甚麼??



...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>
頁: [1]