[問題] 請問指令排放方法跟endian有關嗎?

看板C_and_CPP作者 (allstar)時間11年前 (2014/11/04 12:46), 編輯推噓2(2010)
留言12則, 6人參與, 最新討論串1/1
我知道如果對象是單純的資料 0x12345678 在 Little Endian 的情況下會存成 78 56 34 12 在 Big Endian 的情況下會存成 12 34 56 78 那麼,如果對象是指令會存成什麼樣子?跟 CPU 是幾位元的有關係嗎? 如果沒誤會的話,我好像看到 0x4CF000 的 opcode 被存成 4C 00 F0 請問這是有可能出現的正確存法還是我弄錯了? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.46.152.239 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1415076393.A.585.html

11/04 12:51, , 1F
指令也是資料,當然跟 endian 有關。
11/04 12:51, 1F

11/04 12:55, , 2F
其實主要是想搞清楚 0x4CF000 的儲存方式,感覺哪裡怪怪的
11/04 12:55, 2F

11/04 13:52, , 3F
x86的opcode是以byte為單位定義,沒有這個問題
11/04 13:52, 3F

11/04 13:53, , 4F
他會寫4C F0 00 照順序放就是了
11/04 13:53, 4F

11/04 13:57, , 5F
你是把指令裡面的運算元當成 opcode 吧才覺得有關吧
11/04 13:57, 5F

11/04 13:58, , 6F
比如要 push 某位址,這個記憶體位址就會照 endian
11/04 13:58, 6F

11/04 14:34, , 7F
應該要這樣看 0x4C, 0xF000 兩項來看
11/04 14:34, 7F

11/04 14:42, , 8F
那請問如果指令從4C變成4C4D,位址依舊是F000
11/04 14:42, 8F

11/04 14:43, , 9F
存起來會變成 4C 4D 00 F0 還是 4D 4C 00 F0 呀?
11/04 14:43, 9F

11/04 15:23, , 10F
前者;但4c在x86是dec esp,沒有data部份,猜測你的cpu不是x86
11/04 15:23, 10F

11/04 15:32, , 11F
原則如三、四樓所說
11/04 15:32, 11F

11/04 15:57, , 12F
感謝各位解說的這麼清楚,我了解囉
11/04 15:57, 12F
文章代碼(AID): #1KM5efM5 (C_and_CPP)