Assembler Befehl LDA

Gast #1523310
Lesenswert?

Hallo,
wir haben heute in Informatik die Befehlsverarbeitung begonnen. Der 
Ablauf des Befehls LDA <ADR> wurde so erklärt:

BR erhält Befehlscode für LDA
PC inkrementieren
Adresse an Speicher anlegen (Adressierung des Arguments)
Wert aus Speicher wird in AR übernommen
Speicher mit AR adressieren
Wert aus Speicher in HR übernehmen.

LDA...load accumulator
BR....Befehlsregister
PC...Programmcounter
AR...Adressregister
HR...Hilfsregister

Ich stelle mir den Speicher so vor:

0: LDA
1: 7
2: x
3: x
4: x
5: x
6: x
7: 20

Also zuerst ist der PC bei 0. Dort steht der Befehlscode für LDA. Als 
nächstes wird dieser inkrementiert. Dort steht die Adresse 7. Diese wird 
jetzt an den Speicher angelegt. Raus kommt der Wert 20. Wieso wird 
dieser jetzt in das AR übernommen, und damit der Speicher nochmal 
adressiert? Kann mir das bitte jemand erklären?

Viele Grüße
Gast #1523313
Lesenswert?

Ok ich glaub jetzt hab ichs kapiert. Es bewirkt manchmal wunder, wenn 
man das geschriebene nochmals durchliest :-). Der Speicher wird erst mit 
der Adresse 1 adressiert, heraus kommt die 7 und damit wird der Speicher 
dann nochmal adressiert. Ist das so richtig?
#1523335
Lesenswert?

Hallo,

im Prinzip ja, aber... ;)

Hängt vom konreten Prozessortyp ab, dem Dein LDA gehört.
Der Hersteller hat ja die Struktur des "LDA" in Siliziom gegossen.
Man müßte also z.B. wissen, ob der Speicher und CPU 8 oder 16Bit breit 
sind.

Wenn es 8Bit sind und der Befehl das macht, was Du schreibst, kann er 
nur maximal 256 Byte adressieren (eben Adresse 0...255).
Auch eine 8Bit CPU hat aber normalerweise megr Speicher und damit einen 
Adressbus, der z.B. 16Bit breit ist.
Wenn der LDA da auf den ganzen Bereich zugreifen will, muß er ein 3 Byte 
Befehl sein, 1. Byte Befehl (LDA), 2.+3.Byte Speicherdresse.

Dann sähe es z.B. so aus:

0000: LDA
0001: 7 (untere 8 Bit der Adresse)
0002: 3 (obere 8 Bit der Adresse)
0003: x
...
0307: 20

PC auf 0000 und ins AR
Befehl holen und dekodieren. PC+1
"LDA" sagr der Logik jetzt, daß noch eine 16 Bit Adresse dazugehört. 
Also
Also PC ins AR und 2. Byte holen und merken, PC+1
PC ins AR, 3. Byte holen und merken, PC+1

2. und 3. Byte in das 16Bit Adressregister schieben und den Speicher 
adressieren.
Inhalt von Adresse 0e07 in den Akku holen.

Der PC zeigt jetzt auf das nächste Befehlsbyte im Speicher.

Ich binn jetzt mal bei Deinen Bezeichnungen geblieben, soweit habe ich 
eine CPU noch nicht "zerlegt" ;-)

Gruß aus Berlin
Michael
#1523439
Lesenswert?

Hallo,

Thomas schrieb:
> Wieso wird Speicher denn eigentlich in der Praxis hexadezimal
> adressiert?

Der Speicher wird nicht hexadezimal adressiert, der wird wie auch alle 
Register usw. binär angesprochen, eben mit 0 oder 1 auf den Leitungen.

Die lesbare Darstellung um z.B. das Bitmuster 0000001100000111 des 
Adressregisters für den Menschen einfacher zu machen, ist da meist die 
hexadezimale Darstellung.
00000011000001111 in 4er-Gruppen aufgeteilt 0000 0011 0000 0111 und die 
dann als hex aufgeschrieben, also 0307 ist auch im Kopf in beide 
Richtungen kein Problem.
0000001100000111 in dezimal 775 ist ohne Aufwand schon schwierig.

Gruß aus Berlin
Michael
Beitrag #6130605 wurde von einem Moderator gelöscht.
Beitrag #6130612 wurde von einem Moderator gelöscht.
Beitrag #6130614 wurde von einem Moderator gelöscht.
Beitrag #6130617 wurde von einem Moderator gelöscht.
Beitrag #6130618 wurde von einem Moderator gelöscht.
Beitrag #6130623 wurde von einem Moderator gelöscht.
Beitrag #6130624 wurde von einem Moderator gelöscht.
Beitrag #6130626 wurde von einem Moderator gelöscht.
Beitrag #6130649 wurde von einem Moderator gelöscht.
Beitrag #6130650 wurde von einem Moderator gelöscht.
Beitrag #6130656 wurde von einem Moderator gelöscht.
Beitrag #6130685 wurde von einem Moderator gelöscht.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.