; TESTOVANIE BITOV
;michal miklas tl_5 35794 zadanie 3f (0)

zas      segment stack 'stack'
         dw 64 dup(?)
zas      ends

DATA    SEGMENT 						;zaciatok datoveho segmentu
TEXT0    DB      'Hodnota nulteho bytu registra je 0$'  	;definicia retazca
TEXT1    DB      'Hodnota nulteho bytu registra je 1$'         	;definicia retazca
DATA    ENDS                    				;koniec datoveho segmentu

CODE    SEGMENT                 				;zaciatok kodoveho segmentu
        ASSUME  CS:CODE, SS:zas, DS:DATA				;direktiva oznamuje



clrscr	MACRO					;definicia makra na mazanie obrazovky
	mov ax,3h               		;do ax sa vlozi parametre grafickeho modu 80x25
  	int 10h					;prerusenie na vykonanie instrukcie 
  	endm					



vypis 	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")
        int 21h             ; int - (vykona kod ulozeny v registri AH) - 21h = DOS service interrupt - v tomto pripade AH=9, t.j. vypis na obrazovku
	endm



p	proc 
	AND	BL, 00000001b			;vynulovanie registra bl az na 0ty bit na ktorom zostane hodnota ktora tam bola predtym			
	JZ nula					;ak je 0ty bit registra rovny nule tak skocime na navestie nula 
	JNZ  jedna				;ak je 0ty bit registra rovny jednej tak skocime na navestie jedna
nula:	vypis TEXT0				;vypis textu 0 
        JMP exit                                ;jump na koniec aby nepokracovalo jedna
jedna:  vypis TEXT1                             ;vypise prislusny text (vola makro)
exit:   ret                                     
p	endp                                    ;koniec procedury




start:  MOV AX, SEG DATA        ;do AX vloz adresu segmentu DATA
        MOV DS, AX              ;segmentovu adresu presun do DS
	MOV BL, 00001111b	;zadanie nejakej hodnoty do registra (momentale je nulty bit=1)   
   

	clrscr			;makro na cistenie obrazovky			
	
	call p			;volamnie procedury p



        MOV Ax, 4C00H           ;funkcia ukoncenie programu
        INT 21H                 ;prerusenie na vykonanie ukoncenia programu
	
	CODE ends		;koniec kodoveho segmentu 
	end start		;koniec programu
