Sida 1 av 1

AVR ASM fråga

Postat: 5 februari 2007, 23:00:16
av Korken
Hej alla glada!

Nu kommer min första fundering om ASM:
När jag setter ett register, som är ihopp länkat med ett till för att få 16bitar (adiw), och ska bestämma vilket värde det ska börja på varför är det då tex:

Kod: Markera allt

ldi r24, low(3037)
ldi r25, high(3037)
och inte:

Kod: Markera allt

ldi r24, low(3037)
ldi r25, low(3037)
Jag tycker att low low är mer logiskt då man bestämmer registrets startvärde men varför skriver man low high?

//Emil

Postat: 5 februari 2007, 23:03:39
av sodjan
Det ena registret ska väl ha de 8 lägsta bitarna och det andra
de 8 högsta. Sätter du "low" på båda blir det antagligen helfel...

EDIT:
Assembern har naturligtsvis ingen som *helst* aning om att
det värde (3037) du använder är ett "startvärde", den vet inte
ens vad ett "startväde" är. Det är bara ett värde som vilket som helst.
Det är *du* som påstår att det är ett "startvärde"... :-)

Postat: 5 februari 2007, 23:13:50
av Korken
Okej, man tackar för de snabba svaret!

//Emil

Postat: 5 februari 2007, 23:24:38
av sodjan
Helt OK.
Var logiken tydlig ?

Postat: 5 februari 2007, 23:37:24
av Korken
Japp de va bra förklarat. :)

//Emil

Postat: 6 februari 2007, 21:29:59
av Swech
Förtydligande bara...

Low = ta de lägsta 8 bitarna. 0-255
High = ta det högsta 8 bitarna. 256,512,1024 osv..

T.ex. 300 = 256+32+8+4
så LOW(300) = 32+8+4 och HIGH(300) = 1 (1*256)

Swech

Postat: 6 februari 2007, 23:32:09
av oJsan
Och för att förtydliga ännu mer...
low() och high() är "prekompilatormakron" som körs innan assemblering.
Input:en till assemblatorn hade blivit exakt densamma om du skrivit

Kod: Markera allt

ldi r24, 0xDD
ldi r25, 0x0B
Det är alltså bara ett sätt att underlätta för sig själv när man kodar...