三、循环程序和串的传送程序
编程实现将内存BUF1中的10个字节移至内存BUF2中。
data segment
buf1 db 'ABCDEFGHIJ'
buf2 db 10 dup(?)
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
lea si,buf1;将buf1的地址送si
lea di,buf2;将buf2的地址送di
mov cx,10;共传送10个字节
lop:
mov al,[si]
mov [di],al;[si]->[di]
inc si;[si]+1->si
inc di;[di]+1->di
dec cx;[cx]-1->cx
jnz lop;cx不为0时跳转到lop
mov ah,4ch
int 21h
code ends
end start
典型的循环结构,接下来看结果:
可以看到,前面的41-4A为buf1,后面的41-4A为buf2
可能你会觉得这样逐个字符传输太麻烦,那么就可以使用串的传输:
data segment
buf1 db 'ABCDEFGHIJ'
buf2 db 10 dup(?)
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
lea si,buf1
lea di,buf2
mov cx,10
cld;置DF=0,传操作处理方向从最低地址逐个处理
rep movsb;以字节传输,每传输一个字符执行:ds->es,di+1,si+1
cx=0时退出rep循环
mov ah,4ch
int 21h
code ends
end start
结果:
注意这里是ES段,可以看到000A~0013的位置就是buf2,即传输成功!