Rada s vysvětlením funkčního programu – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Rada s vysvětlením funkčního programu – Assembler – Fórum – Programujte.comRada s vysvětlením funkčního programu – Assembler – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
David
~ Anonymní uživatel
131 příspěvků
8. 12. 2012   #1
-
0
-

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

Nahlásit jako SPAM
IP: 78.110.208.–
Reklama
Reklama
KIIV+42
God of flame
8. 12. 2012   #2
-
0
-

nasobi se 25 a deli 8 protoze  je to pro tendle typ procesoru lepsi nez nasobit 100 a vydelit 32 (coz je to same akorat vykraceny)

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
David
~ Anonymní uživatel
131 příspěvků
8. 12. 2012   #3
-
0
-

Děkuji za rychlé upřesnění. A jinak ty komentéře k tomu je to dostačující?

Nahlásit jako SPAM
IP: 78.110.208.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 196 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý