Reikėjo kartą parašyti salygą - ar timerL daugiau (arba lygu) už 32. Tiksliai nežinojau instrukcijos… help’ą atsidaryti tyngėjau - pamaniau, kad turėčiau ir taip atspėti instrukcijos vardą (šiek tiek mokėjau asemblerį nuo bakalauro laikų - mokino tada dar ant kažkokio 8085 simuliatoriaus, jei neklystu). T.y. galvoju, pabandysiu vieną variantą - kompiliuosiu, bandysiu antrą, jei reiks trečią kartą ir pataikysiu. Logika paprasta - reikia šokti jeigu daugiau arba lygu. Išverčiam į anglų kalbą ir gaunam: Branch, Greater, Equal. Instrukcija BRGE. Sukompiliavo. Dėl visa ko patestuojam: liepiam, kad palygintų 170 su 32. Teisingai, 170>32 todėl šoksta. Pamirštam šitą vietą ir kodinam toliau.
Sukodinam viską, paleidžiam, bet rezultatai netenkina… o klaidų atrodo nėra… Ir debuginti sunku, nes kodinau ne ant PC o ant Atmel AT90S2313 mikrovaldiklio prie kurio pajungta įranga. Po dviejų valandų kankinimosi pradėjau dėlioti debugunimo kodą (papildomus outputus) prie kiekvienos instrukcijos. Ir, mano didelei nuostabai, paaiškėjo, kad ta BRGE instrukcija nevisada veikia teisingai. Pvz. sako, kad 170>32 bet 71<32. Pradėjo lyst visokios mintys kad mikrovaldiklis biškiuką sudegė ir panašiai… Tik po ilgu aiškinimųsi kažkas paklause manes, ar ta instrukcija neskirta signed integer’iams : ) Pažiūrėjau į helpą ir radau užrašą ties instrukijos aprašu - “Branch if greater than or equal (signed)”. Taigi, tą mano 71 traktuodavo kaip neigiamą skaičių, dėl to ir būdavo 71 mažiau už 32… Help’e susiradau sau tinkamą instrukciją: BRSH (Branch if same or higher). Taip aš taupydamas 30 sekundžių, praradau keletą valandų.

Panašūs straipsniai


“Kada 71 būna mažiau už 32” komentarų: 3

  1. glaxoo

    Man panasiai buvo su trigonometrinem f-jom, kai nezinojau, kad argumentai joms turi buti pateikti radianais :)

  2. kestaz

    asm nemoku, bet galvoju daug painiavos buna su sita kalba ;)

  3. minde

    Daug painiavos nebuna, kai kiausus turi.

Rašyti komentarą

Jūs privalote prisijungti jeigu norite rašyti komentarą.