לדלג לתוכן

1.5 מחרוזות ומערכים פתרון

arrays_ex1_sum.asm — תרגיל 1: סכום של מערך 8 ביט

IDEAL
MODEL small
STACK 100h

DATASEG
array db 10, 20, 30, 40, 50
sum8  db 0

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

    mov cx, 5
    mov si, offset array
    xor ax, ax        ; AX=0, סכום יהיה ב-AH

sum_loop:
    lodsb             ; AL ← [DS:SI], SI++
    add ah, al
    loop sum_loop

    mov sum8, ah

exit:
    mov ax, 4C00h
    int 21h
END start

arrays_ex2_copy16.asm — תרגיל 2: העתקת מערך של 16 ביט

IDEAL
MODEL small
STACK 100h

DATASEG
src dw 1, 2, 3, 4, 5
dst dw 5 dup(0)

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

    mov cx, 5
    mov si, offset src
    mov di, offset dst

copy_loop:
    mov ax, [si]
    mov [di], ax
    add si, 2
    add di, 2
    loop copy_loop

exit:
    mov ax, 4C00h
    int 21h
END start

arrays_ex3_index.asm — תרגיל 3: גישה לאיבר לפי אינדקס

IDEAL
MODEL small
STACK 100h

DATASEG
arr db 5, 10, 15, 20, 25
val db ?

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

    mov si, offset arr
    mov al, [si + 3]
    mov val, al    ; val = 20

exit:
    mov ax, 4C00h
    int 21h
END start

arrays_ex4_average.asm — תרגיל 4: ממוצע מערך

IDEAL
MODEL small
STACK 100h

DATASEG
arr db 1, 3, 5, 7, 9, 11, 13, 15
average db 0

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

    mov cx, 8
    mov si, offset arr
    xor ax, ax

avg_loop:
    lodsb
    add ah, al
    loop avg_loop

    mov al, ah
    mov bl, 8
    div bl        ; AL = ממוצע
    mov average, al

exit:
    mov ax, 4C00h
    int 21h
END start

arrays_ex5_search.asm — תרגיל 5: חיפוש ערך במערך

IDEAL
MODEL small
STACK 100h

DATASEG
arr db 5, 8, 13, 42, 99, 17
foundIndex db -1

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

    mov cx, 6
    mov si, offset arr
    mov bl, 0
    mov al, 42

search_loop:
    cmp [si], al
    je found
    inc si
    inc bl
    loop search_loop
    jmp not_found

found:
    mov foundIndex, bl
    jmp exit

not_found:
    mov foundIndex, -1

exit:
    mov ax, 4C00h
    int 21h
END start

arrays_ex6_copystr.asm — תרגיל 6: העתקת מחרוזת עם rep movsb

IDEAL
MODEL small
STACK 100h

DATASEG
src db 'hello', 0
dst db 6 dup(?)

CODESEG
start:
    mov ax, @data
    mov ds, ax
    mov es, ax        ; שניהם באותו סגמנט

    mov cx, 6
    mov si, offset src
    mov di, offset dst
    rep movsb

exit:
    mov ax, 4C00h
    int 21h
END start

arrays_ex7_strlen.asm — תרגיל 7: אורך מחרוזת עד 0

IDEAL
MODEL small
STACK 100h

DATASEG
msg db 'abcdef', 0
strlen db ?

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

    mov si, offset msg
    xor cx, cx

strlen_loop:
    lodsb
    cmp al, 0
    je end_strlen
    inc cx
    jmp strlen_loop

end_strlen:
    mov strlen, cl

exit:
    mov ax, 4C00h
    int 21h
END start

arrays_ex8_strcmp.asm — תרגיל 8: השוואת מחרוזות

IDEAL
MODEL small
STACK 100h

DATASEG
str1 db 'hello', 0
str2 db 'hello', 0
equalFlag db ?

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

    mov cx, 6
    mov si, offset str1
    mov di, offset str2
    repe cmpsb

    mov equalFlag, 0
    cmp cx, 0
    jne exit
    mov equalFlag, 1

exit:
    mov ax, 4C00h
    int 21h
END start

arrays_ex9_lodsb_stosb.asm — תרגיל 9: העתקת מחרוזת עם lodsb / stosb

IDEAL
MODEL small
STACK 100h

DATASEG
src db 'world!', 0
dst db 7 dup(?)

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

    mov si, offset src
    mov di, offset dst

copy_loop:
    lodsb
    stosb
    cmp al, 0
    jne copy_loop

exit:
    mov ax, 4C00h
    int 21h
END start

arrays_ex10_repmovsb_array.asm — תרגיל 10: העתקת מערך עם rep movsb

IDEAL
MODEL small
STACK 100h

DATASEG
src db 1,2,3,4,5,6,7,8,9,10
dst db 10 dup(?)

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

    mov cx, 10
    mov si, offset src
    mov di, offset dst
    rep movsb

exit:
    mov ax, 4C00h
    int 21h
END start