; TESTOVANIE BITOV
;marian mico tl_5 35247 zadanie 3 po c)



_Clrscr MACRO              ;makro na mazanie obrazovky
 

mov ax,0003h               
 int 10h
endm                       

_print MACRO input         ; input -vstup do makra
       mov ah,9            ; ah - hornych 8 bitov z AX registra (accumulator - pouziva sa pri spustani a matematickych operaciach)(AX = AH+AL), naplnime cislom 9
       mov dx,offset input ; DX - data register - do dx ulozi offset t (vstupu makra) (offset = "adresa")
;       lea dx,input        ; lea (Load-Effective Address) - rovnake ako riadok vyssie - lea ulozi offset t do dx
       int 21h             ; int - (vykona kod ulozeny v registri AH) - 21h = DOS service interrupt - v tomto pripade AH=9, t.j. vypis na obrazovku
endm

ZAS SEGMENT STACK       ;direktiva pre assembler - zaciatok zasobnikoveho segmentu
       DW 64 DUP(?)            ;definicia 64-och slov
ZAS ENDS                ;koniec zasobnikoveho segmentu



DATA    SEGMENT
       TEXT0   DB'druhy bit BH-acka je 0$'               ;zadefinovanie textov ktore sa budu tlacit na scr
       TEXT1   DB'druhy bit BH-acka je 1$'

       

DATA    ENDS                                              ;koniec datovej casti



CODE         SEGMENT
               ASSUME  SS:ZAS, CS:CODE, DS:DATA

_xxx           proc                                      
               AND CH,00000100b                          ;vynulovanie registra CH az na 2. bit na ktorom zostane hodnota ktora tam bola predtym
               JCXZ print0                               ;jump ked je register CX nulovy na print0
               JMP print1                                ;ak nie je nulovy jmp na print1
print0:         _print TEXT0                             ;print prislusny text
               JMP exit;                                 ;jump na koniec aby nepokracovalo print1
print1:         _print TEXT1                             ;print prislusny text
exit:           ret                                      
_xxx      endp                                          ;koniec procedury

start:         MOV AX, SEG DATA
               MOV DS,AX
               ADD BH,7                               ;zadanie nejakej random hodnoty do registra    
               inc BH                                ;zadanie nejakej random hodnoty do registra               
               MOV CL,00000000b                         ;CL sa vynuluje
               MOV CH,BH                                ;BH->CL
                                
               _Clrscr

               

               call _xxx                                ; zavolanie _xxx

                                        

               mov ax,4c00h            ; koniec programu
               int 21h

        CODE ends                   
        end start               




