> så la jag till lite förklaringar i koden, o snyggade till ite.
> Helt plötsligt funkar det.
Japp, brukar hjälpa i 9 fall av 10...
> Men värdet i W kan väll aldrig ligga kvar som negativt?
Tja, "negativt" och "negativt". Det beror på vad man menar med "negativt"...
W är ju bara 8 bitar, hur man själv väljer att definiera dessa är upp till
dig (d.v.s den som skriver programmet). Processorn i sig vet ingenting om
"negativa" värden.
Antingen tolkar man W som "unsigned" d.v.s med värdena 0 -> 255.
Och då finns det naturligtsvis inga "negativa" värden.
Eller så tolkar man det som "signed" d.v.s med värderna -126 -> +127.
D.v.s att om bit7 (den åttonde biten) är "1" så är värdet negativt.
Man kan se på W som en ring, där 255 + 1 = 0 och 0 - 1 = 255 (om man
räknar "unsigned").
Den enda som C-biten i STATUS talar om, är om man fick "overflow"
(vid addition) eller "borrow" (vid subtraktion). D.v.s att W inte "räckte till"
för den operation man gjorde. Då kan man använda C-biten för att justera
nästa byte (om man har ett värde som är 16, 24 eller fler bitar stort.
En annan sak är att SUBxx instruktionerna fungerar lite "baklänges".
Kolla ordentligt i vilken ordning subtraktionen görs.