为什么在从INT数组读取值时需要ASLX

时间:2016-04-25 05:34:34

标签: assembly pep8-assembly

尝试更好地理解使用整数数组并遇到了这个问题。

问:当我只是打印我的阵列的元素并且我不使用ASLX时,我会得到意想不到的结果,但是当我使用ASLX时,我得到预期的结果。 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

由于

1 个答案:

答案 0 :(得分:0)

ASL或算术左移,将数字的所有位移到左侧。 因此0001变为0010,然后变为0100,依此类推。这相当于将数字乘以2。

使用ASLX命令时,将索引寄存器加倍。在处理整数数组时经常这样做,因为整数占用两个字节,索引寄存器以单个字节为单位。

换句话说,如果你只是简单地将索引寄存器递增/递减1,你最终会在"之间转换。整数,这样你就读取了一个的最后一个字节和另一个的第一个字节。这就是为什么如果你没有ASLX就会得到奇怪的结果。

另一个可能使其更清晰的选项是您可以将索引寄存器递增/递减2。你不必做任何转移,因为你将保持与整数数组保持一致。