problem:
将内存ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中
solve
0-b和0-b,这两段内存的长度相同,那么我们只需要循环12次就可以了→mov cx,12我们尽可能简化问题,把两段都变成从0开始→0:20x ~ 0:20b变成0020:0 ~ 0020:b
assume cs:s1
s1 segment
mov bx,0
mov cx,12
s:
mov ax,0ffffh
mov ds,ax
mov dl,[bx]
mov ax,0020
mov ds,ax
mov [bx],dl
inc bx
loop s
mov ax,4c00h
int 21h
s1 ends
end
上述方法循环一次改变两次ds的值,这样虽然正确但是效率不高。 这让我想到了空间换取时间的方法:
分别使用两个段寄存器存放两者的段地址这里用到了显式给出段地址
assume cs:s1
s1 segment
mov ax,0ffffh
mov ds,ax
mov ax,0200h
mov es,ax
mov bx,0
mov cx,12
s:
mov dl,[bx]
mov es:[bx],dl
inc bx
loop s
mov ax,4c00h
int 21h
s1 ends
end