
;        ******   3. ZADANIE  -   TESTOVANIE   BITOV    ******
;
;Vytvorte program, ktory vytlaci prislusnu spravu podla :
;
;f) hodnoty 0-teho bitu registra BL
;
;Autor: Michal Vajicek
;rocnik:2.
;studijny program:TLK
;akademicky rok:2007/2008
;==================================================================================================
data	segment					;zaciatok datoveho segmentu
vypis0	db 13,10,'Nulty bit je 0.$'		;definicia retazca
vypis1	db 13,10,'Nulty bit je 1.$'		;definicia retazca
vypis2	db 13,10,'Hodnota registra BL je 10, binarne 00001010.$'	;definicia retazca
vypis3	db 13,10,'Hodnota registra BL je 20, binarne 00010100.$'	;definicia retazca
vypis4  db 13,10,'Hodnota negovaneho registra BL je negovene 20, binarne 11101011.$' 
vypis5  db 13,10,'Hodnota negovaneho rogistra BL je negovane 10, binarne 11110101.$'
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




vystup	MACRO text				;makro na vypis textu
	mov dx, offset text			;relativna adresa TEXT sa ulozi do DX
	mov ah,9				;funkcia na vypis retazca 
	int 21h					;DOS-ovske prerusenie na vykonanie funkcie 9
endm						;koniec makra
		



prcd	proc					;nazov procedury
	ror BL,1				;instrukcia na presun bitu do prava
	jnc vystup0 			        ;podmieneny skok, skoci na navestie pri CF=0
vystup1:
	vystup vypis1				;volam makro na vypis vypisu1
	jmp koniec			        ;nepodmieneny skok na navestie
vystup0:
	vystup vypis0 			        ;volam makro na vypis vypisu0
koniec:
	ret
prcd	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 BL,x		        ;do registra Bl som vlozil hodnotu x
		vystup vypis2		        ;volam makro na vypis textu 2
		call prcd			;volam proceduru prcd
		
		mov BL,y			;do registra Bl som vlozil hodnotu y
                vystup vypis3			;volam makro na vypis textu
		call prcd			;volam proceduru prcd
		
		mov BL,y                        ;do BL nacitam y
                not BL                          ;;negacie registra BL
                vystup vypis4			;volam makro na vypis textu
		call prcd			;volam proceduru prcd
		
                mov BL,x                        ;do BL nacitam x
                not BL                          ;negacie registra BL
                vystup vypis5			;volam makro na vypis textu
		call prcd			;volam proceduru prcd
                
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
;======================================================================================================================
;Program je funkcny. 

;Bol vypracovany v prostredi MsDOS za pouzitia kompilatora TASM verie 3.1 a TLINK verzie 5.1. 

;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 ma na vstupe zadane premenne ktore su neskor znegovane 

;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.


	
