【问题标题】:Why is ASLX required when reading values from INT array为什么从 INT 数组读取值时需要 ASLX
【发布时间】:2016-04-25 05:34:33
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 您确定masm 标签正确吗?这看起来像 PEP/8 的指令集?

标签: assembly pep8-assembly


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2019-03-11
    相关资源
    最近更新 更多