• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Assembler - kreska skracana

Object Storage Arubacloud
+1 głos
182 wizyt
pytanie zadane 1 grudnia 2017 w Assembler przez klap Początkujący (410 p.)
edycja 1 grudnia 2017 przez klap

Witam, mam problem z rysowaniem kreski.

Chcę aby jeden pod drugim wyświetlała mi się kreska, każda krótsza. Wyświetlają mi się jednakowej długości. 

Chciałbym aby było :

      -------------------------

          -----------------

              ----------

a mam :

   -----------------------

   -----------------------

   -----------------------

Chcę to zrobić w pętli. Zamieszczam fragment kodu. BARDZO PROSZĘ O RADY

mov	[xx],150
mov	[yy],50
mov	[color],5bh

mov cx,2
petla2:
call AA
push cx
;----
mov cx,90
petla:
call AA
inc  [xx]
loop petla
;----
sub [xx],90
sub [yy],10
;--

pop cx
loop petla2

 

1 odpowiedź

0 głosów
odpowiedź 3 grudnia 2017 przez Chess Szeryf (76,710 p.)
edycja 3 grudnia 2017 przez Chess
global _main 
extern _printf 
extern _scanf 

SECTION .data
formater: db "%d",0 ;%c 
formater2: db "%d",0 ;%c 
formaterek: db "%d",0 ;%c 
message2: db "r",0
message3: db "k",0
mess4: db "even!",0
mess5: db "odd!",0
myslnik: db "-",0
newline: db "",0xa,0
spaced: db "F",0
zmienna: dd 0
zmienna2: dd 0
zmienna3: dd 0
zmienna4: dd 0
SECTION .text

_main:
	push ebp
	mov ebp, esp
	
	 
	mov ebx,1 ;constant 
	mov edx,2 ;constant 
	mov esi,15 ; esi to jest dlugosc tego "k" np. kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
	mov edi, 4 ; od 51 i w dół piramida sie zmniejsza, a od 52 i w gore sie zwieksza, max wartosc edi to wartosc esi 
	            ;innymi slowy sterowanie od 2 do 50 :) 
	  
	test esi,1
	jp wyskocz_stad0 ; probably can be still jz instead jp (probably). 
	  
    druga:
	
	mov ecx,0

	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
	iteruj:
		inc ecx				;ecx=1
	  	mov [zmienna],ecx 	;zmienna=1
	    push ecx 
	 	push spaced    ;"F"
	  	call _printf 
	    add esp,8
		mov ecx,[zmienna]  ;ecx=1
	  	cmp ecx,ebx 	   ;ecx==ebx , mean 1==0
	jne iteruj
	 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	 
	 
	jakas_nazwa:
		
		    ; dec esi   ; esi = 14,13,12,11,10,9,8,7,6,5,4,3,2,1
		   ;  dec esi                           
		inc edx				;edx=3 || 4 || 5 || 6 || 7 || 8
		mov [zmienna3],edx 	;zmienna=3
		push edx 
		push message3   ; "K"
		call _printf 
		add esp,8
		mov edx,[zmienna3]  ;edx=3
			
		cmp esi,1       ; 14==1 | esi ==1 
		je wyskocz_stad
			 
			
		cmp edx,esi 	   ;edx==esi , mean 3 ==14  
	jne jakas_nazwa
	
	dec esi 
	   
	dec esi 
	inc ebx
	mov [zmienna2],ebx 
	push ebx 
	push newline
	call _printf 
	add esp,8
	
	mov ebx,[zmienna2]
	
	cmp ebx,edi
	 
	jne druga 
	
	wyskocz_stad:
	
	leave 
	ret 
	
	wyskocz_stad0:
	push eax 
	push mess4
	call _printf 
	add esp,8
	
	leave
	ret 
	

Jeśli w komentarzach do kodu napisałem błędne wartości (błędny komentarz), czy coś to sorry. Zamiast w "spaced", która ma wartość "F", możesz dać spację " " oraz zamiast "k", która jest w message3, jak chcesz to napisz "-".

Sposób działania:

mov esi, 15 - szerokość piramidy

mov edi, 4 - wysokość piramidy

Szerokość piramidy, bodajże od 1 do ilu tam chcesz

Wysokość piramidy od 2 do połowy esi. Czyli jak esi ma 101, to max. wartość w rejestrze edi, żeby zobaczyć efekty wysokości piramidy może wynosić połowę wartości z rejestru esi, czyli w tym przypadku 51.

Dla takich danych:

mov esi, 9

mov edi, 6

rysuje taką piramidę:

Fkkkkkkkkk
FFkkkkkkk
FFFkkkkk
FFFFkkk
FFFFFk

a dla takich:

mov esi, 9

mov edi, 3

taką

Fkkkkkkkkk
FFkkkkkkk

Szczególne podziękowania za pomoc w napisaniu kodu dla:

Jester01, zid

z kanału IRC:

https://kiwiirc.com/client/irc.freenode.net/##asm

 

Podobne pytania

0 głosów
0 odpowiedzi 64 wizyt
pytanie zadane 24 stycznia w Assembler przez koro33 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 232 wizyt
+2 głosów
1 odpowiedź 397 wizyt
pytanie zadane 2 marca 2022 w Assembler przez Dorian Bajorek Dyskutant (7,920 p.)

92,565 zapytań

141,416 odpowiedzi

319,596 komentarzy

61,948 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...