AVR ASM fråga

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

AVR ASM fråga

Inlägg 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
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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"... :-)
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Inlägg av Korken »

Okej, man tackar för de snabba svaret!

//Emil
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Helt OK.
Var logiken tydlig ?
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Inlägg av Korken »

Japp de va bra förklarat. :)

//Emil
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Inlägg 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
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg 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...
Skriv svar