Wpis z mikrobloga

piszę nowy post, bo problem wygląda teraz trochę inaczej, ale zawołam @grzegorzx86 , bo ostatnio mi pomagał ( ͡° ͜ʖ ͡°)

http://pastebin.com/jgaMh3fB

jak zmieniam z malej litery na duza (kierujac sie tablica ascii powinienem odjac 32) pokazuja sie jakies dziwne znaczki zamiast tego, czego oczekuję. niewazne ile odejme. za to zamiana z duzej na mala dziala poprawnie. dodakowo nie wyswietla sie napis v_blad. zamiast niego pojawia się duża litera alfabetu. btw zauważyłem, że znaki pomiędzy "asdf" a tymi dziwnymi znakami zmieniają się w zależności od tego ile odejmuję w 52. linii ( http://i.imgur.com/ZQpcq0E.gif ). nie wiem czy to ma jakieś większe znaczenie, ale kompiluję w nasmie

@grzegorzx86: zmieniłem to odczytywanie ze stosu na [esp + ecx] i odczytuje wartosci ze stosu tak jak powinno

#programowanie #assembler #informatyka
  • 5
  • Odpowiedz
@peon125: Drukuje jeden znaczek zamiast v_blad bo używasz funkcji drukującej jeden znaczek, ah=02. Poprzednio używałeś chyba czegoś innego do drukowania stringów?
Z odejmowaniem 32 faktycznie dziwne, a co jak odejmiesz 0, albo 1 itp?
Dobrze dałeś te ja/jb po cmp dx, 91?
  • Odpowiedz
@grzegorzx86: boże. racja. zapomniałem o tym, że drukuję jeden znak. debil here
jakimś cudem te dziwne znaki byly chyba pobierane ze stosu, bo jak usunąłem kod od 40 do 44 włącznie i dałem

cmp dx, 96
ja zduzejnamala
cmp
  • Odpowiedz
@peon125: No to jeszcze co mi przychodzi do głowy to śmieci. Funkcja ah=02 przyjmuje argument w dl, a ze stosu zdejmujesz dx, przedtem odkładasz ax, który pewnie w ah ma jakieś śmieci. Tak więc spróbuj tak:
mov dx, [esp + ecx]
and dx, 255
  • Odpowiedz
@grzegorzx86: zamiast and dx, 255, zmieniłem cmp dx, 96 na cmp dx, 351 (tutaj dodałem te 255) i działa prawie jak powinno.

dodałem z powrotem pomnożenie rejestru cx razy 2, jednak bez tego się psuło jak podawałem tylko 3 znaki. obecnie to wygląda tak http://pastebin.com/AJgD0Abb

tylko że jeszcze program zacina się jak czwarty raz chcę prowadzać znaki i za trzecim razem pojawia się jakaś dzika ósemka. czemu? zakładam, że nie
  • Odpowiedz
Ej nie xD Nie wiem dlaczego działa Ci z 351. Chodzi o to że są śmieci w górnym bajcie (w dh). Zrób albo "and dx,255" albo "mov dh, 0" albo jeżeli nie chcesz się bawić z dh to rób cmp dl, 96 <- dl zamiast dx
  • Odpowiedz