www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Umrechnung: C-Code->Assembler-Code->Cycles


Autor: Stephan Plaschke (steph0815)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich programmiere schon laenger uC in C, habe mich aber noch nie mit 
Assembler befasst. Um jetzt einen Einstieg zu bekommen dachte ich 
versuche ich mich einfach mal an einer Warteschleife. Das ganze sollte 
einfach eine for-Schleife sein.
void Delayx100us(unsigned char b)
{
  unsigned char j;        
  for (j=0; j!=b; ++j) ;    //20+a*12 cycles (for 1MHz)
}
Ich benutze einen MSO430x169 und MSPGCC mit Eclipse. Wenn ich dies nun 
auf den MSP bringe und im Assembler den Code anschaue sieht das so aus
    Delayx100us(5);
0x000013be <main+48>: mov   #5,  r15  ;#0x0005
0x000013c2 <main+52>: call  #4962    ;#0x1362
0x000013c6 <main+56>: jmp   $-12       ;abs 0x13ba
0x00001362 <Delayx100us>:    push  r5    ;
0x00001364 <Delayx100us+2>:  push  r4    ;
0x00001366 <Delayx100us+4>:  mov   r1,  r5  ;
0x00001368 <Delayx100us+6>:  add   #6,  r5  ;#0x0006
0x0000136c <Delayx100us+10>: decd  r1    ;
0x0000136e <Delayx100us+12>: mov   r1,  r4  ;
0x00001370 <Delayx100us+14>: mov.b r15,  0(r4)  ;
  unsigned char j;        
  for (j=0; j!=b; ++j) ;    //20+a*12 cycles (for 1MHz)
0x00001374 <Delayx100us+18>: mov.b #0,  1(r4)  ;r3 As==00
0x00001378 <Delayx100us+22>: cmp.b @r4,  1(r4)  ;
0x0000137c <Delayx100us+26>: jnz   $+4        ;abs 0x1380
0x0000137e <Delayx100us+28>: jmp   $+8        ;abs 0x1386
0x00001380 <Delayx100us+30>: inc.b 1(r4)    ;
0x00001384 <Delayx100us+34>: jmp   $-12       ;abs 0x1378
Einiges kann ich mir ja erklaeren wie z.B. MOV(.b) (1 Cycle) oder JMP (2 
Cycles). Die Cycles stehen ja auch im DB. Um jetzt alles erklaeren zu 
koennen waer eine gute Einfuehrung in Assembler noetig. Weiss jemand wo 
ich so etwas Online finde oder kann mir die hier gezeigte Funktion etwas 
genauer erklaeren? Vielleicht gibt es ja auch die Moeglichkeit das beim 
Debuggen anzuzeigen.

Vielen Dank schon mal!
Stephan

Autor: 2921 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja. Du musst das ASM Instruktionsset des Prozessors vorne haben, am 
Besten auf Papier ausgedruckt. Dann den Simulator starten und schauen 
wie das so geht. Der kann Einzelschritte ausfuehren und man kann alle 
Register anschauen.

Autor: Stephan Plaschke (steph0815)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ok ich haenge das Handbuch mal an denn ich finde nicht alles darin, z.B. 
CMP.  Zu finden ist das Instruktion Set ab der Seite 51. CMP findet sich 
auf der Seite 68. Hier ein Auszug der hoffentlich reicht zum Erklaeren.

CMP[.W] Compare source and destination
CMP.B Compare source and destination
Syntax CMP src,dst or CMP.W src,dst
CMP.B src,dst
Operation dst + .NOT.src + 1
or
(dst − src)

Wie gesagt ich habe noch nicht wirklich ein Verstaendniss von Assembler 
um das daraus lesen zu koennen.

mfg
Stephan

Autor: 2921 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist an diesem Compare schwierig ? Die Flags, die sich allenfalls 
bewegen sollten noch da stehen.

Autor: Stephan Plaschke (steph0815)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber was sagen mir die Flaps ueber die instruction cycles aus? Flags 
meinst du wohl Status Bits oder? das sind diese:

Status Bits N: Set if result is negative, reset if positive (src >= dst)
Z: Set if result is zero, reset otherwise (src = dst)
C: Set if there is a carry from the MSB of the result, reset otherwise
V: Set if an arithmetic overflow occurs, otherwise reset

Autor: 2921 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Anzahl cycles stehen auch dort. Heutzutage in einer modernen CPU 
sind die meisten Befehle ueblicherweise in einem Zyklus durch, 
Sprungbefehle in zwei Zyklen. Die Flags sind auch wesentlich zum 
Verstehen der Befehle. Ein Compare hat ueblicherweise einen bedingten 
Sprung hintendran, der die Flags dann auch auswetet.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
2921 wrote:

> Die Anzahl cycles stehen auch dort. Heutzutage in einer modernen CPU
> sind die meisten Befehle ueblicherweise in einem Zyklus durch,
> Sprungbefehle in zwei Zyklen.

Hier nicht. CISCs wie MSP430 sind komplizierter. Da läuft das ganz 
klassisch im Baukastenverfahren ab. Also A Takte für den Befehl selbst, 
plus B Takte für den Quelloperand abhängig von dessen Adressierungart, 
plus C Takte für den Zieloperand abhängig von dessen Adressierungsart.

Autor: winne (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke hier ist Urschleim von Nöten

nur wer den Aufbau (s)eines Prozessors verstanden hat wird mit ASM
glücklich.
Anders bei Hochsprachen, diese sind Problemlösungsorientiert.
Assembler ist dagegen untrennbar an den Prozessor gebunden.
Man wird Assembler nicht verstehen, ohne die Struktur und Funktion der 
Register, Flags und Takterzeugung sowie der Port und Speicherzugriffe 
verstanden zu haben.
Also  am anfang von ASM steht Hardware auf dem Stundenplan!
danach wird alles easy.  ;-))

MfG
Winne

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.