Untitled
unknown
plain_text
9 months ago
2.0 kB
13
Indexable
include emu8086.inc
org 100h
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
JMP start
tablica db 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
START:
mov si, OFFSET tablica ; SI = adres poczatku tablicy
mov cx, 10 ; CX = liczba elementow
CALL SumaTablicy ; wyswietlenie wyniku sumy
PRINT 'Suma elementow tablicy = '
CALL PRINT_NUM_UNS
PRINTN ''
; przygotowanie parametrow dla SredniaTablicy
mov si, OFFSET tablica
mov cx, 10
CALL SredniaTablicy ; wyswietlenie wyniku sredniej
PRINT 'Srednia wartosci tablicy = '
CALL PRINT_NUM_UNS
RET
;-----------------------------------------
SumaTablicy PROC NEAR
; AX <- wynik
; SI - adres tablicy bajtow
; CX - rozmiar tablicy
push si ; zachowanie rejestrow
push cx
push dx
xor ax, ax ; wyzerowanie AX - tu bedzie suma
suma_loop:
xor dx, dx ; wyzerowanie DX przed wczytaniem bajtu
mov dl, [si] ; pobranie bajtu z tablicy
add ax, dx ; dodanie do sumy
inc si ; przejscie do nastepnego elementu
loop suma_loop ; petla dopoki CX > 0
pop dx ; przywrocenie rejestrow
pop cx
pop si
RET
SumaTablicy ENDP
;-----------------------------------------
SredniaTablicy PROC NEAR
; AL <- wynik
; SI - adres tablicy
; CX - rozmiar tablicy
push si ; zachowanie rejestrow
push cx
push bx
mov bx, cx ; zapamietanie rozmiaru do dzielenia
CALL SumaTablicy ; AX = suma (wywolanie pierwszej procedury!)
div bl ; podzielenie sumy (AX) przez rozmiar (BL)
; wynik w AL, reszta w AH
pop bx ; przywrocenie rejestrow
pop cx
pop si
RET
SredniaTablicy ENDP
END STARTEditor is loading...
Leave a Comment