【问题标题】:x86 iterate over a 2-byte word arrayx86 迭代一个 2 字节的字数组
【发布时间】:2012-12-22 15:14:38
【问题描述】:

我正在使用 emu8086 在 8086 游戏中编写循环,我想遍历单词值,但不是像这样声明的数组的字节;

player_fire  dw 320 dup(0)

; ...

mov  bx, offset player_fire
mov  cx, 320
fire_loop:
mov  ax, [bx+si]
inc  si
loop fire_loop

但我知道这是错误的。我在写入第 i 个元素时也遇到问题,是否应该使用 bx + si 或 bx + (2*si) 来引用它?

【问题讨论】:

    标签: assembly x86 dos


    【解决方案1】:

    第 i 个元素位于 [base + 2*register]。

    但不能直接在 80386 寻址模式之前写入。在 8086+ 上,您可以这样做:

     fire_loop:
      mov ax,[bx+si]
      add si, 2
      loop fire_loop
    

    【讨论】:

    • 另一种选择是简单地增加指针,add bx, 2
    【解决方案2】:
     fire_loop:
      mov ax,[bx+si];;mov to the next sell and put in ax
      add si, 2; inc si
      loop fire_loop;dex cx and loop
    

    【讨论】:

      猜你喜欢
      • 2013-04-19
      • 2021-12-21
      • 2021-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多