2016-04-25 112 views
0

試圖更好地理解使用整數數組並解決此問題。問:當我簡單地打印數組的元素並且不使用ASLX時,我得到了意想不到的結果,但是當我使用ASLX時,我得到了預期的結果。 ASLX如何影響我的結果?當從INT數組讀取值時,爲什麼需要ASLX

FOOD:.word 0   
    .word 1   
    .word 1  
    .word 0 

main:LDX  3,i   ; i = 3 
    STX  i,d 

for: CPX  0,i   ; i >= 0 
    BRLT endFor 
    DECO i,d 
    CHARO ' ',i 
    ASLX    ; If I remove this I get 256 instead of expected value 
    DECO FOOD,x ; FOOD[i] 
    CHARO '\n',i 
    LDX  i,d 
    SUBX 1,i 
    STX  i,d 
    BR  for 

endFor: stop 
    .end 

由於

+0

你確定'masm'標籤正確嗎?這看起來像PEP/8的指令集? –

回答

0

ASL,或向左算術移位,改變所有的數向左的位。 因此,0001變成了0010,然後是0100,依此類推。這相當於將數字乘以兩。

當您使用ASLX命令時,您將索引寄存器加倍。在使用整數數組時,您經常這樣做,因爲整數佔用兩個字節,並且索引寄存器以單個字節度量。換句話說,如果你只是簡單地將索引寄存器遞增/遞減1,那麼你最終會得到「在」整數之間,這樣你就可以讀取一個字節的最後一個字節和另一個字節的第一個字節。這就是爲什麼如果你不是ASLX你會得到奇怪的結果。

另一個可能使其更清楚的選項是,您可以將索引寄存器遞增/遞減兩位。您不必進行任何移位,因爲您將與整數數組保持一致。

相關問題