问题是:
编写汇编语言程序,从7000H段中的偏移0200H到0300H开始移动16字节数据。
我该如何编写程序?我的意思是,我应该怎么拿地址?我应该考虑偏移地址还是基地址?
答案 0 :(得分:1)
我该如何编写程序?
您编写了一个循环,该循环从源地址连续读取并在目标地址处写入。
我的意思是,我应该怎么拿地址? 我应该考虑偏移地址还是基地址?
要解决内存问题,您需要使用两个地址组件。
您将给定的段值放在段寄存器中。 DS
是更常见的选择:
mov ax, 7000h
mov ds, ax
您将提供的源偏移量放在BX
,SI
或DI
等地址寄存器中:
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
这样的专门指令。在教科书中查找,看看开始使用它需要什么。快乐的发现!
请注意,上述所有代码均不构成完整的工作程序。