2010-10-08 22 views
24

什么x86寄存器表示movsb指令中的源位置?什么是x86寄存器表示movsb指令中的源位置?

+37

这是'osdev.org'的输入问题! – 2012-04-19 06:30:02

+0

正是!当我想加入osdev时,甚至可能会使用Google搜索功能 – geek1000 2012-11-03 17:31:44

+4

@ManuHegde嘿,至少你不太可能是机器人。这个问题应该是防范的。 ;-) – 2014-05-16 18:17:22

回答

32

在32位模式下,esi

在具体的,movsb拷贝一个字节从ds:esies:edi时,调整这两种esiedi 1,向上或向下根据方向标志。

+6

当今年轻人的一些相关的x86琐事 - “SI”(或32位世界中的“ESI”)代表“源索引”,“DI”代表“目标索引”,它来自这些寄存器的特殊用途。 – 2010-10-08 04:16:42

+1

另请注意,默认段寄存器DS和ES可被覆盖以使用其他段寄存器。 – 2010-10-08 04:44:46

+5

@ I. J.肯尼迪:只有'ds'可以被覆盖。 'es'是固定的。 – 2010-10-08 05:05:24

7

如何从手动

提取信息,现在你已经登录到osdev.org,是时候通过实际学习它来支付你的道德债务。 :-)

Intel Manual Volume 2 Instruction Set Reference - 325383-056US September 2015部 “从字符串字符串MOVS/MOVSB/MOVSW/MOVSD/MOVSQ-移动数据” 表示:

移动的字节,字或双字与所述第二操作数指定(源操作数)与第一个操作数(目标操作数)指定的位置 。源操作数和目标操作数都位于内存中。 ESI或DS:源操作数的 地址从DS读取SI注册

最小的测试程序

最后,你必须使用的指令,看是否有最低限度的程序你理解正确的话:

section .data 
    src db 0 
    dest db 1 
section .text 
global _start 
_start: 
    mov esi, src 
    mov edi, dest 
    cld 
    movsb 
    /* dest == 0*/ 

这个Runnable的版本断言on GitHub