Zdravím, mám hotová program v Assembleru pro procesor 8051 a potřeboval bych ho popsat k dokumentaci. Zde je zadání a vlastní kód:
Ve vnější paměti dat je uloženo 32 čísel. Čísla jsou uvažována se znaménkem.
Sestavte program, který vypočte kolik procent čísel je kladných, kolik je záporných a kolik procent je nul. Výsledky se ukládají do vnitřní paměti dat.
;vytvoreni cisel v CODE pameti
ORG 1000H
DB 3,6,1,5,4,2,7,13,8,14,10H,9,11,15,12,16,85H,86H,80H,00,8,7,4,2,4,8,28,99H,23,31,84H,22
org 0000
jmp 100H
org 100H
MOV SP,#80H ;uklizení zasobníku do hornich 128 bitů paměti
;------------------------------------------------------------------------------------------------------------
MOV DPTR, #1000H; Do dptr jsem si ulozil adresu prvniho prvku
MOV R0,#32D;
CYKLUS1:
MOV A, #0; K adrese prvního prvku se přičte 0 aby se dostal první prvek
MOVC A,@A + DPTR ; vyčtení z vnitřní paměti
MOVX @DPTR,A ; vkládání do vnější paměti
INC DPTR; ; přičte k hodnotě registru DPTR +1
DJNZ R0,CYKLUS1; ;dekrementuje R0, pokud se rovná 0 pokoračuje dále
MOV R0,#32D; ;přiřadí do R0 32D
MOV DPTR, #1000H; ;přiřadí do DPTR 1000H
MOV R1,#0; ;abych mel ze zacatku vsude nuly
MOV R2,#0;
MOV R3,#0;
CYKLUS2:
MOVX A,@DPTR; ;vyčte další číslo
INC DPTR; ;přičte se a načte se další
JZ nula; ;zkontroluje se jestli se nevyčetla 0
JBC ACC.7,zaporna; ; pokud se najde znamenkový bit skočí a vymaže
INC R2 ; kladná čísla
JMP ZNOVU
nula:
INC R1; nuly
JMP ZNOVU
zaporna:
JZ nula; záporná čísla, testuje zápornou nulu
INC R3
JMP ZNOVU
ZNOVU:
DJNZ R0,CYKLUS2
MOV A,R1;
LCALL Procenta ;volá funkci procenta
MOV R1,A;
MOV A,R2;
LCALL Procenta
MOV R2,A;
MOV A,R3;
LCALL Procenta
MOV R3,A;
STOP: JMP $
Procenta:
MOV B,#25D; ;vynasobení 25
MUL AB;
MOV R0,B; ;Bcko se uschová
MOV B,#8D ;Bcko se vydělí 8
DIV AB; ;celočíselné dělení
XCH A,R0; ;prohození A s R0
MOV B,#32D ;vynasobení konstantou 32
MUL AB;
ADD A,R0; ;sčítání
RET
END
Program by měl bý funkční. Chtěl bych se tedy zeptat zda je to dobře okomentováno a ještě mi není jasná funkce procenta. Proč se to vynásobí 25 a pak dělí 8my? Mohl by mi tu funkci prosím někdo objasnit?
Děkuji