Forum: Mikrocontroller und Digitale Elektronik 32Bit Variable in Assembler


von Ingo (Gast)


Lesenswert?

Hallo,

leider bin ich mit dem Assembler wenig vertraut. Daher die Frage, wie 
incrementiert man eine 32Bit Variable um 1 mit anschließender Auswertung 
ob ein bestimmter Stand erreicht ist?

Oder macht es Sinn den Code vom Compiler zu nutzen (Also erst in C 
schreiben, dann den Code kopieren und in das Assemblerprojekt einfügen)?

So sähe wohl der C Code aus:
1
32bitvariable++;
2
if(32bitvariable == xyz)
3
{
4
   mach dies oder das...
5
}

Also in C n Klacks, aber Assembler???


Ingo

von Peter II (Gast)


Lesenswert?

genauso so wie du es mit einer 16bit varibale machst.

addi R16, 1
addwi R17, 0
addwi R18, 0
addwi R19, 0

verlgeich muss dann extra gemacht werden.

von (prx) A. K. (prx)


Lesenswert?

ldc  variable
stl  0
ldl  0
ldnl 0
adc  1
stl  1
ldl  1
ldl  0
stnl 0
ldl  1
eqc  xyz
cj   l1
  ...machediesoderdas
l1:

von spess53 (Gast)


Lesenswert?

Hi

>addi R16, 1
>addwi R17, 0
>addwi R18, 0
>addwi R19, 0

Wenn das für AVR sein soll, dann nicht so. Sondern

  clr r15          ; Null
  sbci r16,-1
  adc r17,r15
  adc r18,r15
  adc,r18,r15

Vergleich:

  ldi r20,Byte4(Konstante)
  cp r16,r20
  ldi r20,Byte3(Konstante)
  cpc r17,r20
  ldi r20,Byte2(Konstante)
  cpc r18,r20
  ldi r20,Byte1(Konstante)
  cpc r19,r20

MfG Spess

von Ingo (Gast)


Lesenswert?

Was ich vergessen habe, es handelt sich um einen AVR

von (prx) A. K. (prx)


Lesenswert?

spess53 schrieb:

>   clr r15          ; Null
>   sbci r16,-1
>   adc r17,r15
>   adc r18,r15
>   adc,r18,r15

Probiers lieber nochmal.

von Ingo (Gast)


Lesenswert?

Ohne große Assemblekenntnisse zu haben, aber das scheint keinen Sinn zu 
machen:
  clr r15          ; Null
  sbci r16,-1
  adc r17,r15
  adc r18,r15
  adc,r18,r15

Oder?

von spess53 (Gast)


Lesenswert?

Hi

>Probiers lieber nochmal.

Stimmt:

  ldi r20,1
  add r16,r20
  clr r20          ; Null
  adc r17,r20
  adc r18,r20
  adc r19,r20

MfG spess

von Die Sonne (Gast)


Lesenswert?

Ingo schrieb:
> leider bin ich mit dem Assembler wenig vertraut.

Warum willst du dann mit Assembler Programmieren wenn du nicht einmal so 
eine simple Sache wie das inkrementieren einer >16Bit-Variable 
hinkriegst.
Also das ist jetzt nicht böse oder beleidigend gemeint. Ich meine nur 
wenn du C kannst dann bleib dabei, gute Compiler kommen angeblich bis 
95% an Assembler-Geschwindigkeit ran aber wenn man sich nicht auskennt 
kann es auch gut sein das ein Assembler noch langsamer ist als ein 
entsprechendes C Programm, mal davon abgesehen das Assembler viel 
umständlicher ist.

von (prx) A. K. (prx)


Lesenswert?

spess53 schrieb:

>>Probiers lieber nochmal.
>
> Stimmt:

Oder auch
  subi r16, -1
  sbci r17, -1
  sbci r18, -1
  sbci r19, -1

von spess53 (Gast)


Lesenswert?

Hi

>Oder auch
>  subi r16, -1
>  sbci r17, -1
>  sbci r18, -1
>  sbci r19, -1

Aber Vorsicht das: Cy-Flag ist zur negiert

MfG Spess

von spess53 (Gast)


Lesenswert?

Hi

Korrektur : 'Cy-Flag ist negiert'

MfG Spess

von Ingo (Gast)


Lesenswert?

Weil es sich um einen Tiny10 handelt. Diesen kann ja glaub ich erst mit 
AVRStudio 5 in C Programmieren. Da das Programm, winzig klein, nun etwas 
erweitert werden soll, wollte ich es auch gleich weiter in Assembler 
machen. Evtl. Setze ich es aber auch ne in C auf mal gucken, trotzdem 
danke.

von (prx) A. K. (prx)


Lesenswert?

Du solltest auf Salamiproduktion umsteigen. Die beherrschst du perfekt. 
Erst vergisst du, den Prozessor zu erwähnen, was zu eher exotischen 
Antworten anregt. Dann fliegt das doch noch auf und es kommt zu 
produktiven Antworten, aber es stellt sich nach langer Zeit heraus, dass 
es sich um einen recht exotischen AVR mit stark eingedampftem 
Befehlssatz handelt.

von Ingo (Gast)


Lesenswert?

Echt? Das wusste ich nicht, ich dachte der Befehlssatz wäre 
einheitlich...

von spess53 (Gast)


Lesenswert?

Hi

> dass
>es sich um einen recht exotischen AVR mit stark eingedampftem
>Befehlssatz handelt.

Und halbierten Registersatz.

MfG Spess

von Peter D. (peda)


Lesenswert?

Ingo schrieb:
> Also erst in C
> schreiben, dann den Code kopieren und in das Assemblerprojekt einfügen

Wenn man C erstmal kann, schreibt man selbstverständlich sein Programm 
komplett in C.
C nach Assembler zu konvertieren und in den Quelltext einzufügen ist 
völliger Quatsch.


Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.