Wpis z mikrobloga

murki pomocu ( ͡° ʖ̯ ͡°) mam do napisania w assemblerze (8086 bodajże) program pobierający od użytkownika ciąg znaków (np. "aBcDE") i wypisujący ten sam ciąg, tylko że, ze zmienioną wielkością liter ("AbCde"). program musi wykorzystywać stos. wyrzuca mi jakieś krzaczki zamiast tego ciągu. męczę się z tym już od dłuższego czasu i nie wiem jak naprawić błąd. http://pastebin.com/JHn4C8Ea myślę, że problem jest gdzieś w okolicy linii 55. komentarze po angielsku, bo miałem gdzie indziej wrzucić ( ͡° ͜ʖ ͡°)

#programowanie #assembler #studbaza #informatyka
  • 3
@peon125: Nie kompilowałem tego (zamiast tego bawię się na stronce https://www.tutorialspoint.com//compile_assembly_online.php gdzie są wywołania linuxowe zamiast dosowych), ale wydaje się ok poza dwoma szczegółami:
- czy jeżeli użyjesz sp/esp zamiast bp to dalej masz problem? O ile kojarzę to bp co najwyżej będziesz miał ustawione na wskaźnik stosu w momencie wejścia do funkcji?
- w linijce 57 czekasz na strażnika ale nie widzę nigdzie np. "mov ax,0 / push ax"?
-
@grzegorzx86:
- jak zamienię bp na sp, to przy kompilacji wywala błąd "error: invalid effective address" w tej linijce. próbowałem też zamienić si na di lub bx i to samo.
- fakt, lepiej będę porównywał indexy, żeby wiedzieć kiedy skończyć odczytywać ze stosu
myślałem jeszcze nad zdjęciem wszystkiego ze stosu do jakiejś zmiennej i potem odczytać te znaki z niej, ale nie wiem czy tak się da ( ͡° ʖ
@peon125: Nie da się, stos jest już "zmienną" ( ͡° ͜ʖ ͡°) i przesuwanie danych z jednego miejsca w inne nic tu nie da. Najlepiej zdejmij tyle ile włożyłeś, trzymasz tam licznik. Spróbuj najpierw drukować jeden znak z tego co wprowadził użytkownik, później pojedyncze znaczki bez konwersji duże/małe litery i wreszcie dodaj konwersję - wyłapiesz na którym etapie masz błąd.