2013-03-06 53 views
3

任何人能解釋我這是什麼高VS低地址在以下問題?:高VS低內存地址和分支

通過定義的語境意思,「高」的地址是那些大型的無符號數和「低「地址是那些小的無符號數字。

使用位於物理存儲器地址0x320ACB48處的beq(分支等於)指令可以將控制傳輸到的最高地址是什麼?

+1

您可能要檢查:http://stackoverflow.com/questions/6950230/how-to-calculate-jump-target-address-and-branch-target-address/6954138#6954138 – nrz 2013-03-06 01:16:26

回答

2

答案取決於特定的MIPS芯片上,並在其MMU(如果有的話)。

爲32位指令的有效地址是從0到4GB-4。但是,如果內存不在整個範圍內,或者存在內存映射設備,或者如果啓用了虛擬到物理地址轉換,則無法在任意位置執行代碼或執行有意義的代碼辦法。

如果傳輸控制,以不被存儲備份的位置,執行垃圾。這同樣適用於將控制轉移到代表某些內存映射設備的寄存器或數據緩衝區的位置。

如果頁面轉換設置的,因爲它限制了這種方式訪問​​地址的特定區域或不允許執行存在,在這些地區根本無法執行任何東西。

beq自身的位置可以轉移控制的程度來看,beq也存在限制。 beq只能將控制權轉移到其位置+/-約2 字節(= 128KB)。

因此,理論上,位於0x320ACB48的beq可以將控制權轉移到0x320ACB48 + 4 - 32768 * 4到0x320ACB48 + 4 + 32767 * 4的任何位置(即4的倍數)。

如果beq臨近地址0,其可以是能夠將控制轉移到4GB附近,除非CPU禁止地址的包裝。同樣,如果beq接近4GB點,則它可能會將控制權轉移到接近地址0,除非CPU再次禁止地址換行。