0

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

问:当我只打印数组的元素并且我不使用 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

谢谢

4

1 回答 1

0

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

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

换句话说,如果您只是将索引寄存器递增/递减 1,您最终会得到“介于”整数之间,这样您就可以读取一个整数的最后一个字节和另一个的第一个字节。这就是为什么如果你不使用 ASLX,你会得到奇怪的结果。

另一个可能更清楚的选项是您可以将索引寄存器增加/减少 2。您不必进行任何移位,因为您将与整数数组保持一致。

于 2016-12-11T13:47:37.783 回答