
Jag har två kompasskurser som ligger i varsin 16-bitars variabel:
"Kurs_ar" 0-359 (ÄR-värdet i grader)
"Kurs_bor" 0-359 (BÖR-värdet i grader)
Jag vill få fram skillnaden och om östlig eller västlig korrigering krävs.
Jag trodde att jag hade kommit på en smart lösning när jag lade till 360 på ÄR-värdet först och sedan drog ifrån BÖR-värdet. Fick ihop ett program som jag trodde fungerade, men näää naturligtvis fungerar det inte på alla kurser.
Är jag på rätt spår eller finns det enklare sätt att göra det?
Kod: Markera allt
Main:
ldsw Y, Kurs_ar ;Lägg Kurs_ar i Y
addiw Y, 360 ;och lägg till 360
ldsw Z, Kurs_bor ;Lägg Kurs_bor i Z...
subw Y, Z ;...och subtrahera från Y
ldiw Z, 180 ;
cpw Y, Z ;Jämför Y med 180...
brsh East ;...om samma eller högre så fodras östlig eller ingen korrigening av kursen
rjmp West ;...om lägre så fodras västlig korrigening av kursen
East:
ldiw Z, 360 ;
cpw Z, Y ;Jämför 360 med Y...
brlo East_hi ;...och om lägre(Y är högre alltså) hoppa till East_hi
subw Z, Y ;...annars subtrahera Y från 360
mov skillnad, ZL ;och lägg resultatet(som nu är mellan 0-180) i "skillnad"
rjmp Main
East_hi:
subw Y, Z ;Subtrahera 360 från Y
ldiw Z, 360 ;
subw Z, Y ;Subtrahera Y från 360
mov skillnad, ZL ;och lägg resultatet(som nu är mellan 0-180) i "skillnad"
rjmp Main
West:
mov skillnad, YL ;lägg resultatet(som är mellan 0-180) i "skillnad"
rjmp Main