三、循環程序和串的傳送程序
編程實現將內存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,即傳輸成功!