【计算机系统设计】学习笔记(1)03,04
- 疑問:sw和lw指令,獲取的地址==不是4的整倍數(字節不對齊)==的時候,應該如何處理?
東南大學MOCC 計算機系統綜合設計 03
03-1 寄存器
介紹了MIPS寄存器,32個寄存器的基本功能和使用,注意
- 子程序調用寄存器t不保護與s的保護
- $31寄存器在子程序嵌套調用下如何使用?
- $0只能為0,寫入其他值將會被忽略,但是允許寫入,只是寫完也沒用
03-2 尋址方式
PC相對尋址
PC = (PC + 4) + ((sign-extend)imm << 2)
為什么要擴展后左移兩位?因為32位指令進行字節對齊后,一定是4的倍數,因此最低兩位一定是00,所以就沒必要存儲上再占空間,而計算的時候,則要還原它。
(字節尋址而不是字尋址)
所有跳轉指令的目標地址,編譯存儲的時候,都會?4,實際運行的時候,都是乘以4還原。
04 典型指令講解
MinSysy-1不處理異常
add和addu的區別,前者溢出后進行異常處理,后者不進行,因此后者常用來進行地址計算(如果偏移量為負值,必然溢出,但實際上只是地址往上跳轉而已)
由于暫時無異常處理,所以add和addu,addi和addiu實際一樣。
sub和subu也一樣, u 代表的含義是,溢出之后有沒有異常處理。
對于立即數運算,邏輯運算imm是零擴展(例如andi),算術運算imm是符號擴展(例如addi),這很好理解,邏輯運算沒有有無符號數的概念。(具體指令具體分析)
注意寫操作的rs和rt的反著的,源是rt,目標地址是rs + 偏移量
- 疑問:sw和lw指令,獲取的地址==不是4的整倍數(字節不對齊)==的時候,應該如何處理?(比如直接忽略不對齊的部分,或者報異常)
對于字讀取,如果不是4的倍數,那么最低兩位不是00,但是存儲的時候,也一樣>> 2,又會給抹掉了。
把16位立即數,賦值給32位寄存器的高16位。
對于beq和bne指令,判斷相等不相等,直接用減法(-)判斷就行了。
- 小于則賦值,條件賦值指令
比大小,自然應該是算術運算,有符號數。
因此自然有無符號比較的小于置位。
顯然是邏輯上的,因此是零擴展。
就類似于函數調用,調用完之后,要返回$31值對應的地址。
jal和jr配合,就實現了過程調用和返回。
注意,有的是硬件設計相關,有的則是軟件設計相關。
小結
把握指令集功能的內在聯系,而不是堆砌它們。
總結
以上是生活随笔為你收集整理的【计算机系统设计】学习笔记(1)03,04的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 试管婴儿一次多少钱
- 下一篇: 【计算机系统设计】学习笔记(2)