微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

内存地址和数组,汇编 x86

如何解决内存地址和数组,汇编 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

内存表如下所示:

地址 价值
0200 28
02001 00
02002 43
02003 00
02004 a4

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

我尝试了很多方法来循环,但找不到解决方案。

最后一个问题

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

例如,如何制作来自地址 0200h 的 10 个元素的整个数组?无需从数组移动到内存地址。

解决方法

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

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

这里列出了需要保持一致的事项:

  • 指针大小递增 — 将指针加 2 以访问下一个字大小的数据
  • 索引缩放 — 将字大小的数据的索引缩放 2
  • 数据声明 — 使用 dw 表示字大小的数据
  • 加载和存储大小——使用字大小的加载和存储
    • 使用字大小的源或目标寄存器(例如axbx、vs. albl
    • 根据您的汇编语言使用“word ptr”或“word
,

源是一个数组。将“dw”更改为“db”。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。