在8086中将数据从一个存储位置传输到另一个存储位置

时间:2017-06-20 15:24:35

标签: assembly x86-16

问题是:

  

编写汇编语言程序,从7000H段中的偏移0200H到0300H开始移动16字节数据。

我该如何编写程序?我的意思是,我应该怎么拿地址?我应该考虑偏移地址还是基地址?

1 个答案:

答案 0 :(得分:1)

  

我该如何编写程序?

您编写了一个循环,该循环从源地址连续读取并在目标地址处写入。

  

我的意思是,我应该怎么拿地址?   我应该考虑偏移地址还是基地址?

要解决内存问题,您需要使用两个地址组件。

  • 您将给定的段值放在段寄存器中。 DS是更常见的选择:

    mov     ax, 7000h
    mov     ds, ax
    
  • 您将提供的源偏移量放在BXSIDI等地址寄存器中:

    mov     si, 0200h
    
  • 您将提供的目标偏移量放在不同的地址寄存器中:

    mov     di, 0300h
    
  • 您将所请求的字节数放在其余的通用寄存器中,CX是自然选择,如果我们想要使用LOOP指令,它确实是唯一的选择:< / p>

    mov     cx, 16
    

以上所有选择都会导致以下循环:

Again:
    mov     al, [si]   ;Get 1 byte from the source range
    inc     si         ;Point to the next byte
    mov     [di], al   ;Write 1 byte in the destination range
    inc     di         ;Point to the next byte
    loop    Again      ;Decrement the counter and jump to the label "Again"
                       ; if the counter is not yet exhausted.

这只是您的任务的一个解决方案。还有更多存在 然而,最短的解决方案使用像MOVS这样的专门指令。在教科书中查找,看看开始使用它需要什么。快乐的发现!

请注意,上述所有代码均不构成完整的工作程序。