i. einleitung ii. zustandsflags strukturiertes programmierentdi/document/rs-i-a.pdf · inhalt. 1....

Post on 22-Aug-2019

214 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

GESAMTÜBERBLICK

I.

EinleitungII.

Assembler

III.

ZustandsflagsIV.

Adressierungen

V.

Strukturiertes ProgrammierenVI.

PIA(T)

I.

Einleitung

INHALT

1.

Geschichtliche Entwicklung2.

Mikroprozessor

Prinzip und Aufbau3.

Grundlagen zum Praktikum

3.1 Praktikumsthemen3.2 R65023.3 Arbeitsschritte

1. Geschichliche Entwicklung

entnommen aus K. Wüst, Mikroprozessortechnik , Vieweg

(2003)

1948 Erfindung des Transistors(Bardeen

, Brattain

, Shockley

; Nobelpreis 1956)

1950 M.I.T. : erster Transistor-Computer , TX-01953 IBM : erster Röhrenrecher

(IBM 701)

Röhrenrechner nur bis 19581957 Gründung von DEC 1961 DEC : PDP-1

Nachfolgermodelle PDP-8 und -11 schon mit Buskonzept und 5μs Zykluszeiten

1964 DCD (Control

Data

Corporation) : CD6600IBM überholt bei alter Technik

Nächster Technologiesprung :

1958 Entwicklung integrierter Schaltkreise durchRobert Noyce

,

gründete mit Gordon Moore und Arthur Rockkleine Firma (Intel) zur Herstellung integrierterSchaltkreise

1964 IBM System/360 16 Mbyte

Adressraum,realer Magnetspeicher aber nur 512 kbyte, Prozessoreinheit noch nicht auf einem Chip.

1969 Erstes EPROM (Erasable

Programmable

ROM)

1969 japanischer Tischrechner →Auftrag an Intel, entsprechende Schaltkreise zu entwickeln

Rechner nur noch 4 Chips, einer davon dieCPU (4004 , 4-Bit

Prozessor)

4 Bit ALU4 Bit Register4 Datenleitungen

12 Adressleitungen (Arbeitsspeicher 4 kbyte)2300 Transistoren

1971 Intel : 8008 als 8 Bit

Prozessor mit 16 kbyte

Arbeitsspeicher

Der Ausdruck Mikroprozessor wurde geprägt.1972 Intel : 8080 (8 Bit, 64 kbyte

und Interrupt-Eingang)

1978 Intel : 8086 als 16 Bit

Prozessor, der 1981 von IBM im ersten PC eingesetzt wurde.

2. Mikroprozessor Prinzip und Aufbau

Grundbestandteile eines Mikrorechnersystems

Prozessor (CPU)•

Programm-

und / oder

Datenspeicher

Ein-

und Ausgabebausteine (I/O-Unit)•

Diese Elemente sind durch Busleitungen miteinander verbunden:

Steuer-, Adress-

und Datenbus•

Programmzähler

Vergleich Neumann-

und Harvard-Architektur

Harvard : zwei Bus-Systeme (getrennter Zugriff auf Progamm

und Datenspeicher)

Neumann : gemeinsamer Speicher für Daten undProgrammkode

Die Alu (arithmetic

and logical

unit) ist zentraler Teil des Operationswerk.

Prinzipielle Funktionsweise :

1.

Auslesen des nächsten Befehls aus dem Programmspeicher

2.

Programmzeiger weiterrücken 3.

Erkennen und Ausführen des Befehls

Ablauffrequenz wird durch einen Taktgenerator (clock) vorgegeben.Taktfrequenz etwa 1 MHz ( 1 μs )

80er zwei Entwicklungsrichtungena)

PC

b)

Mikrorechner Computer gesteuerte Geräte,embedded

systems

Mikrokontroller Handy , MP3-Player , GPS

Was sind die besonderen Anforderungen an einen Mikrocomputer ?

i.a. wenig Platz ●

Schnelle Programmausführung

⇒ Maschinen nahes Programmieren

Warum Assembler ?Programm liegt im Programmspeicher byteweise als binärerKode vor (meist als hexadezimaler Kode geschrieben).

Schwer interpretierbarund daher ungeeignet zurProgrammentwicklung

Daher hat man für jeden Maschinenbefehl einemnemotechnische Bezeichnung definiert, die als Ganzesden

Mnemokode

darstellt.

„$“ bedeutet : Angabe im hexadezimalen Kode

Assembler hat die Aufgabe den Mnemokode

in den Maschinenkode umzuwandeln.

Der Assembler hängt vom Prozessor abEnthält die ALU eine integrierte Schaltung füreine Operation, so sollte auch eine Kodierung für diese Operation im Assembler definiert sein.

Anmerkung :

Assembler immer schneller als Compiler,durch Studien bewiesen

3. Grundlagen zum Praktikum

3.1 Praktikumsthemen :

Teil I ( TI und AI ) :

arithmetischen Ausdruck (Arbeiten mit Speicher- adressen, Flags)

Tabellen (Adressierungsarten)•

Makros und Unterprogramme

Koroutinentechnik•

PIAT mit Interruptkonzept

Teil II ( TI ) :

Externe Interrupts•

Anwendung des Konzeptes der endlichen Maschinen

Kommunikation

3.2 Prozessor R65C02

Rockwell

MOSES als Mikrocomputer Plattform MOdulares

Sender und Empfanger

System

MOSES ist ein Host-Target

SystemHost : PCTarget

: Prozessor der Familie der R6500 (Rockwell

Ein-Chip Prozessoren), die in NMOS-

und in derschnelleren CMOS-Version

erhältlich waren.

CPU : R65C02 (CMOS-Technik) 4 MHz•

RAM : 32 kb

1-byte Speicher

ROM : 32 kb

Speicher•

BUS : 16 Bit Adressbus , 8 Bit Datenbus

I/O unit

: R65C24 PIAT (Timer und Interruptvorhanden , siehe später)

Betriebssystem : Blos

( Bus Link Operating

System

):

Kommunikation mit Shell auf dem PC,einige Dienstroutinen, wie z.B. DigEin

etc.

Blockschaltbild für die R65XX-Familie

Datenbus bi-direktional

(1 byte)

Adressbusuni-direktional(2 byte

: Lower

and higher

byte)

X-

und Y-registerIntel : nur Akkumulator

CPU des 6502•

Speicheradressen 2 byte⇒ Befehlszähler

2 byte

zero - page $00xx Schneller Zugriff , wird bei indirekterAdressierung benutzt

one – page $01xx für Stapel (stack) reserviert

Stapelzeiger 1 byte

, da „01“ als Seite 1fest vorgegeben

Zustandsregister 1 byte•

Akkumulator 1 byte

X -

Register 1 byte•

Y -

Register 1 byte

3.3 Arbeitsschritte

Erste Schritte●

login

: user

: Praktikant

PSW: Praktikum●

Shell starten (desktop)

Informationen unter HILFE→ Eingebundener Microrechner

Moses

Befehlssatz (Assembler Mnemokode)◦

Katagorische

Ordnung

Alphabetische Ordnung•

Betriebssystem des MOSES (Blos)◦

z.B. Unterprogrammaufrufe : DigEin

, DigAus

I/O am MOSESI : 4 Kippschalter für Eingabe einer Tetrade

(DigEin)

O : 7 Segmentanzeige für Ausg. von 15 Zeichen (DigAus)

Prinzipielle Arbeitsweise•

Programm wird auf dem Host im Mnemokode

geschrieben (i.a. in der Shell auf dem PC).Es können auch Vorarbeiten am Simulator zuhause durchgeführt werden), aber Vorsicht, beim Überspielen auf den PC können schwer auffindbare Fehler entstehen.

„Assemblieren“

(erzeugt eine .obj-

und eine .lst-Datei)

Auf den Prozessor übertragen : „herunterladen“•

Programm auf dem Prozessor laufen lassen : → „starten“

(Normalmodus)

→ „starten warten“

Ausgabe über DSchreibgewünscht

Gegebenenfalls „Speicher auslesen“

II.

Assembler

INHALT

1.

Grundlagen2.

Dateneingabe

3.

Strukturelemente3.1 allgemeine Programmstruktur3.2 Assembler Direktiven3.3 Unterprogramme und Macros

1. Grundlagen

Befehlskategorien1.

Datentransfer

LDA lade in den Akkumulator•

TAX kopiere Akkumulatorinhalt ins x-Register

PHA Akkumulatorinhalt auf den Stapel legen2.

Arithmetische und logische Operationen

ADC Addiere zum akkumulator

mit Übertrag•

DEY Dekrementiere

Inhalt des Y-Registers um 1

AND bitweise konj. Verknüpfung mit Akku-Inhalt•

CMP virtuelle Subtraktion vom Akku mit

Entleihung•

ROL um ein Bit nach links rotieren über Carry-Bit

3.

Programmablaufsteuerung•

BCC Verzweigung, falls C = 0 (Carry-Bit)

JMP Sprung zu angegebener Adresse•

JSR Sprung in Unterprogramm

RTS Rücksprung aus Unterprogramm•

CLC Carry-Bit

löschen

4.

Assembler –

Anweisungen (Direktiven)werden zur Übersetzungszeit ausgeführt

.if

Operand ab hier erfolgt Assemblierung nur, wenn Operand ≠

0

.cend

beendet Block, auf den sich .ifbezieht

.word

definiert Wort-Format für Variable als Operand

OperandeneingabeDen Operanden werden Definitionszeichen vorangestellt

# Wert wird explizit eingelesen ; steht dieses Zeichen nicht , wird eine Adresse angegeben.

$ Operand wird hexadezimal eingegeben.% Operand wird dual eingegeben.

Beispiele :LDA # 92

; dezimale explizite

LDA #%01011100

; duale Eingabe LDA # $5C

; hexadezimale von 92

LDA $ 5010

; hexadezimale Angabe der Speicheradresse

SpeicherplatzreservierungProgramm :

.org

$4000 legt Beginn

des Speicherbereichs

für den Programmkode

fest.

Ab Seite $40 für den Programmkode und Datenspeicherist sinnvoll, da vorherige Seiten zum Teil intern belegtwerden:

$02 : intern (z.B. Init. von IRQ-Vektoren)$20 -

$2F : Sendepuffer (4kb)

$30 -

$3F : Empfangspuffer (4kb)

$F7 -

$FF : BLOS ( Bus Link Operating

System )

2. Dateneingabe

(1)

Explizit für Variable A : A = $ 5001

(2)

mit Längenfestlegung und gleichzeitiger Eingabehierbei wird Nummer der Speicherzelle durch die Position im Programmkode automatisch festgelegt.A: .byte

$FA

; hexadezimale Werteingabe

B: .byte

%11111010

; duale Eingabe derselben ZahlC: .dbyte

$FA14

; Eingabe der 2-byte Zahl FA14

im doublebyte-FormatD: .word

$FA14

; oder im word-Format

Speicherbelegung im

dbyte

and

word

formatC C+1

D D+1

FA 14 14 FA

Tab: .byte

$04, $FA , … , $A8; Eingabe von Tabellenwerten

E: .byte

$00

; Initialisierung der Variablen E

Eingabe von DatenFALSCH :

S1 = $5000•••••

S1: .byte

$AC

; Für S1 werden zwei verschiedeneSpeicherzellen definiert.

Soll die Speicherzelle für die Eingangsvariable fest vorgegeben werden, ist folgendes möglich :

.org

$4000••

Programmkode••

.org

$5000

; AC wird als Variable S1 inS1: .byte

$AC

Speicherzelle $5000 abgelegt

Anderes Beispiel für falsche Dateneingabe.org

$4000

Tab: .byte

$AC, $0F, $7AStart: LDA …..

•••

Die .byte

Anweisung gehört nicht zum Programmkode,sondern ist eine „Directive“, die erst bei der Über-setzung

umgesetzt wird. Die Speicherzelle wird daher

zweimal beschrieben : mit $AC und mit dem Kode für den LDA-Befehl

besser : .org

$4000 Tab: .byte

$AC, $0F, $7A

.org

$4003

oder Start = $4003 Start: LDA …..

•••

Alternative Eingabemöglichkeit (oft für einfache Parameter eingesetzt)

N1 = $8F ; nur hier, ob hexadezimal, dual o. dezimalLDA #N1

; der Wert 8F wird in den Akku geladen

LDA N1

; der Inhalt der Speicherzelle $008F(zero-page) wird in den Akku geladen.

Beachte !A = 1

(dezimal) oder A = $5010

(hexadezimal)

sind keine Befehle des Assemblers, sondern nureinfache Gleichsetzungen,so auch auf voriger Folie Start = $4003Marken wie Start:

sind synonym zu Adressen des

Programmkodes

Vorsicht bei zero-Page

Adressierung

nachträgliche Korrektur des Programmspeichers aufgrund Zero-page

Benutzung

3. Strukturelemente

3.1 Allgemeine Programmstruktur•

R6502 hat Neumannstruktur, daher Daten-

und

Programmspeicher vermischt.•

Festlegung der Speicheradresse, ab der das Programm gespeichert werden soll.zwei Möglichkeiten :

.org

$4000 Start = $4000Start: clc

Es gibt Unterprogramme , z.B. DigEin

oder DigAus

, deren Adressen in einer Bibliothek gegeben sind. Die entsprechende Bibliothek wird durch

.lib

“konst.lib“eingebunden.

Macros

(Einzelheiten siehe später) sollte man an den Anfang des Programmkodes setzen

Da das Assemblerprogramm aus dem Betriebssystem Blos

als Unterprogramm aufgerufen wird, muss auch

das Hauptprogramm mitrts

abgeschlossen werden.Das Fehlen kann zu fatalen Fehlern führen.

Es ist sinnvoll Unterprogramme hinter das Haupt- programm

zu setzen.

Für die Dateneingabe werden Anweisungen der ArtTabelle: .word

$12FB, $A35D, ……

empfohlen.Da die Speicheradressen automatisch durch Weiterzählen festgelegt werden, sollten diese Datenanweisungen an das Ende des Programmkodes gesetzt werden, um Speicherplatzkonflikte zu vermeiden.

Daraus ergibt sich folgende Programmstruktur :

.org

$4000.lib

“konst.lib“

MacrosHauptprogrammrts

;

Abschluss des Hauptprogramms

UnterprogrammeTabelle: .word

$12FB, $A35D, ……

; Dateneingabe

.end

; Abschluss des Programmkodes

Korrektur zum studentischem SkriptSeite 17 unter „3.2. hello

World“

Das Beispielprogramm enthält einige

Fehler

:

.org

$4000.lib

„konst.lib“ ; so

wird am Moses eine

Bibliothek eingebundeloop: jsr

DigEin

; DigEin

ist wie im PA-Plan

jsr

DigAus

; korrekt gezeichnet eineSubroutine, daher jsr-Aufruf

cmp

#$0F ; Akku-Inhalt wird mit F durchvirtuelle Subtraktion verglichen,falls gleich, Zero-Bit = 1

bne

loop

; Sprung zu loop, falls Z = 0rts

; Main wird vom Blos

als

Subroutine angesprochen

Wie kann man Maschinenkode und Zuordnung von Befehl zu Speicheradresse nachschauen ?

Welche Information erhält man aus der lst-Datei

Befehlstypeni.

0-Adress-Befehle, z.B. clc

, asl

, rol

ii.

1-Adress-Befehle , z.B. lda

#Wert

(1 byte

Operand)lda

Adresse

(2 byte

Operand)

iii.

RMW (read

modify

write) ; teilweise0-Adress-Befehle : asl

; Akkumulator

dex

; X-Registerund / oder 1-Adress-Befehle : asl

$5000

dec

$5010

ZuordnungBefehl ↔

Speicheradresse

z.B. werden bei 1-Adress Befehlen, in denen der Operand aus 2 byte

besteht, 3 Speicheradressen

benötigt.

ZuordnungMnemokode

Maschinenkode

3.2 Assembler DirektivenMit if-Direktiven

, die einen Parameter A ansprechen,

kann gesteuert werden, welche Passagen desMnemotechnischen Kodes assembliert werden.

wird assembliert , wenn● .if

A : A ≠

0

● .ifne

A : A ≠

0● .ifeq

A : A = 0

● .ifmi

A : A < 0● .ifpl

A : A > 0

Diese if-Direktiven

können mit „ .else“ verknüpft werdenund werden mit „ .cend“ beendet (siehe folgendes Beispiel).

Beispiel :

Anmerkungen :•

Da die if-Direktiven

bereits Einfluss auf das

Assemblieren nehmen, können die Steuer-Parameter natürlich nicht durch den Ablauf des Programms bzw. dessen Rechenergebnissebestimmt werden, d.h. ,

Für den Steuerparameter kann nicht der Inhalt einer Speicherzelle oder eines Registers verwendet werden.

WICHTIG :Hinter den if-Direktiven

dürfen keine Kommentare

stehen

3.3 Unterprogramme und

Makros

Unterprogramme :

Beispiel :•••

$4010 JSR Potenz$4013 Befehl_cont

•••

$wxyz

Potenz•••

rts

; $4012 wird als Rücksprungadresse ρauf den Stapel gebracht

; Speicheradresse $4012 wird vomStapel genommen und in den Programmzähler geschrieben, der dann um „1“

inkrementiert wird,

also auf $4013 gesetzt wird.

Unterprogramme werden durch Sprünge angesprochen, d.h. ,Programmzähler muss neu beschrieben werden.

Makro–Anweisungen

gehören zu den Assembler Direktiven, d.h. auch hier geschieht das Wesentlichebeim Assemblieren:

Die Befehle des Makros werden andie Stelle des Aufrufes kopiert.

Bei n Aufrufen wird das Makro im Maschinenkoden-mal

aufgeführt.

Makros können ineinander geschachtelt werden.●

Makros sind parametrierbar (Parameter können übergeben werden.

Makros :

Zwei Typen von Makros :

Beginn durch Name.macro

ParamVerhalten wie Blöcke, d.h. , dort definierte Marken gelten nur lokal im Makro

Beginn durch Name.segm

Parambeim R6502 nicht möglichDefinierte Marken gelten global, d.h. , Doppelbenennung beachten oder Marken vermeiden.

Beide Typen werden mit .mend

abgeschlossen.

Der Aufruf eines Makros erfolgt durch Name

Makro

Unter-programm

Vorteile

Schneller Zugriff

Parameterübergabe

Kode wird nur einmal abgelegt, geringerer Speicherplatz

Nachteile

Kode wird mehrmals abgelegt, Speicherplatz-

expansion

keine Parameterübergabe

Langsamer wegen Sprünge

⇒ Makros klein haltenund / oder

Nicht oft aufrufen

top related