Assamblertechnik 2

Hallo Leute,

wir haben heute in der Schule Assamblertechnik anhand eines Beispiels kennengelernt, nur ich blick da irgendwie nicht durch! Kann mir vielleicht jemand sagen, was dieses Programm macht und was die Befehle überhaupt bedeuten. Einige Befehle sind mir bekannt, aber einige nicht!
Please help me !

Puffer EQU 4500H // ?
DPH EQU 83H // ?
DPL EQU 82H // ?
A EQU 0E0H // Deklaration von Akku
P4 EQU 0E8H // Deklaration von Port 4

ORG 4200H // Startadresse
MOV DPL,#00H // Setze Datenpointer-High auf Hex_00
MOV DPH,#45H // Setze Datenpointer-Low auf Hex_45
MOV A,#0AAH //Lade Akku mit dem Hex-Bitfolge AA
MOV Puffer,A // Lade Puffer mit Inhalt des Akkumulators
ANL A,#00H // Der Akkulumator wird überschrieben durch Hex-Bitfolge 00
INC A // Zum Inhalt des Akkulumators wird 1 addiert
MOVX A,@DPTR // Lade Akkulumator mit dem Inhalt der externen Daten-
//speicherzelle, die durch DPTR adressiert ist
DEC A // Der Inhalt des Akkulumators wird um 1 subtrahiert
MOV P4,A // Gib den Inhalt des Akkus aus

Habe ich es so richtig verstanden ??? Und was gibt er überhaupt am P4 aus ?

Hallo Fragewurm,

wir haben heute in der Schule Assamblertechnik anhand eines
Beispiels kennengelernt, nur ich blick da irgendwie nicht
durch! Kann mir vielleicht jemand sagen, was dieses Programm
macht und was die Befehle überhaupt bedeuten. Einige Befehle
sind mir bekannt, aber einige nicht!
Please help me !

> Puffer EQU 4500H // ?  
> DPH EQU 83H // ?  
> DPL EQU 82H // ?  
> A EQU 0E0H // Deklaration von Akku  
> P4 EQU 0E8H // Deklaration von Port 4

EQU funktioniert wie Suchen&Erstzen bei der Assemblierung, es wird allso überall wo z.B. "Puffer" vorkommt, der Wert "4500H" eingesetzt.
Wenn du C kannst: EQU entspricht #define, also:
DPH EQU 83H
gleich
#define DPH 0x83




> ORG 4200H // Startadresse  
> MOV DPL,#00H // Setze Datenpointer-High auf Hex\_00  
> MOV DPH,#45H // Setze Datenpointer-Low auf Hex\_45  
> MOV A,#0AAH // Lade Akku mit dem Hex-Bitfolge AA  
> MOV Puffer,A // Lade Puffer mit Inhalt des Akkumulators  
> ANL A,#00H // Der Akkulumator wird überschrieben durch Hex-Bitfolge 00  
> INC A // Zum Inhalt des Akkulumators wird 1 addiert  
> MOVX A,@DPTR // Lade Akkulumator mit dem Inhalt der externen Daten-  
> // speicherzelle, die durch DPTR adressiert ist  
> DEC A // Der Inhalt des Akkulumators wird um 1 subtrahiert  
> MOV P4,A // Gib den Inhalt des Akkus aus



    
    
    
    > 
    
    Da fehlt wohl noch einiges:
    1. DPTR EQU DPL
    2. Was macht der Befehl "ANL" ??
    3. Was macht "MOVX" genau ?
    
    
    
    > Habe ich es so richtig verstanden ???? Und was gibt er  
    > überhaupt am P4 aus ?
    
    
    Das weiss ich, als Wert auch nicht. es müsste der Wert welcher im Speicher an Adresse 0045H steht, minus 1 sein.
    
    Es scheint da bei dir noch einen verbreiteten Denkfehler zu geben.
    Assembler ist **keine** allgemeine Sprache wie z.B. C oder BASIC. Assembler ist immer nur für eine bestimmte CPU definiert, auf einer anderen CPU kann der Befehl mit dem gleichen Mnemonic etwas anderes bewirken. Um also mit Assembler etwas anzufangen, benötigt man immer die entsprechenden Unterlagen zur CPU, welche das Verhalten definiert.
    Hinzu kommt noch, dass auch nicht jeder Assembler die gleichen Befehle kennt, auch wenn sie Code für die gleiche CPU erzeugen. Die meisten Assembler verwenden die Mnemonics des Herstellers, ich kenne aber auch Ausnahmen. Was die Pseudobefehle, wie z.B. "ORG" und "EQU" angeht, können diese ganz anders lauten. Ich benutze z.B. einen Cross-Assembler für den H8, welcher anstelle von "EQU" auch "#define" versteht.
    
    MfG Peter(TOO)

OK vielen Dank !