0
Nicu Natea
#1
.model small
.stack 100
.data
    text3 db '$'
    lenText3 equ $ - text3
    text2 db 'World'
    lenText2 equ $ - text2
    text1 db 'Hello '
    lenText1 equ $ - text1
    buffer db 100 dup(0)
.code
; param [in] si  sursa
; param [in] di  destinatie
; param [in] cx  lungime
; datele de intrare sunt restaurate la iesirea din procedura
copy proc
    push si
    push di
    push cx
    cld
    rep movsb
    pop cx
    pop di
    pop si
    ret
copy endp

start:
    mov ax, @data
    mov ds, ax
    mov es, ax

    cld                         ; setam directia decopiere
    mov si, offset text1  ; setam sursa
    mov di, offset buffer ; setam destinatia
    mov cx, lenText1     ; setam numarul de caractere ce urmeaza a fi copiate
    rep movsb              ; copiem
    ; buffer = Hello

    ; Concatenam: "World" la textul anterior
    mov si, offset text2  ; setam sursa
    ; destinatia ramane nemodificata. a fost actualizata de instructiunea anterioara: 'movsb'
    mov cx, lenText2    ; setam numarul de caractere ce urmeaza a fi copiate
    rep movsb             ; copiem
    ; buffer = Hello World


    ; Concatenam: "$" / caracter  terminal pt prin string
    mov si, offset text3  ; sursa
    ; destinatie ramane di
    mov cx, lenText3    ; setam numarul de caractere ce urmeaza a fi copiate
    call copy                ; apelam o metoda de copiere
    ; buffer = Hello World$


    ; afisam datele copiate
    mov ah, 9
    lea dx, buffer
    int 21h

    ; rutina exit
    mov ah, 4ch
    int 21h

end start
Reply



Forum Jump: