Warum ist jede Adresse in einem Mikrocontroller nur 8 Bit groß?

Ich habe gesehen, dass in einem 32-Bit-Mikrocontroller jede Speicheradresse nur 8 Datenbits enthält. Dasselbe gilt auch für einen 16-Bit-MC. Für 32-Bit-Daten wird eine Kombination aus 4 Adressen verwendet. Warum kann eine Adresse nicht direkt 32-Bit-Daten enthalten (wodurch sie 32 Bit oder jeweils 16 anstelle von 8 enthält)?

Es hängt vom Datenbus des Mikrocontrollers ab. Welcher 32-Bit-Mikrocontroller hat Byte-Speicher? Haben Sie ein Beispiel?
Nuc220V3EAN Cortex M0. Angenommen, die Speicheradresse 0x00 kann 1 Byte Daten enthalten. in der 32-Bit-MC-Adresse 0x00–0x03 wird verwendet, um 32-Bit-Daten zu speichern. Warum kann 0x00 selbst nicht 32 Bit breit sein?
Hast du einen Link zum Datenblatt? Google hat keine Suchergebnisse zurückgegeben
Einfach nicht wahr, weshalb Programmiersprachen wie C und C++ die Möglichkeit beinhalten, dass ein Byte größer als 8 Bit sein kann. Es ist nur so, dass die Mehrheit am besten mit 8-Bit-Bytes funktioniert, aber 9-Bit oder 18-Bit sind da draußen.
@Swanand Die Motorola MC68008-Version des 68000-Mikroprozessors aus den 1980er Jahren hatte interne 32-Bit-Register, aber einen externen 8-Bit-Bus. Der National Semiconductors NS32008 war ein ähnliches Biest. Diese waren für kostengünstige Systeme gedacht, bei denen das Verdoppeln oder Vervierfachen der Anzahl der für den Bus erforderlichen Pins, der Anzahl teurer Speichergeräte und des Platzes auf der Platine als wichtig erachtet wurde.
Es ist wie Schokoriegel. Sie machen sie immer kleiner für den gleichen Preis.
Kann diese Frage umformuliert werden "Warum sind alle Adressen auf 8 Bit ausgerichtet"?
@FlorianCastellane Das. Die Adressen sind nicht 8 Bit groß (es sei denn, Sie finden ein Gerät mit < 256 Bit Speicher, dann könnten sie es sein).
@ArunCheriyan Was lässt Sie glauben, dass 0x00 "selbst" nicht 32 Bit breit ist? Tatsächlich hat es keine spezifische Breite. Auf vielen Plattformen können Sie einen 8-Bit-Wert, einen 16-Bit-Wert, einen 32-Bit-Wert oder einen 64-Bit-Wert von Adresse 0x00 lesen.
@jayjay Meinst du <256 Worte der Erinnerung?

Antworten (9)

Dies ist effektiv eine Designentscheidung, es gibt keinen zwingenden Grund, warum dies so sein muss. Früher, als Massenprozessoren mit 8-Bit-Werten arbeiteten, war das Mapping konsistenter 1:1. Aus Gründen der Konsistenz war es bei der Weiterentwicklung der Designs zu modernen 32- und 64-Bit-Prozessoren sinnvoll, die ältere Zuordnung der Byte-Adressierung beizubehalten, obwohl die Datenbusse zunahmen (mit einem sich ändernden Kompromiss bei den Implementierungskosten). Einige 32-Bit-MCUs implementieren möglicherweise immer noch nur 16-Bit-Datenbusse zu einigen Speichern, High-End-Prozessoren haben 256 Bit oder mehr und sind in der Lage, mehrere Kernregister in einer einzigen Speichertransaktion zu laden. Breite Schnittstellen eignen sich gut für Burst- oder Streaming-Operationen.

Die kleine adressierbare Speichergröße ist nicht nur nützlich, wenn Bytewerte im Code verarbeitet werden, sondern auch, um mit Strukturen im Speicher wie Ethernet-Paketen zu arbeiten, bei denen bestimmte Bytes gelesen oder geändert werden müssen. Häufig muss diese Art von Operation in der Lage sein, kleine Operationen aber sehr effizient durchzuführen.

Es gibt auch Szenarien, in denen mit Big-Endian-, Little-Endian- oder Mixed-Endian-Daten gearbeitet werden muss. Jetzt gibt es dafür oft dedizierte Hardwareunterstützung, aber auch hier macht die Byte-Adressierung des Speichers diese Art von Operation in einigen Szenarien effizienter.

Es ist ziemlich neu, dass die Anzahl der Adressbits in einem Register ein begrenzender Faktor für den Adressraum war, so dass die Verschwendung von 2 Bits für Adressbytes anstelle von 32-Bit-Wörtern vor 10-15 Jahren kein großes Problem gewesen wäre (und jetzt mit 64-Bit-Zeigern, es ist üblich, 48 oder 56 Bit breite Byte-Adressen zu implementieren). Der einführende Informatikunterricht steckt noch ein wenig im Just-Post-Mainframe-Zeitalter fest und geht nicht immer sehr klar auf die Evolutionsaspekte ein. Zu der Zeit, als kostengünstige Architekturen mit geringem Volumen (im allgemeinsten Sinne) begannen, durch ressourcenbeschränktere und stärker auf Rohstoffe ausgerichtete Prozessordesigns ergänzt zu werden, wurde eine Menge Terminologie verwendet (und definiert).

Ich habe nicht speziell für MCUs geantwortet, die architektonischen Grenzen sind nicht so klar, wie Sie vielleicht annehmen. Sogar ein modernes MCU-Design von Grund auf hat gute Chancen, zusammen mit einem Mehrkern-Serverprozessor integriert zu werden oder nur als ein Punkt in einem skalierbaren Produktsatz zu existieren; In beiden Fällen ist ein konsistenter Ansatz für den Speicherzugriff für den Endbenutzer von Vorteil, der Code schreiben oder portieren muss.

Ich habe eine Frage zur Retrocomputing SE zu Registergrößen gestellt, um die historischen Aspekte dieser Frage zu verfolgen.

Ich denke, Prozessoren mit längeren Wortgrößen waren älter als 8-Bit-Prozessoren. Ein 8-Bit-Prozessor wäre ohne ein effizientes Mittel zum Addieren von zwei Multibyte-Zahlen ziemlich nutzlos, und frühe Prozessoren konnten Zahlen, die größer als ein einzelnes Maschinenwort sind, nicht effizient verarbeiten.
Ich habe mit 8-Bit-Prozessoren genug gearbeitet, um zu wissen, dass sie problemlos Multi-Byte-Zahlen hinzufügen können, aber nicht mit einem einzigen CPU-Befehl. Addieren Sie zuerst die beiden niedrigsten Bytes und erhalten Sie das niedrigste Ergebnisbyte und ein separates Übertragsbit. Da so viele andere Bytes vorhanden sind, addieren Sie die nächsten Eingabebytes und das Übertragsbit aus dem vorherigen Schritt, was das nächste Ausgabebyte und das nächste Übertragsbit ergibt. Wenn keine Eingangsbytes mehr übrig sind, wandeln Sie das letzte Übertragsbit in ein weiteres Ausgangsbyte um.
@ user6030: Ist es nicht üblich, eine ADC-Anweisung zu haben? AVR (ein 8-Bit-RISC-Mikrocontroller , daher muss gcc ADC für intundlong verwenden ), x86 ebenso wie ARM. Ich gehe davon aus, dass die meisten 8-Bit-CPUs dies tun würden, da es noch mehr Nachfrage danach geben würde als auf einem System mit breiteren Regs. Oh, sagt Supercat, dass frühen Prozessoren ein effizienter ADC fehlte?
Ich denke, es ist ein gültiger Punkt in Bezug auf die Entwicklung der Registergröße (obwohl mir Daten fehlen).

Es gibt einige DSPs (z. B. TI C54x), die keine Werte kleiner als 16 Bit adressieren können, und einige Audio-DSPs verwenden 24 Bit. Allerdings werden 8-Bit-Werte in so ziemlich jedem Allzweckcode verwendet, sodass alle Allzweck-CPUs sie unterstützen.

Und nur weil die kleinere Einheit, die für Speicheradressen verwendet wird, 8-Bit-Bytes sind, bedeutet das nicht, dass dies die größte Einheit wäre, die tatsächlich auf dem Bus verwendet wird; Die meisten CPUs verwenden ihre native Wortgröße (16/32 Bit) oder sogar eine größere Größe, um den Speicher zu adressieren, und extrahieren bei Verwendung von Bytezugriffen automatisch das Byte aus dem größeren Wort.

Beispielsweise verwendet der PCI-Bus immer 32-Bit-Transaktionen, hat aber Byte-Freigabesignale für den Zugriff, die kleiner sein müssen.

Danke dir. Gibt es einen MC, der ein Nibble breit ist, anstatt ein Byte im Speicher?
Vielleicht der Intel 4004?
@ArunCheriyan Ein Beispiel für eine CPU, die mit Nibbles als kleinstem adressierbarem Wort arbeitete, ist der Saturn : eine CPU, die von HP entworfen und im letzten Jahrhundert in ihren High-End-Rechnern verwendet wurde (insbesondere der bekannte HP48). Es hatte eine sehr ungewöhnliche Architektur (64-Bit-Register, 4-Bit-ALU, 20-Bit-Adressen, ...).
Ein weiteres Beispiel: Die kleinste adressierbare Einheit für den TMS320C3x von TI ist 32 Bit.
@ArunCheriyan: Es könnte Sie interessieren, sich über die Connection Machine-Reihe von Supercomputern von Thinking Machine zu informieren. Sie verwendeten 1-Bit-Mikroprozessoren (keine Mikrocontroller, da sie wie die CPU in Ihrem Laptop keine dedizierten E / A-Pins hatten). Daher konnten CMs jeweils nur ein Bit verarbeiten. Aber keine Sorge, Ihr Computer könnte bis zu 64.000 Kerne haben.
@dim: Soweit ich weiß, wurden die 4-Bit- HP-Saturn-Chips bis Mitte 2003 hergestellt und in HP-Rechnern verwendet, also (knapp) in diesem Jahrhundert.
@davidcary Oh, na ja ... Daten und Uhrzeiten waren sowieso nie meine Stärke. Fragen Sie meine Frau nach ihren Geburtstagsgeschenken und meinen Chef nach den Fristen...

Ein 16-Bit- oder 32-Bit-Mikrocontroller muss oft Daten verarbeiten, die nur 8 Bit breit sind (ein Byte). Beispielsweise werden Textzeichenfolgen normalerweise mit einem einzelnen Zeichen pro Byte gespeichert. Durch ein Speicheradressierungsschema, mit dem jedes einzelne Byte adressiert werden kann, kann der Mikrocontroller 8 Bit breite Daten effizient verarbeiten. Dies bedeutet, dass sich 32-Bit-Daten normalerweise auf Adressen befinden, die Vielfache von 4 Bytes sind, z. B. 04, 08, 0C usw. Wenn der Speicher jedoch 32 Bit breit ist, kann der Mikrocontroller 32 Bit in einem Lesezyklus lesen . Micros haben oft Maschinenbefehle, die mit Daten unterschiedlicher Länge arbeiten können, so dass Sie feststellen werden, dass ein Befehl zum Verschieben von Daten (MOV) 3 Formen haben kann, MOV.B, MOV.W und MOV.L, um 8, 16 und 32 Bit zu verschieben Daten in einer Anweisung.

Die grundlegende Antwort ist "weil so lang ein Byte ist". Bei einem großen etablierten Codebestand, der diese Annahme macht, würde das Brechen alle möglichen Probleme verursachen.

In den frühen Tagen gab es keinen etablierten Code. Prozessoren verwendeten häufig alle möglichen seltsamen Architekturen, wie andere Antworten zeigen. Als 16-Bit-Prozessoren auf den Markt kamen, gab es jedoch genug Code, vorausgesetzt, dass 8-Bit-Daten verfügbar waren, dass es ein echtes Hindernis für die Einführung gewesen wäre, dies nicht einfach zu machen.

Ein 32-Bit-Wort pro Adresse hat keinen Nachteil in der Speichergeschwindigkeit. Auf einem 32-Bit-System gehen die unteren 2 Adressbits oft nicht in den Speicher. Der Prozessor liest normalerweise das gesamte 32-Bit-Wort und wählt (oder maskiert) das 8-Bit-Byte aus, das er innerhalb dieses Wortes benötigt. Solange Ihr Adressraum genügend Daten speichern kann (begrenzt auf 2^32 Bytes bei einem 32-Bit-System), machen Sie sich keine Sorgen. Tatsächlich dauert es bei vielen 16-Bit-/32-Bit-Prozessoren länger, die Verarbeitung mit Bytewerten durchzuführen als mit Werten mit nativer Wortlänge - das Lesen eines 32-Bit-Wortes und das Verwerfen eines Teils dieses Wortes erfordert eindeutig eine zusätzliche Operation. verglichen mit dem Lesen des 32-Bit-Wortes.

Umgekehrt, wenn Sie ein System haben, bei dem Sie den Speicher effizient nutzen müssen , müssen Sie auf einzelne Bytes zugreifen können. Wenn Sie dies nicht können, wird Ihnen der Speicher ausgehen. In Anbetracht dessen ist es eindeutig notwendig, auf einzelne Bytes verweisen zu können, daher ist es sinnvoll, Ihren Speicher in Bytes aufzuteilen.

In der Tat. Und dann stellt sich die zusätzliche Frage, ob ein Prozessor die zwei unterschiedlichen Zugriffe verarbeiten kann, die zum Laden oder Speichern eines nicht ausgerichteten 32-Bit-Werts automatisch in Hardware erforderlich sind, oder ob dies explizit in Software gehandhabt werden muss.

Das nennt man Byte-adressierbaren Speicher. Normalerweise ist das eine gute Sache, es sei denn, Ihnen geht der Adressraum aus (z. B. 4 GB mit 32-Bit-Zeigern statt 16 GB mit 32-Bit-Zeigern, wobei jede Adresse ein separates 32-Bit-Wort ist).

Beachten Sie, dass der Adressraum solche Grenzen überschreiten kann, wenn Sie die Adressen in Teile aufteilen, die jeweils in ein Register passen. Ich hatte einmal einige 8-Bit-Computer, die 64 KB Speicher erreichten, indem sie die Adressen in zwei Teile aufteilten, die in separaten Registern aufbewahrt wurden, und sah Anzeigen für Computer mit ebenfalls 8-Bit-Prozessoren, die 1 MB Speicher erreichen konnten, indem sie die Adressen in drei aufteilten Teile.
AVR (8-Bit-RISC-Mikrocontroller) macht das: Drei Paare der 32 Allzweck-8-Bit-Register können als 16-Bit-Zeiger dereferenziert werden. Es gibt auch eine Möglichkeit, dies mit einem anderen 8-Bit-Segment zu kombinieren, um 24-Bit-Adressen zu erhalten.

Die 32-Bit-DSPs von Analog Devices Shark haben 32 Bit als kleinste Einheit des adressierbaren Speichers, also sizeof (int) == sizeof (short) == sizeof (char) == 1 (Ja, sie haben 32-Bit-Zeichen, vollkommen gültig pro die C-Norm).

Auch Dinge wie int_8, int_16 und dergleichen sind nicht in definiert, eine böse Überraschung beim Portieren von Code von anderen Plattformen.

Wahrscheinlich schon in den anderen Antworten auf verschiedene Arten gesagt. Im Allgemeinen ist heute, aber nicht unbedingt historisch, ein Byte 8 Bit. Meistens beschäftigen wir uns mit "Byte-adressierbarem Speicher", was bedeutet, dass das KLEINSTE, auf das wir mit einer einzigen Adresse zugreifen können, ein Byte ist. Aber das bedeutet nicht, dass dies das EINZIGE ist, was wir ansprechen können. Je nach Plattform kann mit einer einzigen Adresse auf ein Byte, ein Halbwort/Wort (16 Bit), ein Wort/Doppelwort (32 Bit) usw. auf 64 Bit zugegriffen werden. Die Anweisung bestimmt im Grunde, wie groß der gewünschte Zugriff ist (8,16,32,64 usw.), normalerweise in diesen Einheiten 8, 16, 32, 64. Aber das ist nicht schwer und schnell, "es kommt darauf an".

Auch je nach Auslegung des Prozessors und/oder Systems gibt es keinen Grund anzunehmen, dass die Größe des Zugriffs die Größe des Speichers oder die Größe des kleinsten Zugriffs ist. Bei immer größeren Anforderungen macht es mit der Zeit immer weniger Sinn, das Speichersystem tatsächlich mit der kleinsten Größe zu implementieren, der Computer, auf dem Sie dies lesen, verwendet wahrscheinlich einen 32 Bit breiten Datenbus oder einen 64 Bit breiten Datenbus für alle Zugriffe, Sie ein Byte lesen möchte, macht es einen 64-Bit-Lesevorgang und wirft die restlichen Bits weg, warum es nichts extra kostet, halten Sie den Bus so breit bis in die Nähe des Prozessorkerns und der Prozessor wählt die richtige Byte-Spur aus. kostet mehr Logik und/oder Takte, um den Bus schmaler zu machen oder die Bytes in den Byte-Lanes herumzuschieben (wird manchmal gemacht). So können interne RAMs in einem Mikrocontroller beispielsweise 32 Bit breit sein, wenn dies für das System sinnvoll ist. könnte 16 sein. Ja, für Schreibvorgänge brennen Sie mehr Zyklen, Sie müssen irgendwo auf der Linie lesen, ändern und schreiben. Wenn Sie ein einzelnes Byte auf Ihren PC schreiben möchten, findet irgendwo ein 64-Bit-Lesevorgang statt, und dann wird irgendwo ein Byte dieser 64 Bits geändert, je nachdem, was Sie danach tun, dass die 64 Bits möglicherweise nur mit diesen 8 Bits wieder in den DRAM gehen Anders als vorher machen Caching und Ihr Code dies jedoch nicht zu einer allgemeinen Regel. Schreibvorgänge sind Feuer und Vergessen, der Speichercontroller kann jedoch die Adresse und Daten vom Prozessor sammeln und dem Prozessor ermöglichen, weiterzulaufen, während er schließlich das Schreiben durchführt, um Takte zu sparen, möglicherweise mehr Takte, die in einem Lese-Änderungs-Schreibvorgang (falls vorhanden) verbrannt werden bereits im Cache),

Es gibt auch heute noch Ausnahmen von so ziemlich allem, es gibt vielleicht Anweisungen oder Zugriffstypen in einigen Systemen, die bitadressierbar sind, es gibt einige Systeme, bei denen die Adresse in Einheiten von etwas anderem als einem Byte ist. Ein Byte war nicht immer 8 Bit und vielleicht laufen noch Systeme, auf denen das stimmt (wir haben früher Oktal verwendet, und ein 9-Bit-Byte, 18- oder 36-Bit-Wort ist sehr sinnvoll für menschliche Programmierer und Chipdesigner, die Oktal denken, an 8 Bit macht für Hexadezimal-Denker sehr viel Sinn).

Nun, der Computer, auf dem Sie dies lesen, obwohl der Datenbus für diesen DRAM-Controller möglicherweise 32 oder 64 Bit breit ist, besteht das eigentliche DRAM-Modul selbst wahrscheinlich aus mehreren 8 Bit breiten Teilen, die Sie leicht sehen können. Wenn es 8 oder 9 Chips auf einer Seite hat, ist es wahrscheinlich ein 64 Bit oder 72 Bit (64 Bit plus 8 Bit ECC) breiter Bus, der mit 8 Bit breiten Teilen implementiert ist. Wenn Sie 4 oder 5 Chips auf einer Seite des Moduls haben, aber immer noch Tonnen von Pins haben, dann ist es entweder 32 Bit breit (heutzutage unwahrscheinlich) oder 4 der Chips sind 16 Bit breit und wenn es einen 5. gibt, kann es sein 16 Bit breit sein und nur 8 verwendet werden, oder es ist ein 8 Bit breiter Teil. Es gibt auch 32 Bit breite Teile, aber 8 Bit Breite ist am gebräuchlichsten. Eine sehr verbreitete Praxis, die weit zurückreicht.

Wir müssten wissen, welcher Mikrocontroller. Da Sie 32 Bit erwähnen, ist es ziemlich wahrscheinlich (ohne detaillierte Informationen, obwohl wir es nicht sagen können), dass der Speicher in diesem Teil 32 Bit breit ist und alle Zugriffe darauf 32 Bit breit sind. Die Anweisungen würden wahrscheinlich bestimmen, was das Programm will, das wahrscheinlich einen 8-Bit-, 16-Bit- und 32-Bit-Zugriffstyp bietet, die kleineren beim Schreiben würden irgendwo ein Lesen-Ändern-Schreiben erfordern, beim Lesen ignorieren Sie einfach Byte-Lanes. Gleiches gilt für den Flash, obwohl Flash-Schreibvorgänge ein anderes Thema sind. Aber der interne Flash ist höchstwahrscheinlich 32 Bit breit und alle Lesevorgänge erfolgen in Einheiten von 32 Bit. Ein externer Flash, das ist eine andere Geschichte, höchstwahrscheinlich sind sie ein Bit breit (spi oder i2c), obwohl Spi-Teile manchmal 1, 2 oder 4 Bit unterstützen können, aber ein Miso-Pin ist am häufigsten. Intern sind sie in Einheiten von Bytes organisiert, könnte 8 Bit breit oder 16 oder 32 sein, oder wer weiß, Sie verschieben sie und adressieren sie jedoch in Einheiten von Bytes. Mit spi können Sie in einer einzigen Transaktion zwischen einem Byte und dem gesamten Speicher verschieben, abhängig vom Design des Flash-Teils.

Die Größe der adressierbaren Speichereinheit ist im Wesentlichen ein Kompromiss zwischen wie viel Speicher Sie adressieren können und wie viel Speicher Sie verschwenden.

Adressierbarer Speicher . Stellen Sie sich eine 32-Bit-CPU vor: Wenn Sie Bytes adressieren, können Sie bis zu 4 GB Speicher adressieren. Wenn Sie einzelne Bits adressieren, wird diese Menge auf 512 MB reduziert, und wenn Sie 32-Bit-Wörter adressieren, haben Sie 16 GB. (Ihre Frage scheint letzteres vorzuschlagen).

Verschwendeter Speicher . Wenn Sie eine Variable haben, die mit X Bits dargestellt werden kann, und Sie können ihr nur Einheiten von N Bits zuweisen, verschwenden Sie im Durchschnitt (N-1)/2 Bits, vorausgesetzt, X > N. Wenn Sie einzelne Bits ansprechen , verwenden Sie den Speicher mit 100% Effizienz (zumindest aus Sicht der Adressierung). Mit Bytes verschwenden Sie 3,5 Bit pro Variable (56 % Effizienz) und mit 32-Bit-Worten verschwenden Sie 15,5 Bit (52 % Effizienz). Aber es kommt noch schlimmer: Wenn die meisten Ihrer Variablen klein sind (denken Sie an Zeichen, boolesche Werte, Status-Flags), verschwenden Sie am Ende den größten Teil des Speichers, wenn Ihre adressierbaren Einheiten zu groß sind.

Nehmen wir beispielsweise an, die durchschnittliche Größe einer Variablen beträgt 8 Bit.

  • Auf einem bitadressierbaren Computer können Sie mit 100% Effizienz zuweisen, was Ihnen 512*1024*1024*100%= 0,54 Milliarden Variablen gibt.
  • Auf einem Byte-adressierbaren Computer werden Sie mit 56% Effizienz zuweisen, was Ihnen 4096*1024*1024*56%= 2,4 Milliarden Variablen ergibt. Das ist fast 5 Mal so viel im Vergleich zu einem bitadressierbaren Computer! Natürlich müssen Sie 8-mal mehr Speicher kaufen.
  • Auf einem 32-Bit-adressierbaren Computer werden sie, da mindestens die Hälfte Ihrer Variablen weniger als 8 Bits belegen, mit einer Effizienz von weniger als 7 % zugewiesen (unter Verwendung von 4,5 Bits von 32). In jedem Fall erhalten Sie nicht mehr als 4,3 Milliarden Variablen (da Sie nur so viele verschiedene Adressen haben) und in Wirklichkeit weniger. Wenn Sie komplexe Berechnungen vermeiden, erhalten Sie im Vergleich zu einem byteadressierbaren Computer möglicherweise 20 bis 30% mehr nützlichen Speicherplatz, während Sie den vierfachen Preis für den Arbeitsspeicher zahlen.

Sie können auch 1-Bit-Prozessoren bekommen!

Die Datenbreite folgt der Breite des Registers (Akkumulator). Dies ist normalerweise die "Prozessorbreite", während der Adressbus unterschiedlich sein kann (normalerweise breiter), aber je nach Verwendung technisch schmaler sein kann.

8 ist natürlich eine Zweierpotenzzahl. Wir haben die allgegenwärtige Verwendung von 8 Bit der Geschichte zu verdanken - und die KOSTEN/Fähigkeiten der Technologie. Lange Zeit herrschten 8 Bits, was teilweise auf die Breite der Busse und die Schwierigkeit zurückzuführen ist, Register (und RAM) breiter als 8 Bit zu machen (kein Sinn in 16-Bit-Daten, wenn Ihre Register alle 8 Bit sind). 8 Bits sind ziemlich raffiniert und machen in Hex sehr viel Sinn. 8 Bits können Ihr Alphabet, Zahlen, Zeichen- und Steuerzeichen (ASCII) oder 0 bis 255 oder +-127 enthalten. Der Zugriff auf mehr als 256 Datenbytes (8-Bit-Adressbus) ist mit Paging einfach. Wählen Sie die Seite und dann das Byte aus, z 256 Seiten von 256 bringen Sie auf 64K (65536). Normalerweise wäre Seite Null ein Notizblock, da der Zugriff schneller wäre, da dies nicht erforderlich wäre, um die Seite festzulegen. Mein erster Computer hatte 1k x 8 Bit statischen RAM! (dynamisches RAM war billiger, brauchte aber mehr Hardware, um es zu aktualisieren). Mit ein paar Flags (c, nc, z, nz), addieren, subtrahieren, nach links und rechts drehen, können Sie auf einer 8-Bit-Maschine ziemlich komplexe Berechnungen durchführen. Sie brauchen kein Fließkomma-Rechenwerk! Nicht superschnell, aber machbar! Viele frühe Prozessoren konnten Single-Step-Prozessoren sein, und die Verwendung mit einfachem statischem RAM machte das Debuggen wirklich einfach. Wenn Sie einige Oktalpuffer und frühe rote LEDs hinzufügen, können Sie beobachten, wie sich die Adress- und Datenbusse ändern :)