内存地址和数组,汇编 x86

Memory address and array, assembly x86

我在 Emu8086 上有这个代码:

Mov Bx,0000h
Mov Cx,0ah 
Mov Si,0200h
Fillup:
Mov Ax,Array[bx]
Mov Ds:[Si],Ax
Inc Bx
inc si                           
loop FillUp

Array dw 28h,43h,0a4h,4ch,81h,21h,0ceh,0fh,2dh,87h

模拟时发生这种情况:

Image

内存table是这样的:

Address Value
0200 28
02001 00
02002 43
02003 00
02004 a4

每两步输入一次数字,我不知道为什么会这样。

循环的方法我试了很多,还是找不到解决方法

最后一个问题

如何在特定内存地址初始化一个包含 n 个元素的数组?

例如,如何从地址 0200h 生成包含 10 个元素的整个数组?无需从数组移动到内存地址。

源是 个词 的数组。将 'dw' 更改为 'db'。

与大多数现代处理器一样,它是字节可寻址的。这意味着每个字节都有自己的地址,当我们将字节分组以形成更大的字大小时,内存中的那个字会占用多个字节地址。

我们需要始终如一地告诉处理器相同数据类型的相同数据大小。处理器不知道数据声明并像高级语言那样记住它们的类型:它只看到指令,并且每条操作数据的指令——在某种意义上——必须告诉处理器数据占用了多少字节。

以下是需要保持一致的事项列表:

  • 指针大小递增 — 指针加 2 以访问下一个字大小的数据
  • 索引缩放 — 对于单词大小的数据,将索引缩放 2
  • 数据声明 — 使用 dw 字大小的数据
  • 加载和存储大小——使用字大小的加载和存储
    • 通过使用字大小的源或目标寄存器(例如 axbxalbl
    • 根据您的汇编语言使用“word ptr”或“word