[理工] [計組] CPU對記憶體位置編碼
HI大家 我想講的題目是張凡課本(上) P82 的第四題(2)
想先請問記憶體的位址是signed還是unsigned
以 32BIT MIPS來講 記憶體從頭到尾的編碼:
(1) signed
可能是 ffffffffh ~ 00000000h ~ 7fffffffh
(2) unsigned
可能是 00000000h ~ ffffffffh
對CPU來說 都是數字 可能沒什麼
但是假如碰到branch
branch有16bit可以跳動的範圍: -20000h ~ 1fffch
假如base是 0000000h
branch的跳動範圍就會變成 fffe0000h ~ 0001fffch
--------------------------------------------
今天問題是問: ffffff00h是否在這個範圍內?
張凡是寫這個答案"對" 如果是signed 沒有問題 因為就在這塊連續的記憶體範圍內
但原本交大給的答案是"錯" (張凡後來改答案)
我在想喔 如果memory原本是unsigned,
那ffffff00h不就跑到記憶體的另外一端了嗎?
照理講這樣跳太多應該不合理吧 所以題目原本才給錯?
想跟各位討論,或是指出我有問題的地方,謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.132.251.85
※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1468426358.A.1D8.html
推
07/14 23:06, , 1F
07/14 23:06, 1F
推
07/15 10:54, , 2F
07/15 10:54, 2F
→
07/15 10:54, , 3F
07/15 10:54, 3F
晚回,抱歉了
附圖:http://imgur.com/zlgtOlO

以一般ELF來說,從code sec跳到另外一端會到stack或是不合法的存取位址吧?
如果您有上課,可否幫我問問老師呢 (小弟沒上面授TAT)
※ 編輯: kyuudonut (220.132.251.85), 07/19/2016 14:48:27
推
07/19 18:54, , 4F
07/19 18:54, 4F
→
07/19 18:54, , 5F
07/19 18:54, 5F
如果不合法,CPU根本不會給你跳吧?
硬體好像會有base register & limit register去做protection?
(雖然不知道MIPS有沒有就是了,不過應該有對應的機制)
http://stackoverflow.com/questions/8178001/mips-memory-execution-prevention
"The CPU then on every instruction checks whether or not the memory accesses
comply with the OS-established permissions and if everything's OK, carries
on. If there's an attempt to violate those permissions the CPU raises an
exception (a form of an interrupt similar to those from external to the CPU
I/O devices) that the OS handles."
※ 編輯: kyuudonut (220.132.251.85), 07/19/2016 19:45:23
推
07/19 20:17, , 6F
07/19 20:17, 6F
應該說,吃到不合法位址,便直接跳到exception handler了
CPU 他不會餵給PC讓你跳到那邊讓你死機吧 0.0
※ 編輯: kyuudonut (220.132.251.85), 07/19/2016 20:59:27
推
07/19 22:11, , 7F
07/19 22:11, 7F
這是我有疑慮的點,因為答案原本給的是 False
我在想張凡跟交大老師是否有不同見解 @@? 我想找101交大解答,連結也失效
我覺得是不合法,畢竟stack就從頂端長下來,下面還有未分配之記憶體, heap,...etc
還是單純題目只是想考考二進位加減法?
※ 編輯: kyuudonut (220.132.251.85), 07/19/2016 23:10:36
推
07/19 23:10, , 8F
07/19 23:10, 8F
→
07/19 23:11, , 9F
07/19 23:11, 9F
→
07/19 23:11, , 10F
07/19 23:11, 10F
→
07/19 23:12, , 11F
07/19 23:12, 11F
→
07/19 23:12, , 12F
07/19 23:12, 12F
可是 CPU 也會有 base & limit register去記錄此 process 的範圍呀
如果是不同程式,也會直接 exception?
※ 編輯: kyuudonut (220.132.251.85), 07/19/2016 23:16:49
→
07/19 23:19, , 13F
07/19 23:19, 13F
推
07/19 23:27, , 14F
07/19 23:27, 14F
我知道沒有mips這兩個@@
但我一直再想應該會有類似機制去防止存取其他process
但剛剛查了一下都找不到相關文件 orz
如果單純照課本畫的mips,要嘛就繼續執行其他程式,
不然就是instruction無法解碼跳exception,
但兩者的前提都是先跳到branch指定的address (!)
謝謝跟你的討論,但我的出發點只是怕兩個地方給答案不一樣 TAT
※ 編輯: kyuudonut (220.132.251.85), 07/20/2016 00:00:33
推
07/21 14:37, , 15F
07/21 14:37, 15F
→
07/21 14:38, , 16F
07/21 14:38, 16F
→
07/21 14:39, , 17F
07/21 14:39, 17F
→
07/21 14:39, , 18F
07/21 14:39, 18F
→
07/21 14:40, , 19F
07/21 14:40, 19F
推
07/21 14:51, , 20F
07/21 14:51, 20F
→
07/21 14:51, , 21F
07/21 14:51, 21F
→
07/21 14:51, , 22F
07/21 14:51, 22F
→
07/21 14:51, , 23F
07/21 14:51, 23F
推
07/21 15:03, , 24F
07/21 15:03, 24F
→
07/21 15:03, , 25F
07/21 15:03, 25F
→
07/21 15:16, , 26F
07/21 15:16, 26F

→
07/21 15:16, , 27F
07/21 15:16, 27F
推
07/23 12:13, , 28F
07/23 12:13, 28F
→
07/23 12:13, , 29F
07/23 12:13, 29F
→
07/23 12:57, , 30F
07/23 12:57, 30F
→
07/23 12:58, , 31F
07/23 12:58, 31F
→
07/23 12:59, , 32F
07/23 12:59, 32F
→
07/23 13:00, , 33F
07/23 13:00, 33F
推
07/23 13:02, , 34F
07/23 13:02, 34F
→
07/23 13:03, , 35F
07/23 13:03, 35F
推
07/24 10:04, , 36F
07/24 10:04, 36F