13

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

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

但不是ds:sies:di

他们的意思是什么?

4

2 回答 2

10

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

在实模式下,段偏移被组合为segment * 16 + offset.

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

于 2011-11-01T01:30:51.700 回答
2

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

于 2019-07-14T12:09:09.267 回答