簡體   English   中英

與內存相關的 ISA 功能有哪些?

[英]What are the memory-related ISA features?

我正在准備計算機體系結構考試,但我似乎無法回答這個問題:

以下代碼可用於檢查與內存相關的 ISA 功能。 使用此 function 可以確定什么?

#define X 0
#define Y 1

int mystery_test(){
        int i = 1;
        char *p = (char *) &i;
        if(p[0] == 1) return X;
        else return Y;
}

我在想它會檢查指針和 arrays 是否基本相同,但這不是與內存相關的功能,所以我很確定我的答案是錯誤的。

有人可以幫忙嗎? 此外,與內存相關的 ISA 功能是什么?

謝謝!

來自 Retired Ninja 的答案比你想知道的要多得多,但更簡短的版本是神秘代碼正在測試 CPU 的字節序。

我們都知道現代 CPU 中的 memory 是面向字節的,但是當它存儲更大的項目時 - 例如,一個 4 字節的 integer - 它放置組件的順序是什么?

想象一下 integer 值 0x11223344,即四個單獨的字節 (0x11.. 0x44)。 它們不能全部放在單個字節 memory 地址中,因此 CPU 必須將它們按某種順序排列。

Little-endian 表示低位 - 0x44 - 位於最低的 memory 地址中,而 big-endian 將最高有效字節放在首位; 這里我們假設它存儲在 memory 位置 0x9000(隨機選擇):

        Little   Big -endian
0x9000: x44     x11
0x9001: x33     x22
0x9002: x22     x33
0x9003: x11     x44

它必須選擇一些東西,對嗎?

您正在考慮的代碼是將 integer 1 值存儲到 memory 的 4(或 8)字節塊中,因此它將位於以下兩個組織之一中:

        Little  Big
0x9000: x01     x00   
0x9001: x00     x00
0x9002: x00     x00
0x9003: x00     x01

但是通過將integer指針轉換為char指針,它只查看低字節,0/1 值告訴您這是大端還是小端。

對於 little-endian,返回 X/0,對於 big-endian,返回 Y/1。

祝你考試順利。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM