; *****   3. ZADANIE  -   TESTOVANIE   BITOV    *****
;Vytvorte program, ktory vytlaci prislusnu spravu podla :
;d) hodnoty 3. bitu registra CL
;
;Autor: Martin Piovar
;rocnik, studij.program: 2.rocnik, Telekomunikacie
;ak.rok.: 2007/2008
;PROGRAM:

data	segment														;zaciatok datoveho segmentu
text0	db 13,10,'Treti bit je 0.$'									;definicia retazca
text1	db 13,10,'Treti bit je 1.$'									;definicia retazca
text2	db 13,10,'Hodnota registra CL je 10, binarne 00001010.$'	;definicia retazca
text3	db 13,10,'Hodnota registra CL je 20, binarne 00010100.$'	;definicia retazca
x 	db 	00Ah														;premennej x som priradil hodnotu 10
y	db	014h														;premennej y som priradil hodnotu 20
data	ends														;koniec datoveho segmentu

code 	segment							;zaciatok kodoveho segmentu
		assume cs:code,ds:data			;direktiva oznamuje assembleru pouzite segmenty

vypis	MACRO t							;makro na vypis textu
	mov dx, offset t					;relativna adresa TEXT sa ulozi do DX
	mov ah,9							;funkcia na vypis retazca (write string)
	int 21h								;DOS-ovske prerusenie na vykonanie funkcie 9
endm									;koniec makra
		
pr	proc								;nazov procedury
	ror cl, 4							;instrukcia na presun bitu do prava
	jnc vypis0 							;podmieneny skok, skoci na navestie pri CF=0
vypis1:
	vypis text1							;volam makro na vypis textu1
	jmp koniec							; nepodmieneny skok na navestie
vypis0:
	vypis text0 						;volam makro na vypis textu0
koniec:
	ret
pr	endp								;koniec procedury

		
start:
		mov ax,seg data	    	;do AX vloz adresu segmentu DATA
		mov ds,ax	      		;segmentovu adresu presun do DS
		
		mov ax,0003h			;do ax sa vlozi parametre grafickeho modu 80x25
		int 10h
			
		mov cl,x				;do registra cl som vlozil hodnotu x
		vypis text2				;volam makro na vypis textu 2
		call pr					;volam proceduru pr
		
		mov cl,y				;do registra cl som vlozil hodnotu y
		vypis text3				;volam makro na vypis textu
		call pr					;volam proceduru pr
		
		MOV Ax, 4C00H           ;funkcia ukoncenia programu
       	INT 21H        		    ;prerusenie na vykonanie ukoncenia programu			

code	ends					;koniec kodoveho segmentu
	end start					;koniec suboru - pre assembler, program bude spusteny od navestia START
	
;1. Program je funkcny. 
;2. Bol vypracovany v prostredi MsDOS za pouzitia kompilatora TASM a TLINK. 
;3. Pre spustenie tohoto programu potrebujeme PC s procesorom architektury  x86 najmenej vsak 80286 s nainstalovanym operacnym systemom MsDOS alebo  Win9x/WinNT/WinME/WinXP alebo nejaky OS umoznujuci spustat   DOSovske programy.
;4. Program na vstupe neocakava ziadne premenne, po spusteni len vypise vysledok testovania bitov daneho registra.
;5. V programe som pouzil makro na vypis textov a proceduru ktora zabezpecuje testovanie bitov registra. V procedure som pouzil instrukciu ror co je posun bitov do prava. Okrem nej som este pouzil nepodmieneny skok jmp a podmieneny skok jnc, ktory porovnanva hodnotu carry bitu CF.
;6. Program sa chova korektne, nevypisuje ziadne chybove hlasky.
;7. Samotny program je strucny a prehladny, mozno by bolo vhodnejsie zabezpecit znemu hodnoty registra cl, ktory testujeme ale poskytnute riesenie taktiez vyhovuje zadaniu.
;8. Dalsie  informacie su v komentari samotneho programu.

;05.04.2008