Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Asembler] Zmiana ASCII na liczbę i na odwrót

Zajezdnik 14 Sie 2017 09:53 852 6
  • #1 14 Sie 2017 09:53
    Zajezdnik
    Poziom 2  

    Dzień dobry,
    To mój pierwszy post tutaj, więc jeśli pomyliłem działy lub coś wykonałem niepoprawnie to proszę od razu mnie poinformować - usunę lub przeniosę swój temat. Tak czy inaczej...
    Asemblerem zajmuję się od niedawna i właśnie próbuję napisać program, który będzie pobierał liczbę dodatnią z klawiatury, zapisywał ją do zmiennej, a następnie dodawał do niej np 11 (ta liczba już nie jest wprowadzana z klawiatury) i wyświetlał wynik operacji na ekranie. Napisałem taki kod, zapewne chaotyczny, ale to wina mojego braku doświadczenia w tym temacie :) Tak czy inaczej czy mógłbym prosić o jego sprawdzenie? Wprowadzanie danych z klawiatury i zapis w postaci ciągu znaków działa poprawnie, ale pojawił się problem w zamianie ASCII na liczbę... Oto kod, który udało mi się naskrobać:

    Kod: armasm
    Zaloguj się, aby zobaczyć kod

    0 6
  • #2 14 Sie 2017 11:55
    JacekCz
    Poziom 35  

    po jakimś czasie nad kodem doczytałem się, że konwencję 'liczby' masz jako znaki, jedno z trudniejszych do obliczeń (a tradycyjnie konwersja jest serią mnożeń rzez 10).
    Bez wódki tego nie wyobrażę sobie :) jak mawiali starożytni Rosjanie.
    Gdybym ja robił, wyznaczył bym sobie trzymanie liczby binarnie, w rejestrze, skonwertował do/z (nie ukrywam, mógłbym sobie pomóc jakąś próbką w C i zobaczyć jak sie rozwija)
    Procesor posiada też jakieś wsparcie BCD (czyli po dwie cyfry w bajcie), też to można gryźć w assemblerze.

    druga uwaga na marginesie, to 'jednostki wywoływania' ja bym robił jako wywołania call / ret (funkcje) a nie makra. Makra dają na pewno kilka cykli CPU zysku, ale ...

    Nie pomogę bardziej konkretnie, nie mam już nic na 16bit/DOS, ech były czasy :)

    0
  • #3 14 Sie 2017 12:00
    Zajezdnik
    Poziom 2  

    Trochę szkoda :C Bo to jest takie zadanie do przećwiczenia, sam dla siebie. Wiem, że powinienem znaki ASCII z łańcucha znaków, do którego wprowadziłem cyfry (w postaci kodów ASCII właśnie) z klawiatury zamienić na postać binarną, dodać wówczas 11 zwykłą operacją add i następnie wykonał odwrotną operację, zamienić tą liczbę znowu na łańcuch znaków i wyświetlić go. Ale coś mnie ta przygoda przerosła i nie mogę wymyślić nic ponadto, co tu mam.
    Czy ktoś ma jakiś pomysł i byłby w stanie pomóc lub wskazać błędy w kodzie?

    0
  • #4 14 Sie 2017 14:43
    2675900
    Użytkownik usunął konto  
  • #5 14 Sie 2017 15:24
    Zajezdnik
    Poziom 2  

    Dziękuję, ale powiem szczerze, że mój poziom Asemblera jest szczerze mizerny, ledwie nabazgrałem wczytywanie z klawiatury znaku i zapis a nie tylko wyświetlanie echa na ekranie. Widziałem kilka programów, które podobny problem rozwiązują jak mój, ale są dla mnie zbyt skomplikowane, a poza tym nie chciałbym przepisywać gotowych rozwiązań :)

    0
  • #6 14 Sie 2017 16:09
    2675900
    Użytkownik usunął konto  
  • #7 14 Sie 2017 16:14
    Zajezdnik
    Poziom 2  

    Okey, tak zrobię. A swoją drogą Debbuger mówi mi, że gdzieś w moim programie występuje dzielenie przez zero, ale nie jestem w stanie określić kiedy to może się dziać. Byłbyś w stanie pomóc z tym?

    0