Telitett Negyzet Kirajzolasa Assemblyben

mail@pastecode.io avatar
unknown
assembly_x86
2 years ago
1.4 kB
6
Indexable
Never
                   
Code	Segment
	assume CS:Code, DS:Data, SS:Stack

Start:
	mov	ax, Code
	mov	DS, AX

	; Képernyő Törlés
    mov ax,03h
	int 10h

	; Kurzor pozicionálás
	mov ah,02h 
	mov bl,0
	mov dl,40
	mov dh,12
	int 10h
	
	; Beállítom a négyzet méretét a CX regiszterbe és beteszem a stackbe
	mov cx,5       
	push cx

	; Átmásolom a DI regiszterbe a CX értékét (5) mivel 5x kell majd lefusson a ciklus
	mov di,cx
	
Kulso:
	pop cx         ;megbizonyosodom rolla hogy cx ben				   
	; a eredeti meret legyen megadva a belso loop miat
	push cx 

Belso:
	; Karakter kiíratása - *
	mov ah,02h                
	mov dl,"*"
	int 21h
	loop Belso
	
	; Kurzor pozicionálás - Megnöveljük a DH-t hogy a kovetkezo oszlop kovetkezzen
	mov ah,02h           
	mov bl,0
	mov dl,40
	inc dh
	int 10h

	dec di	; Csökkentjük a DI-t mert már ugye egyszer lefutott a ciklus, így már csak pl: 4x kell lefutnia                
	mov cx,di	; Átmásoljuk a CX regiszterbe. Amennyiben 0 van a CX-ben kilépünk a loop-bol
	loop Kulso
	
	; Ha leutunk egy billentyut akkor vege a program futásának
	xor ax,ax    
	int 16h

	pop ax	; A végén kiürítjük a vermet

Program_Vege:
	mov	ax, 4c00h
	int	21h
       

Code	Ends

Data	Segment

Data	Ends

Stack	Segment

Stack	Ends
	End	Start