为什么将值 2 添加到 si 只会使索引增加 1?

Gun*_*one 2 x86 assembly x86-16

我是 x86 架构和汇编的初学者,这是一个代码片段,其下面包含步骤。

我知道 si 是源索引,它充当数组的索引。

突出显示的行表明正在向其中添加 2,但答案表明我们仅向上移动索引 1。

我确信我的解释是错误的,如果有人能解释发生了什么,那将会有很大帮助!

汇编新手友好的词汇首选!

在此输入图像描述

小智 5

发生这种情况是因为array中的数据被视为与si中的索引不同的类型。

由于array是用dw(数据字,16 位元素)声明的,并且si是一个以字节(8 位)为基础索引内存的指针,si因此对于您希望遍历的每个字索引必须采取两个“步骤”。否则,您最终会在数组中每个字的高位字节和低位字节之间交替。

在计算机科学术语中,x86 是字节可寻址的,并且数组元素是多字节的。

  • `dw` 是“数据 -- 字”,而不是双字,x86 将字定义为 2 字节/16 位。`dd` 表示双字,即 32 位。 (3认同)
  • 当涉及类型规范时,您可能会混淆实际的机器字和 x86 汇编中的定义。x86 Intel 语法始终具有相同的类型规范定义。Byte/8、Word/16、Dword/32、Qword/64、Tword/80 映射到 x86 处理器上的操作数大小。 (2认同)