b99902HW 板


LINE

二的補數、Offset 與 Extender by bill8124 Outline: 複習一下二的補數 解釋 $gp Offset 解釋 Extender 的差別 ---- ◎ 二的補數 範例: 124 = 0000 0001 0010 0100 先取一的補數 -> 1111 1110 1101 1011 (0變1、1變0) 加 1 變成二的補數 -> 1111 1110 1101 1100 這個數字以 signed integer 解讀就是 -124。 反過來看,如果我們對 -124 做二的補數, -124 = 1111 1110 1101 1100 -> 0000 0001 0010 0011 -> 0000 0001 0010 0100 剛好就會得到原本的 124。 ---- ◎ 解釋 $gp Offset 這個段落其實可以用一句話說完: 「寫成 unsigned,讀作 signed。」 當 $gp = 1000 8000 ,而我們想要存取的位置是 1000 0000 那我們需要的 offset 就是 -8000 一般而言,人類看到負數不知道如何用 bit 表示 所以要知道 -8000 怎麼用 bit 表示,就要從 +8000 轉成 -8000 8000 = 1000 0000 0000 0000 -> 0111 1111 1111 1111 -> 1000 0000 0000 0000 轉成 -8000 跟原本一樣,這是怎麼回事呢? 計程的時候曾經教到,signed int 的表示範圍是 2147483647 = 7FFFFFFF = 0111 1111 1111 1111 1111 1111 1111 1111 (32 bits) 到 -2147483648 = -80000000 = 1000 0000 0000 0000 0000 0000 0000 0000 7FFFFFFF + 1 = 1000 0000 0000 0000 0000 0000 0000 0000 0000 如果用 signed integer 的角度來看,這個數就是 -80000000 (對 signed 來說,看到第一個 bit 是 1 就是負數) 從 unsigned integer 的角度來看,這個數就是 +80000000 (對 unsigned 來說,這個 1 是數字的一部份) 所以 lw $a0, 8000($gp) 其實應該寫成 lw $a0, -8000($gp) 因為,這裡的 Offset: 8000 應該要看成是 signed integer 的 -8000 另外一個例子。$gp 不變,資料放在 1000 0020 需要 Offset = -7FE0 (1000 8000 - 7FE0 = 1000 0020) 7FE0 = 0111 1111 1110 0000 -> 1000 0000 0001 1111 -> 1000 0000 0010 0000 = -7FE0 (signed) = 8020 (unsigned) 這樣就了解為什麼要寫成 sw $s0, 8020($gp) 了吧! 我不知道為什麼要故意把 signed 的數表示成 unsigned 的樣子, 但總而言之,看到 >= 8000 的 16 bit 數字,就是負數了! ---- ◎ 解釋 Extender Extender 有兩種: Zero extender 和 Sign extender Zero extender 就是不管拿到什麼數字,前面都補零 Sign extender 是讓 16 bit 數字變成 32 bit,但數值不變。 舉例來說 70C0 = 0111 0000 1100 0000 zero_ext -> 0000 0000 0000 0000 0111 0000 1100 0000 = 7412 sign_ext -> 0000 0000 0000 0000 0111 0000 1100 0000 = 7412 -3A00 = 1100 0110 0000 0000 (這裡請自己算出來XD) zero_ext -> 0000 0000 0000 0000 1100 0110 0000 0000 = C600 sign_ext -> 1111 1111 1111 1111 1100 0110 0000 0000 = -3A00 對 -3A00 的 sign_ext 取二的補數會得到 3A00,各位可以自己試試看。 簡單的記法是:把第 1 個 bit 重複往前填滿。(參考上面範例) 順道一提,通常做 Zero_ext 的時候,原本的數字都會以 unsigned 的形式來用。 以上面的例子來說,這個數字應該看作 C600 而非 -3A00。 CPU 中的 Extender 有個 ExtOp 的 flag 0 代表 Zero_ext,1 是 Sign_ext(從 instuction 的 flag table 可以看出來) ---- 希望這篇文有讓不太懂這一部份的人,可以完全瞭解。 另外 ExtOp 的部分,今天計結老師應該是漏講了。 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.45.207.217 ※ 編輯: bill8124 來自: 114.45.207.217 (10/24 22:29) ※ 編輯: bill8124 來自: 114.45.207.217 (10/24 22:31) ※ 編輯: bill8124 來自: 114.45.207.217 (10/24 22:31)
1F:推 allen0326200:助教用心推! 10/24 22:45
2F:推 allen0326200:sorry沒看原po的ID 以為是TA 謝囉 10/24 22:48
3F:推 ga800360:推! 10/25 01:39
4F:推 maill6802:推 10/25 11:28
5F:推 OppOops:推!! 10/25 18:39
6F:推 han960691:push! 10/25 23:25







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP