;04DelFIn.asm ;Program urci delku fronty predvybranych instrukci. DATA SEGMENT PUBLIC USE16 'DATA' ; Segment podle 16bitovych pravidel. DATA ENDS ; STKSEG SEGMENT STACK USE16 'STACK' ; Zasobnik podle 16bitovych pravidel. DB 1024 DUP(?) ; Hloubka zasobniku je 1KB. STKSEG ENDS ; CODE SEGMENT PUBLIC USE16 'CODE' ; Vlastni program v segmentu opet ASSUME CS:CODE,SS:STKSEG,DS:DATA ; podle 16bitovych pravidel. ; PROCES PROC ; Toto je vstupni bod programu. Sem se preda rizeni. mov AX,DATA ; Segmentovy registr DS naplnime segmentovou mov DS,AX ; casti adresy segmentu pojmenovaneho DATA. Pocet equ 40 ; Pocet slabik vetsi nez delka instr. fronty. push CS ; Pro retezcove operace musime naplnit ES, pop ES ; do ktereho pro adresaci instr. opiseme CS. mov AL,90h ; Do AL vlozime operacni kod instrukce NOP. mov DI,OFFSET Konec_1 - 1 ; Adresa posledniho prvku toku. mov CX,Pocet ; Do CX zapiseme delku testovaciho prostoru. xor DX,DX ; Citac delky fronty predvybranych instrukci. std ; Prostor se bude prepisovat odzadu. cli ; Pred vlastnim testem zakazeme preruseni. rep stosb ; CX-krat opis AL do testovaciho prostoru. REPT Pocet ; Puvodne byl testovaci prostor naplnen inc DX ; instrukcemi INC DX, ktere maji delku slabika ENDM ; a bylo jich Pocet. Konec_1: ; Adresa bezprostredne za testovacim prostorem. sti ; Test byl ukoncen, povolime preruseni. ; V registru DX je delka fronty predvybranych instrukci. mov AX,DX ; Vytiskneme delku fronty podprogramem tAX, ktery call tAX ; pozaduje vstup v AX. mov AH,4Ch ; Konec programu sluzbou MS-DOSu cislo 4Ch int 21h ; a navrat do MS-DOSu. PROCES ENDP tAX PROC ; Podprogram pro vypis obsahu AX na obrazovku ve forme push AX ; ctyr sestnactkovych (hex) cislic. mov AL,AH ; Nejprve 2 cislice vyssich radu. call tAL ; Vypis 2 cislice. pop AX ; Potom 2 cislice nizsich radu. call tAL ; Vypis 2 cislice. ret ; Navrat z podprogramu. tAX ENDP ; tAL PROC ; Podprogram pro vypis obsahu AL na obrazovku ve forme push AX ; dvou setstnactkovych (hex) cislic. push CX mov CL,4 shr AL,CL ; Nejprve 1 cislice vyssiho radu. pop CX call hex ; Vypis 1 cislici. pop AX ; Potom 1 cislice nizsiho radu. and AL,0fh call hex ; Vypis 1 cislici. ret ; Navrat z podprogramu. tAL ENDP ; hex PROC ; Preved hex cislici v AL na ASCII a vypis na obrazovku. or AL,30h ; Uprav cislici podle pravidel ASCII kodu. cmp AL,3Ah ; Je to jeste cislice? jl Cislce ; Ano. add AL,7 ; Neni, proved korekci na pismeno. Cislce: mov AH,14 ; Vypis ASCII znak z AL na obrazovku pomoci int 16 ; sluzby ROM-BIOSu (viz Vypis). ret ; Navrat z podprogramu. hex ENDP CODE ENDS ; Konec programu. END PROCES