【问题标题】:What is the practical difference between the SI and DI registers?SI 和 DI 寄存器之间的实际区别是什么?
【发布时间】:2010-12-01 19:58:11
【问题描述】:

我不明白有什么区别。

【问题讨论】:

    标签: assembly x86 cpu-registers


    【解决方案1】:

    我的程序集有点生锈,但一个是源索引,另一个是目标索引。像movsb 这样的指令将从SI 指向的内存位置复制一个字节,并将其移动到DI 指向的内存位置,然后将两者递增,所以如果你想复制存储在SI+1DI+1,只需要进一步的 movsb 指令。

    【讨论】:

      【解决方案2】:

      当你使用像movsb这样的指令时,si被认为是s源寄存器,而di被认为是d目标寄存器。但它们都是普通的 x86 寄存器。

      【讨论】:

        【解决方案3】:

        如上所述,di 代表目标索引,si 代表源索引,当我们想要从内存中移动数据时,我们使用 si,例如 mov ax,[si]。 当我们想要将数据移动到内存时,我们使用 di。例如,mov [di],ax

        都是16位寄存器,不能拆分成8位

        【讨论】:

        • 您可以同时使用 mov [si],ax 和 mov ax, [di],如果您使用简单的 MOV 指令,它们基本相同,就像您可以使用 mov [bx], ax .当您使用 MOVSB 之类的指令时,CPU 会假定 SI 是源,DI 是目标,但是当您手动执行时,您可以同时使用两者中的任何一个。
        【解决方案4】:

        SI 代表源索引。源索引用作指向在字符串指令(LODS、MOVS 或 CMPS)中读取的当前字符的指针。在进行间接寻址时,源索引也可用作添加 Bx 或 Bp 的偏移量。
        示例:

        MOV [Bx + SI] , Ax  
        

        该指令将 Ax 的内容复制到地址为 Bx 和 SI 之和的内存位置。

        DI 代表目标索引,用作指向在字符串指令中写入或比较的当前字符的指针。

        它也可以像 SI 一样作为偏移量使用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-06-01
          • 2023-03-08
          • 2021-06-12
          • 1970-01-01
          • 2010-10-22
          • 1970-01-01
          • 2012-05-08
          • 2011-03-06
          相关资源
          最近更新 更多