问题:
将内存ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中。
分析:
先将内存偏移调成一样的,也就是0:2000:20b单元等同于0020:00020:b单元,复制的过程用循环来实现
代码:
assume cs:code
code segment
zhao:mov bx,0 ;偏移地址从0开始
mov cx,12 ;总共循环12次
s:mov ax,0ffffH
mov ds,ax
mov dl,[bx] ;将ffff:bx中的数据送入dl
mov ax,0020H
mov ds,ax
mov [bx],dl ;将dl的数据送入0020:bx
inc bx ;偏移地址加1
loop s
mov ax,4c00H
int 21h
code ends
end zhao
这个程序是可以实现功能的,但是每次循环要设置两次ds,效率不高,可以使用两个段寄存器分别存放原始单元ffff:X和目标单元0020:X的段地址。
修改后的代码如下:
assume cs:code
code segment
zhao:mov ax,0ffffH
mov ds,ax ;(ds)=0ffffH
mov ax,0020H
mov es,ax ;(es)=0020H
mov bx,0 ;偏移地址从0开始
mov cx,12 ;总共循环12次
;此时,ds:bx指向ffff:0, es:bx指向0020:0
s:mov dl,[bx] ;将ffff:bx中的数据送入dl
mov es:[bx],dl ;将dl的数据送入0020:bx
inc bx ;偏移地址加1
loop s
mov ax,4c00H
int 21h
code ends
end zhao
其中,这行代码使用了段前缀:
mov es:[bx],dl ;将dl的数据送入0020:bx
代表将dl的数据送入0020:bx
网友评论