如何解决内存地址和数组,汇编 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
当发生这种情况时:
内存表如下所示:
地址 | 价值 |
---|---|
0200 | 28 |
02001 | 00 |
02002 | 43 |
02003 | 00 |
02004 | a4 |
每两步输入一个数字,我不知道为什么会这样。
最后一个问题
如何在特定的内存地址初始化一个包含 n 个元素的数组?
例如,如何制作来自地址 0200h 的 10 个元素的整个数组?无需从数组移动到内存地址。
解决方法
像大多数现代处理器一样,它是字节可寻址的。这意味着每个字节都有自己的地址,当我们将字节分组以形成更大的字长时,内存中的该字将占用多个字节地址。
对于相同的数据类型,我们需要始终如一地告诉处理器相同的数据大小。处理器不知道数据声明并像高级语言那样记住它们的类型:它只看到指令,并且每条操作数据的指令——在某种意义上——都必须告诉处理器数据占用了多少字节。
这里列出了需要保持一致的事项:
- 指针大小递增 — 将指针加 2 以访问下一个字大小的数据
- 索引缩放 — 将字大小的数据的索引缩放 2
- 数据声明 — 使用
dw
表示字大小的数据 - 加载和存储大小——使用字大小的加载和存储
- 使用字大小的源或目标寄存器(例如
ax
、bx
、vs.al
、bl
) - 根据您的汇编语言使用“
word ptr
”或“word
”
- 使用字大小的源或目标寄存器(例如
源是一个词数组。将“dw”更改为“db”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。