访问emu8086中的数组

问题描述 投票:0回答:1

有人可以告诉我在 emu8086 中访问数组元素的最有效方法吗?
作为一个例子,我得到了这个数组:

tab db 30h,35h,32h,37h,38h,39h,31h

mov si, offset tab
然后使用
si
访问元素是不是错误?如
tab[si]
tab[si+1]
tab[si+n]

我有义务继续使用
lodsb
/
lodsw
吗?

arrays assembly element x86-16 emu8086
1个回答
0
投票

mov si, offset tab
然后用si访问元素是不是错了?像
tab[si]
tab[si+1]
tab[si+n]
...等等。

那确实是非常错误的!假设 emu8086 可以接受

tab[si]
,其中位移分量(部分)位于方括号之外,那么您将错误地将偏移量添加到数组两次。一次进入 SI 的初始化(
mov si, offset tab
),再次进入使用寻址模式的加载/存储指令
tab[si]

四种解决方法:

  • 使用

    mov si, offset tab
    设置 SI,并使用
    [si]
    访问第一个元素,使用
    [si+1]
    访问第二个元素。

  • 使用

    xor si, si
    设置SI(与
    mov si, 0
    相同)并使用
    tab[si]
    访问第一个元素,使用
    tab[si+1]
    访问第二个元素。

  • 使用

    mov si, offset tab
    设置 SI 并访问所有 带有
    [si]
    的元素,因为在访问之间您将增加 SI 寄存器作为循环逻辑的一部分。

  • 使用

    xor si, si
    (与
    mov si, 0
    相同)设置SI并访问所有 带有
    tab[si]
    的元素,因为在访问之间您将增加 SI 寄存器作为循环逻辑的一部分。

我有义务一直使用 lodsb/lodsw 吗?

绝对不行。但如果您需要编写最紧凑的解决方案,那么通常使用这些字符串原语就可以完成这项工作。

© www.soinside.com 2019 - 2024. All rights reserved.