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