Wieso sind im RAM die Werte immer woanders?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

immediate: Ein konstanter Wert wird ins Register geladen. Hier kann der Wert Teil des Befehls sein(*)

Speicher: Du möchtest ein beliebigen Wert, z.B. der zuvor aus einer Datei gelesen und dort abgelegt wurde, verwenden, dann wird die Speicheradresse angegeben (benötigt).

(*) Genau genommen ist ein Befehl sowieso mehrere Bytes lang und belegt mehrere Adressen, mitunter sogar in variabler Länge.


Pfranzy 
Beitragsersteller
 02.12.2021, 22:05

ich glaube das ich schon herausgefunden habe undzwar ist ja eine Adresse nur 8 bit groß und in wie im Video erklärt wurde , werden sogar von den 8 bit 4 bit für ein Opcode verwendet, also könnte man dann nur ein Wert von maximal 16 haben , oder?

0
KarlRanseierIII  02.12.2021, 22:10
@Pfranzy

Richtig. Wobei wie gesagt heute Opcodes oft 16Bit oder auch mehr haben.

Davon abgesehen ist es auch so, daß man Daten und PRogrammcode trennt.

0
Pfranzy 
Beitragsersteller
 26.12.2021, 13:46
@KarlRanseierIII

Und / also verstehe ich das richtig das eine RAM Adresse nur 8 Bit speichern kann und wenn der eine Befehl mehr als 8 Bit benötigt , werden dann mehrere Adressen für den Befehl "hinterlegt".

Und der Grund warum die Werte woanders stehen ist zum größten Teil der , weil halt nicht mehr genug "Platz" vorhanden ist , eine komplett Nummer da jetzt doch zu speichern .

0
Pfranzy 
Beitragsersteller
 26.12.2021, 13:46
@Pfranzy

Ups Sorry , der Kommentar sollte eigentlich schon früher gesendet werden. Naja egal.

0
KarlRanseierIII  26.12.2021, 14:48
@Pfranzy

Ja, zumindest ist die Adressierung auf Bytebene heute üblich. Das ist natürlich nicht grundlegend zwingend, prinzipiell wäre auch ein anderes Vorgehen denkbar. (z.B. immer nur 32-Bit Worte zu adressieren).

Befehlssätze haben klassisch (bei RISC insbesondere) eine fixe Wortbreite, z.B. ein 16-Bit Instructionset oder ein 32-Bit Instruction set. So wird dann eben für jede Befehl einemal die entsprechende Anzahl BYtes gelesen.

Bei x86 ist die Befehlslänge variabel, das geht hoch bis 15 Bytes.

0
Pfranzy 
Beitragsersteller
 26.12.2021, 19:14
@KarlRanseierIII

Also wenn jetzt z.b. ein Befehl so lautet:

Lade in Register A diesen Wert der an Adresse XY steht

Dann werden z.b die ersten 4 Bits für den Opcode gespeichert und die anderen 4 Bits sind dann für die Adresse wo der Wert denn überhaupt steht.

Und wenn dann die angegebene Adresse (oder auch der Opcode)eine höhere Zahl als 4 Bits hat , wird dann der Befehl um noch eine Adresse "erweitert"

(Und wiegesagt ,den Wert direkt in der ersten Adresse zu speichern ist Sinnlos , weil die Zahlen (eigentlich immer) größer als 4 Bit sind)

Sorry falls ich das schon in der Art geschrieben habe.

0
KarlRanseierIII  26.12.2021, 19:27
@Pfranzy

Japp, aber wie gesagt, in der Regel wird der Opcode schon mehr als 4 Bits haben, es sei denn Du schaust Dir sowas wie die ersten CPUs überhaupt an. (Oder vielleicht uCs).

1