Rechenoperationen Subtraktion

OP #508348
Hallo, habe wiedermal ein paar Probleme.

Ich habe in einem Buch folgendes stehen:

Subtraktion:

ldi r16,K1-K2    ; lädt r16 mit K1-K2

Meine Frage, kann ich K1 und K2 mit einem Register ersetzen!

Funktion:
1. Es soll in K1 eine Konstante stehen und in K2 soll der Wert vom ADC
   übernommen werden!
2. Ergebniss dann in R16!

Vielen Dank!

MFG
Steven
Persönliche Seite
In AVR-Assembler nicht.
Dort musst Du z.B. mit "mov r8, Wert" einen Wert in das Register r8 
laden. Dann mit mov den Wert vom ADC holen (korrigiert mich, wenn ich 
den ADC-Wert nicht mit mov bekomme...AFAIK ist es ja aber nur der Inhalt 
von nem Timerregister). Anschließend kannste mit (AFAIK) "sub" die Werte 
subtrahieren und danach wenn benötigt mit "mov" ins benötigte Register 
schieben.

Gruß,

Thomas
Gast
> Meine Frage, kann ich K1 und K2 mit einem Register ersetzen!

Nein. Konstanten sind im Programmcode festgeschrieben (also konstant) 
und lassen sich zur Laufzeit nicht ändern. Da sich Konstanten durch 
Labels ausdrücken lassen (Aliasnamen), können bei einer Zuweisung zu 
einem Register (das Register enthält dann eine Variable) mehrere 
Konstanten vom Assembler zusammengefasst (addiert, subtrahiert, 
multipliziert, dividiert, verORt, verANDet, geshiftet, LOW-isoliert, 
HIGH-isoliert, ...) werden, bevor sie dem Register zugewiesen werden. 
Die Berechnungen erledigt der Präprozessor des Assemblers bevor aus dem 
Quelltext eine ausführbare Datei erstellt wird. In der ausführbaren 
Datei (Maschinencode des Programms) steht dann nur noch das Ergebnis der 
Vorberechnung in Form des Maschinenbefehls, der in einigen seiner Bits 
die (zuzuweisende) Konstante enthält.

Schau Dir mal die Bitmuster der Maschinencodes zu den Befehlen an, die 
mit Konstanten operieren, da gibt es fest definierte Bits für den 
Befehl, variable Bits für das Zielregister und variable Bits für die 
Konstante. Falls Du das in Deinem Buch nicht findest, dann schau mal in 
die Online-Hilfe des AVR-Studios.

MFG
Gast
> Schau Dir mal die Bitmuster der Maschinencodes zu den Befehlen an, die
> mit Konstanten operieren, da gibt es fest definierte Bits für den
> Befehl, variable Bits für das Zielregister und variable Bits für die
> Konstante.

Richtig,die Konstante ist Teil des Maschinenbefehls und liegt genau wie 
der restliche Code (und,falls nicht explizit anders angegeben,auch 
konstant per .DB/.DW abgelegt Daten) im Flash.Das ist ein wichtiges 
Merkmal der AVRs und jeder Havard-Architektur dass Programm und 
Datenbereich strikt getrennt sind.Deshalb gibt es auch unterschiedliche 
Befehle,um Konstanten aus dem Flash (LDI,CPI,SUBI,LPM....) und Variablen 
aus dem SRAM (STS,LDS,LD,ST,...) zu verarbeiten.Um zwischen 
CPU-Allzweckregistern Daten zu verschieben,gibt es dann noch den 
MOV-Befehl.

Zu beachten ist,das eine Lesezugriff auf den Flash(Achtung,Wortweise 
organisiert) andere Daten liefert als ein Lesezugriff aufs SRAM an der 
selbe Addresse:

LPM r0,0x100  ; Byte aus dem Flash von Addresse 100h laden
lds r0,Konstante  ; Byte aus dem SRAM von Addresse 100h laden


Wie die einzelnen Speicherbereiche genau aufgebaut sind,steht im Kapitel 
"AVR-Memories" oder ähnlichem im Datenblatt zu deinem Lieblings-AVR.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.