[Asembler] Licznik kroków

Witam

No wiec tak, zrobilem gre w Asemblerze, taka ze sie porusza strzalkami po labiryncie, i chcialbym jeszcze dorobic licznik kroków (czy tam ruchow) ale mam z tym problem gdyz zamiast wypisywac mi liczbe kroków to wypisuje mi znak ktorego kodem ascii jest ta liczba , czyli np: jezeli jest krok 97 to wypisuje mi znak “a” zamiast tej liczby

zrobione mam to tak ze mam zadeklarowana zmienna:

licznik DB 0

i po kazdym ruchu czyli po nacisnieciu strzalki mam taki kod:

add licznik,1

a procedura wypisujaca to :

wypisz PROC


       mov DL,licznik


       mov AH,02H ;funkcja 02H wypisuje na ekranie kod pobrany z DL

       int 21H


wypisz ENDP

czy ktos wie jakiej funkcji uzyc albo wogole co zrobic zeby wypisywala ta liczbe???

procedura itoa

Spróbuj dodawać znak ‘0’,masz tę liczbę,ale nie zamieniasz na kod ASCII

add dl,‘0’

liczba+‘0’=liczba w ASCII

Fajna uwaga, ale zadziała tylko jeżeli licznik jest w przedziałach 0…9

Swego czasu pisałem podobne makro, które konwertuje liczbę całkowitą na ciąg znaków ASCII.

Wykorzystuję zmienne:

Bufor - w którym przechowywany jest ciąg znaków ASCII zakończony znakiem dolara

Liczba - w Twoim przypadku liczba kroków

Makro nie będzie prawidłowo działać dla dużych liczb, tzn dla takich których nie da się zapisać na 16 bitach. Poza tym trochę je przerobiłem, więc musiałbyś sprawdzić jego poprawność, ale myślę, że się przyda.

SkonwASCII MACRO Liczba, Bufor

                LOCAL Cyfra


                mov di, OFFSET Bufor ; ustaw wskaznik na poczatek bufora

				mov bx, OFFSET Liczba ;ustaw wskaznik na poczatek Liczby


Pobierz: mov ax, WORD PTR [bx] ;pobierz młodsze bity

				mov cx, 0 ;ustaw licznik na 0 (przyda się do stosu)


Dziel: xor dx, dx					

                cmp ax, 10 ; sprawdź czy liczba mniejsza niz 10?

                jb Cyfra ; jeżeli tak to skocz do Cyfra, bo mozna juz ta cyfre wczytac

                mov bx, 10  

                div bx ; jeżeli nie - podziel przez 10


				add dx, '0' ;zamien reszte z dzielenia na ASCII

				push	dx ;i odstaw ją na stos

				inc cx ;zwiększ licznik zliczający wysokość stosu

				jmp Dziel ;wróc ponownie do dzielenia


Cyfra:			

                add ax, '0' ; skonwertuj cyfre do postaci ASCII

                mov [di], ax ; zapamietaj otrzymany znak w buforze

				inc di ;zwiększ pozycję wskaźnika


Zdejmuj:				

				cmp cx, 0	;porównuj cx z zerem

				je Koniec	;skocz na koniec gdy cx=0

				pop ax ;jeśli różne od 0 to zdejmuj ze stosu

				mov [di], al	;wysyłaj do bufora

				inc di ;zwiększaj wskaźnik bufora

				dec cx ;zmniejszaj wskaźnik wysokości stosu

				jmp Zdejmuj ;i skocz zdejmować kolejne liczby


Koniec:			


				mov BYTE PTR [di], '$' ; oznacz koniec lancucha dolarem

                ENDM