看板 Grad-ProbAsk 關於我們 聯絡資訊
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
A4P8T6X9: unsigned 的,跳到另外一邊不合理。 07/14 23:06
k2shouai: 他上課是改yes沒錯,張凡上課是說可以把記憶體想成是一 07/15 10:54
k2shouai: 個圓(頭尾相連)。 jump指令才有256mb的區塊限制。 07/15 10:54
晚回,抱歉了 附圖:http://imgur.com/zlgtOlO 以一般ELF來說,從code sec跳到另外一端會到stack或是不合法的存取位址吧? 如果您有上課,可否幫我問問老師呢 (小弟沒上面授TAT) ※ 編輯: kyuudonut (220.132.251.85), 07/19/2016 14:48:27
k2shouai: 我上tkb的。題目是問說能不能跳到而已,沒問你合不合法 07/19 18:54
k2shouai: 吧? 07/19 18:54
如果不合法,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
k2shouai: 跳了合法-> 沒事,不合法->當機。 不是嗎= =? 07/19 20:17
應該說,吃到不合法位址,便直接跳到exception handler了 CPU 他不會餵給PC讓你跳到那邊讓你死機吧 0.0 ※ 編輯: kyuudonut (220.132.251.85), 07/19/2016 20:59:27
k2shouai: 你是覺得一定會不合法? 他題目只是問有沒有可能而已 07/19 22:11
這是我有疑慮的點,因為答案原本給的是 False 我在想張凡跟交大老師是否有不同見解 @@? 我想找101交大解答,連結也失效 我覺得是不合法,畢竟stack就從頂端長下來,下面還有未分配之記憶體, heap,...etc 還是單純題目只是想考考二進位加減法? ※ 編輯: kyuudonut (220.132.251.85), 07/19/2016 23:10:36
k2shouai: 畢竟stack就從頂端長下來->這邊想表達的是? 07/19 23:10
k2shouai: 他已經跳到另一個程式區塊了, 無法預期會跳到該程式的 07/19 23:11
kyuudonut: 那邊已經不是code sec,CPU會擋下來 07/19 23:11
k2shouai: 哪一段吧. 這題目出的本來就怪怪的 PC也不太可能在0吧 07/19 23:12
k2shouai: 你怎能預期那邊不是code sec, 就不同程式了 07/19 23:12
可是 CPU 也會有 base & limit register去記錄此 process 的範圍呀 如果是不同程式,也會直接 exception? ※ 編輯: kyuudonut (220.132.251.85), 07/19/2016 23:16:49
kyuudonut: 然後感謝糾正XD 有可能是別的code sec 07/19 23:19
k2shouai: base & limit register->MIPS哪來這二個? 07/19 23:27
我知道沒有mips這兩個@@ 但我一直再想應該會有類似機制去防止存取其他process 但剛剛查了一下都找不到相關文件 orz 如果單純照課本畫的mips,要嘛就繼續執行其他程式, 不然就是instruction無法解碼跳exception, 但兩者的前提都是先跳到branch指定的address (!) 謝謝跟你的討論,但我的出發點只是怕兩個地方給答案不一樣 TAT ※ 編輯: kyuudonut (220.132.251.85), 07/20/2016 00:00:33
ken52011219: 後期很常遇到這種張凡和考試答案給的不一樣的題目 07/21 14:37
ken52011219: 這時侯 分數就在一念之間 07/21 14:38
ken52011219: 告訴你該怎麼做 你就想著張凡的講解 然後再想 三個字 07/21 14:39
ken52011219: 暫時的 07/21 14:39
ken52011219: 然後寫上 學校給的正確答案 (拍拍 07/21 14:40
ken52011219: 至於這題,翻開第71頁 BEQ為程式計數器相對定址法 從 07/21 14:51
ken52011219: 這裡其實就可以知道 它是signed了 不用想太多 instru 07/21 14:51
ken52011219: ction 裡的常數加上pc的位址 第二題是yes沒有太大的 07/21 14:51
ken52011219: 異議 07/21 14:51
ken52011219: 後面學過pipeline就可以更清楚瞭解beq在整個管線流程 07/21 15:03
ken52011219: 中 它的常數會在IF時經過加法器 +上pc再傳回去 07/21 15:03
ken52011219: http://i.imgur.com/IGI76dz.jpg 更正是在ID時(In 07/21 15:16
ken52011219: struction decode) 07/21 15:16
tomdog12345: 所以考試時這種有不同講解答案的題目 還是要以學校為 07/23 12:13
tomdog12345: 主嗎 @@但是我是覺得張凡的答案也有一套道理的說 07/23 12:13
ken52011219: 見仁見智 只不過你確定題目一模一樣 算出來又跟你 07/23 12:57
ken52011219: 印象中一樣有爭議 然後又剛好是同間學校考出來的 07/23 12:58
ken52011219: 這時 千萬 不要跟這間教授出題過不去 XDD 07/23 12:59
ken52011219: 只不過張凡 這類有爭議題目有講到也會這樣跟學生說 07/23 13:00
ken52011219: 只不過阿... 往年學校爭議送分題 尤其是資工的不少 07/23 13:02
ken52011219: 相信自己 相信自己的答案就好 07/23 13:03
tomdog12345: 好的 反正就是相信自己 剩下的聽天由命XD 感謝 07/24 10:04