Pomoc s programom v Asemblery

Programovacie jazyky, rady, poradňa...
MP4-27
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2094
Registrovaný: 10 nov 2006, 20:11
Bydlisko: tak určité:D
Kontaktovať používateľa:

Pomoc s programom v Asemblery

Príspevok od používateľa MP4-27 »

cawte chalani,nevedel by mi niekto poradit s tymto programom? Mne to nejak nejde :( vopred diki...

Kód: Vybrať všetko

;1. Zobrazte zvoleny znak (napr.srdiecko, pismeno, hviezdicka)  na obrazovke v bode so suradnicami (5,20).
; Naprogramujte postupny pohyb kurzora v riadku, kde sa nachadza uvedeny znak. Ak sa kurzor dostane na miesto znaku, 
;tento znak zmizne z obrazovky , za urcity cas sa opet zobrazi . Blikanie znaku vykonajte este 3x s viditelnym oneskorenim.

data	segment					; definicia datoveho segmentu
ZNAK	db '*$'					; znak na zobrazenie
stlpec	db 20					; premenna uchovavajuca cislo stlpca
data	ends

code	segment					; definicia programoveho segmentu
	assume CS:code, DS:data

clrscr	macro					; makro na vycistenie konzoly
	mov AX,3
	int 10H
	endm

presun	macro stlpec				; makro na presun kurzora na zadanu poziciu (stlpec)
	mov AH,2
	mov DH,5				; cislo riadku napevno
	mov DL,stlpec
	mov BH,0
	int 10H
	endm

vypis	proc					; makro na vypis textu na zadanej pozicii
	mov DX, offset ZNAK
	mov AH,9
	int 21H
	endp

delay	proc					; procedura loopuje n-krat, kde n je druha mocnina konstanty 
	push cx					; uschovaj povodnu hodnotu cx
	mov cx, 6FFh     			; nastav cx pre  vonkajsi cyklus
d:    	push cx	         			; uschovaj hodnotu cx vonkajsieho cyklu
de: 	loop de					; vnutorny cyklus
     	pop cx					; obnov cx vonkajsej slucky
     	loop  d	 				; rob vonkajsi cyklus 40000x
     	pop cx					; obnov povodne cx pred procedurou
    	ret					; navrat z procedury
	endp					; koniec definicie procedury

blik	macro					; macro na blikanie znaku
	clrscr					; vycistenie konzoly(zmazanie znaku)
	presun stlpec				; presun na poziciu(clrscr vrati na 0,0 )
	call delay				; cas, ked neni znak vidno
	call vypis				; vypis znaku
	call delay				; cas, ked je znak vidno
	endm

main 	proc
	mov AX,seg data				; priradenie segmentovej adresy datoveho segmentu do registra DS
	mov DS,AX
	mov CX,20				; pocet presunov kurzora
	clrscr
	presun stlpec				; vycistenie obrazovky
	call vypis				; pociatocny vypis znaku
	mov stlpec,0				; znulovanie premennej stlpec na presun na zaciatok
slucka:	push CX					; ulozenie CX (vnutri cycklu sa bude prepisovat)	
	presun stlpec				; presun kurzora
	call delay				; 
	inc stlpec				; 
	pop CX					; opatovne nacitanie CX
	loop slucka				; opakovat cyklus, ak CX != 0
	mov CX,3				; pocet bliknuti (3x)
bliksl:	blik					; bliknutie, dekrementuje cx
	loop bliksl				
	clrscr
	mov ah,4Ch
	int 21H
	ret
	endp
	
START:	
	call main
code 	ends
	end START
o-lox
Novice
Novice
Príspevky: 4
Registrovaný: 19 máj 2009, 8:06

Re: Pomoc s programom v Asemblery

Príspevok od používateľa o-lox »

Co chceš, mám ti napsat aby ten kurzor jezdil neustále dokola?
teď jsem jenom prodloužil to delay a 3x mě to podle požadavků blikne, pokud chceš oneskoreni tak předávej hodnotu skrz DX.

delay proc ; procedura loopuje n-krat, kde n je druha mocnina konstanty
push cx
mov dx,01fffh
@10:
mov cx,0ffffh
@11:
dec cx
jnz @11
dec dx
jne @10
pop cx
ret
Napísať odpoveď