Ein Programmbeispiel

Dieses ist ein Beispiel, wie man früher unter Assembler programmiert hat. Lesen Sie es nur, wenn es Sie interessiert. Ich habe versucht es so zu erklären, dass auch Nicht-Fachleute es verstehen.

Das abgebildete Programm zeigt, wie man die Relais der Reihe nach durchschaltet. Die erste Spalte zeigt die Programmzeilen in Zehner-Schritten. Das ermöglicht ein späteres Einfügen weiterer Zeilen.

Die zweite Spalte zeigt die Speicheradresse, in der nachher das assemblierte Programm abgelegt ist. In der dritten Spalte steht der eigentliche Maschinencode, den der Prozessor zu sehen bekommt. Die Speicheradresse und der Maschinencode sind im hexadezimalen Zahlensystem. Im Zehnersystem geht eine Stelle von 0 bis 9. Das sit der höchste Wert. Im Hexadezimalen geht es von 0 bis F, also 0…9, gefolgt A…F. Es kommt also nach 09 0A, dann 0B, 0C, 0D, 0E, 0F, 10, 11, usw. Damit sie nicht verwechselt werden kennzeichnet man sie meistens mit einem $. So ist $15 = 21 und $FF = 255.

In der vierten Spalte steht das Assembler-Programm. LDA #00000001 (LDA = Load Accumulator) bedeutet, dass die Binärkombination 00000001 in den Accu (ein Zwischenspeicher im Prozessor) geladen wird. Der Prozessor liesst nur A9 01. Der zweite Befehl STA Relais sagt, dass der Wert aus dem Accu in die Speicheradresse der Relaiskarte geschrieben werden soll. Die Konstante „RELAIS“ wurde un der Zeile 0040 definiert und nach dem Assemblieren direkt in den Speicher unter $0202 bis $0204 geschrieben. Hier steht 8D 68 14. 0D bedeutet STA (= Store Accumulator) 68 und 14 ist die Adresse $1468 (Low-Byte zuerst). Danach springt springt das Programm zum Unterprogramm „PAUSE“ mit dem Befehl JSR (=jump subroutine). So schreibt es verschiedene Werte an die Relais um anschließend wieder nach „LOOP“ zurückzuspringen (Zeile 310).

 

Gerhard Uhlhorn Seite 7

Ein für den 6505-Prozessor von Motorola typisches Assembler-Programm.

  MCDS-65 B    ASS                                  14.09.05          SEITE 01

________________________________________________________________________________



00010  0200  ;PROGRAMM ZUM TESTEN DES TIMERS

00020  0200  ;==============================

00030  0200  ;

00040  0200            RELAIS  =$1468

00050  0200  ;

00060  0200            TIMER   =10000 IST 1/100 SEKUNDE

00070  0200            ZEIT    =10 CENTISEKUNDEN

00080  0200            TIMELO  =$B000

00090  0200            TIMEHI  =$B001

00100  0200  ;

00110  0200            VIA     =$1400

00120  0200            T1CL    =VIA+4

00130  0200            T1CH    =VIA+5

00140  0200            T2CL    =VIA+8

00150  0200            T2CH    =VIA+9

00160  0200            IFR     =VIA+$D

00170  0200  ;

00180  0200            LOOP

00190  0200  A9 01             LDA #%00000001

00200  0202  8D 68 14          STA RELAIS

00210  0205  20 23 02          JSR PAUSE

00220  0208  A9 03             LDA #%00000011

00230  020A  8D 68 14          STA RELAIS

00240  020D  20 23 02          JSR PAUSE

00250  0210  A9 02             LDA #%00000010

00260  0212  8D 68 14          STA RELAIS

00270  0215  20 23 02          JSR PAUSE

00280  0218  A9 00             LDA #0

00290  021A  8D 68 14          STA RELAIS

00300  021D  20 23 02          JSR PAUSE

00310  0220  4C 00 02          JMP LOOP

00320  0223            PAUSE

00330  0223  A9 0A             LDA #<ZEIT

00340  0225  8D 00 B0          STA TIMELO

00342  0228  A9 00             LDA #>ZEIT

00344  022A  8D 01 B0          STA TIMEHI

00350  022D  A9 10     PLOOP   LDA #<TIMER

00360  022F  8D 04 14          STA T1CL

00370  0232  A9 27             LDA #>TIMER

00380  0234  8D 05 14          STA T1CH

00390  0237            WAIT

00400  0237  2C 0D 14          BIT IFR

00410  023A  50 FB             BVC WAIT

00420  023C  CE 00 B0          DEC TIMELO

00430  023F  AD 00 B0          LDA $B000

00440  0242  D0 E9             BNE PLOOP

00450  0244  60                RTS

00460  0245                    .END



SYMBOL TABELLE


RELAIS 1468    TIMER  2710    ZEIT   000A    TIMELO B000    TIMEHI B001

VIA    1400    T1CL   1404    T1CH   1405    T2CL   1408    T2CH   1409

IFR    140D    LOOP   0200    PAUSE  0223    PLOOP  022D    WAIT   0237


   FEHLER: 00000

Erstellt auf einem Mac

Die C-Control I Station von Conrad Elektronik.

Auch heute noch wird Assembler verwendet

Ich baue und konzipiere ja meine Heizung selbst. Und ich möchte die Vorlauftemperatur abhängig von der Stellung der Heizkörperventile steuern, also nicht abhängig von der Aussentemperatur, wie üblich, sondern bedarfsorientiert.

Um dieses Steuerung zu realisieren habe ich mir vor einigen Tagen die C-Control I Station von Conrad geholt. Man kann mit diesem Modul leicht Steuerungen in der leichten Sprache Basic programmieren. Soll das Programm schneller laufen, kann man auch zu Assembler greifen. Und ich war ziemlich erstaunt, als ich mich über diesen Assembler informierte. Es ist ein alter Bekannter, den ich aus dem oben genannten Prozessrechner schon kannte. Also auch heute wird noch so programmiert. Mein Lernen war also nicht umsonst. ;-)

(Prüfcode um Google-Indizierung zu prüfen: vhbkCGp46YVF7KJpAfOT)