关于x86 16:ds:si和es:di在汇编中意味着什么?

您所在的位置:网站首页 si和ds还是ss 关于x86 16:ds:si和es:di在汇编中意味着什么?

关于x86 16:ds:si和es:di在汇编中意味着什么?

2024-07-11 22:12| 来源: 网络整理| 查看: 265

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.

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

但不是ds:si和es:di,

他们的意思是什么?

相关讨论 不错的阅读:en.wikipedia.org/wiki/ 如果您想知道16位代码过去是如何工作的,那么您确实可以追溯到上个世纪并了解段寄存器。 zh.wikipedia.org/wiki/Segment_register

ds:si和es:di表示相关寄存器所引用的segment:offset。当您在实模式下工作时(偏移最大为每个64K),这尤其重要。

在实模式下,将偏移的段组合为segment * 16 + offset。

在保护模式下,段寄存器包含一个"选择器"。选择器引用的内存的基地址与选择器本身的值没有直接关系,而是选择器仅充当在表中查找数据的索引。但是,在通常情况下,这意味着很少-大多数(当前)保护模式环境都是使用CS,DS,ES和SS设置的,所有基址都设置为0,最大偏移量为4 GB,因此通过DS进行寻址vs. ES没有区别。

相关讨论 您是说我们不需要手动指定ds和es的值吗? @new_perl:不,无论如何都不会在任何合理的最新版本上使用。 那么谁来操纵段寄存器?segment * 16 + offset是否指向物理内存地址? @new_perl:在实模式下(使用segment * 16 + offset),是的。 在保护模式下,段寄存器中的选择器用于表查找,并且在表中找到基地址。 操作系统确实在实模式下工作,但用户应用程序在保护模式下工作吗? @new_perl:不是在现代操作系统上,不是。 OS内核以内核模式运行,在完全访问所有内存的过程中,虚拟模式类似于实模式,仅此而已。 在大多数当前的OS上,段寄存器根本不会受到太多的操纵-OS在引导时对其进行设置,然后它们就几乎被保留了(唯一明显的例外是Windows下的FS,它始终指向线程数据块 )。

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3