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???
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