目前,我正在學習計算機原理,程序集和我被困在大端--小端。計算機原理,大小尾數
我已經檢查了EIP寄存器(在Linux中使用命令x/8xw),它保存的值爲0x00fc45c7(一個字,4字節)。當我請求字節而不是字(x/8xb)時,我得到一個反向序列(因爲它是小端機):c7 45 fc 00.當我請求半字(x/8xh)時,我得到這個序列:45c7和00fc。這些都是平等的對方,我想自己檢查一下。當將第一個十六進制值(0x00fc45c7)轉換爲十進制值時,我得到16532935(算法如下:16^7 * 0 + 16^6 * 0 + 16^5 * 15 + 16^4 * 12 + 16^3 * 4 + 16^2 * 5 + 16^1 * 12 + 16^0 * 7)。這是一個簡單的從十六進制到十進制的轉換,我理解它。
在我正在閱讀的書中,有一個計算示例,它證明0x00fc45c7與c7 45 fc 00相同。計算如下: 0 *(256^3)+ 252 *(256^2)+ 69 *(256^1)+ 199 *(256^0)。
據我所知,0,252,69和199是我們在將每個字節轉換成十進制後得到的值fc = 15 * 16^1 + 12 * 16^0 = 252,45 = 69和c7 = 199 。我不明白的是256代表什麼,爲什麼我們提高256的權力?這些計算的算法是什麼?如果我們不使用字節(c7 45 fc 00),而使用半字(45c7和00fc)以獲得與0x00fc45c7中相同的值,那麼它們會是什麼?我通過互聯網衝浪,但還沒有找到任何答案。所有文章都只是解釋了小端和大端系統之間的差異,但是解釋並沒有涉及到這個問題。非常感謝你的幫助。
如果使用一個十六進制字符(1個半字節)作爲數字,則基數爲16.如果使用兩個十六進制字符(一個字節)作爲單個數字,則基數爲16^2 = 256。如果使用四個十六進制字符(半字)作爲單個數字,則基數爲16^4 = 65536。 –
謝謝你的幫助! – ShHolmes