汇编中的 ds:si 和 es:di 是什么意思?

发布于 2024-12-13 04:17:42 字数 211 浏览 3 评论 0原文

movsb(移动字符串,字节)指令获取地址处的字节 ds:si,存储在地址es:di处,然后递增或递减 si 和 di 寄存器减一。

我知道 esi,si 和 edi,di 寄存器,

但不知道 ds:sies:di

它们是什么意思?

The movsb (move string, bytes) instruction fetches the byte at address
ds:si, stores it at address es:di, and then increments or decrements
the si and di registers by one.

I know esi,si and edi,di registers,

but not ds:si and es:di ,

what do they mean?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

好久不见√ 2024-12-20 04:17:42

ds:sies:di 表示相关寄存器引用的段:偏移量。当您在实模式下工作时(每个偏移量最大为 64K),这一点非常重要。

在实模式下,段和偏移量组合为段* 16 + 偏移量

在保护模式下,段寄存器保存一个“选择器”。选择器引用的内存基地址与选择器本身的值并不直接相关——相反,选择器只是充当在表中查找数据的索引。然而,在通常情况下,这意义不大——大多数(当前)保护模式环境都是用 CS、DS、ES 和 SS 设置的,所有设置的基地址都为 0,最大偏移量为4 GB,因此通过 DS 寻址与通过 ES 寻址没有区别。

ds:si and es:di mean the segment:offset referred to by the registers in question. This is primarily important when you're working in real mode (where offsets are a maximum of 64K apiece).

In real mode, the segment and offset are combined as segment * 16 + offset.

In protected mode, a segment register holds a "selector". The base address of the memory referred to by the selector isn't directly related to the value of the selector itself -- rather, the selector just acts as an index to look up data in a table. In the usual case, however, this means very little -- most (current) protected mode environments are set up with CS, DS, ES and SS all set up with base addresses of 0 and maximum offsets of 4 Gigabytes, so addressing via DS vs. ES makes no difference.

山田美奈子 2024-12-20 04:17:42

这些是 16 位寄存器,它们用于 LODSB 或其他循环内存以及应用或复制数据的操作。您将地址加载到 es:di 或 ds:si 中,并将 cx 设置为您需要顶部复制的任何字节或字数,然后调用 LODSB LOADSW 或其他。您甚至可以使用这两种方式从一个内存位置复制到另一个内存位置。
请参阅此处的示例,其中将字符串复制到串行端口:
http://vitaly_filatov.tripod.com/ng/asm/asm_000.71。 html

These are 16 bit registers, they are used for operations like LODSB or others that loop trough memory and either apply or copy data. You load an address into es:di or ds:si and set the cx to whatever count of bytes or words you need top copy and call the LODSB LOADSW or whatever. You can even copy from one memory location to another this way using both.
See an example here where they copy a string to a serial port:
http://vitaly_filatov.tripod.com/ng/asm/asm_000.71.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文