初級彙編程序(三)

三、循環程序和串的傳送程序

編程實現將內存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,即傳輸成功!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章