尝试更好地理解使用整数数组并遇到了这个问题。
问:当我只是打印我的阵列的元素并且我不使用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
由于
答案 0 :(得分:0)
ASL或算术左移,将数字的所有位移到左侧。 因此0001变为0010,然后变为0100,依此类推。这相当于将数字乘以2。
使用ASLX命令时,将索引寄存器加倍。在处理整数数组时经常这样做,因为整数占用两个字节,索引寄存器以单个字节为单位。
换句话说,如果你只是简单地将索引寄存器递增/递减1,你最终会在"之间转换。整数,这样你就读取了一个的最后一个字节和另一个的第一个字节。这就是为什么如果你没有ASLX就会得到奇怪的结果。
另一个可能使其更清晰的选项是您可以将索引寄存器递增/递减2。你不必做任何转移,因为你将保持与整数数组保持一致。