2012-11-24 84 views
1

我閱讀本指南,瞭解有關英特爾8080仿真Emulator 101當我讀的代碼來檢查我寫的,我是從一個叫做英特爾8080本書偶然發現了這個英特爾8080:內存偏移計算

case 0x36:  //MVI M,byte 
{     
//AC set if lower nibble of h was zero prior to dec 
uint16_t offset = (state->h<<8) | state->l; 
state->memory[offset] = opcode[1]; 
state->pc++; 
} 
break; 

/8085彙編語言程序,我讀到MVI這個

存儲在其第二個字節的數據到由H和L.中號尋址的 存儲器位置這指令複製是一個符號參照 H和L寄存器對。

所以我猜測偏移量是H和L處理的內存位置,但爲什麼我們這樣做?這是(state->h<<8) | state->l

感謝

+2

你的意思是「我們爲什麼要那樣做?」文檔中說'M'是'H'和'L'對的約定,'H'和'L'寄存器組合在一起(通過'<<'和'|')來提供16位偏移量。你想再次知道什麼? – vladr

+0

我的意思是''''和'|'的組合怎麼給我們16位的偏移? –

+1

表示一個16位值需要兩個字節。向左移8位將'h'的值放入第二個(* h * igh)字節(並將0放入低位字節),並將'|'與* l * ow字節('l '),產生所需的偏移量。研究小端和按位操作。 – DCoder

回答

3

是如何的< <和組合|給我們16位偏移量?

H,一個8位的寄存器,其中H 是最顯著位和H 是至少顯著位:

H7H6H5H4H3H2H1H0

L,一個8位寄存器,其中L 是最高有效位和L 是最低有效位:

L7L6L5L4L3L2L1L0

您現在要建構16位偏移因組合Hħ ighest 8位)的結果和L大號虧欠於8位)。在C/C++/Java的,這可以通過一個來實現8位左移位01​​接着是按位或|如下:

 
H  = H7H6H5H4H3H2H1H0 
H<<8 = H7H6H5H4H3H2H1H000000000 
H<<8|L = H7H6H5H4H3H2H1H0L7L6L5L4L3L2L1L0 
+0

非常感謝vladr。 –