Assembler – die besten Beiträge

Wie erweitere ich einen Eintaktprozessor richtig?

Gehen wir davon aus, dass wir einen Eintaktprozessor haben. Nun soll der Eintaktprozessor so erweitert werden, dass er nach der Erweiterung auch einen neuen bestimmten Befehl ebenfalls ausführen kann. Dafür muss ich verstehen, wie all diese Komponenten zusammenhängen, um genau zu wissen, wo ich meinen neuen "Baustein" für den neuen Befehl hinzufügen kann.

Zum Beispiel kann dieser Eintaktprozessor die "add"-Operation ausführen, da er über Register-Dateien, einen Addierer, eine ALU, einen Multiplexer usw. verfügt. Da der Datenpfad für die "add"-Operation, die Operanden von den Registern zum Addierer leitet, das Ergebnis durch die ALU berechnet, und schließlich das Ergebnis in das Zielregister zurückführt...

Nun habe ich eine Beispiel-Aufgabe mit einer Lösung, bin mir aber unsicher, wie man zu dieser Lösung gelangt. Könnte mir jemand das erklären?

In dieser Aufgabe sollen Sie den dargestellten MIPS-Eintaktprozessor erweitern, sodass der neue Befehl Read Word Until Zero (rwuz) unterstützt wird. Der abgebildete Prozessor unterscheidet sich leicht von dem Ihnen bekannten Eintaktprozessor.
rwuz unterscheidet sich von anderen MIPS-Befehlen dadurch, dass er von dem Prozessor automatisch mehrfach ausgeführt werden soll, solange das gelesene Datenwort nicht null war.
rwuz soll ein Befehl im I-Format sein.
Für rwuz soll der Opcode 0x11 verwendet werden.
Der Direktoperand (immediate) soll zu dem rs-Register hinzuaddiert werden. Das Ergebnis dieser Operation soll im rt-Register gespeichert werden.
Das rt-Register soll gleichzeitig als Adresse für einen Lesezugriff auf den Datenspeicher verwendet werden.
Solange der gelesene Wert aus dem Speicher nicht null ist, soll der selbe rwuz-Befehl im nächsten Taktzyklus erneut ausgeführt werden (PC bleibt gleich). Falls der gelesene Datenwert null ist, soll die nächste Instruktion ausgeführt werden (PC um 4 erhöhen).
Das aus dem Speicher gelesene Datenwort soll nicht in einem Register abgelegt werden.
Tipp: Das Signal rZero zeigt an, ob das aus dem Speicher gelesene Datenwort null ist

Selbst wenn niemand in der Lage ist, mir dies genau zu erklären, kann mir jemand Quellen, Videos oder Bücher empfehlen, damit ich ein besseres Verständnis dafür entwickeln kann?

Bild zum Beitrag
CPU, Prozessor, Hardware, Assembler, Informatik, Universität, Rechnerarchitektur

Warum gibt es nichts anderes als JavaScript im Browser Frontend?

Es gibt Dart-Flutter, C#-Blazor soweit ich weiß, aber ich nehme an, es ist nur JavaScript unter der Haube.

Ähnlich wie, wenn man React Native Code schreibt, wird es in die native mobile Sprache umgewandelt => Kotlin, Swift etc..

Weil soweit ich weiß, versteht der Browser nichts anderes als HTML, CSS und JavaScript.

Es gibt da nur die V8-Engine / andere JavaScript-Engines.

Aber warum?

Wieso ist es nicht theoretisch möglich, einfach mit einer neuen Sprache die für cross platform entwickelt wurde, einen onclick-Event Listener zu nutzen?

In einer ganz eigenen Engine.

Heißt nicht, das sie JavaScript irgendetwas die nächsten 5 Jahre streitig machen könnte, aber wenn diese Sprache direkt Typisierung unterstützen würde, ohne TypeScript und auch noch für andere Dinge besser geeignet wäre als JavaScript (wurde halt nicht dafür designed, ganz egal ob Electron, Native existiert) wie Desktopanwendungen, Mobil, etc..

PHP nehme ich erst garnicht auf, das macht alleine gar nichts im Frontend, ist eine Backendsprache und alleine sinnlos auf Websites, bis auf bisschen HTML generieren, das auch nur vom Server kommt.

Klar, wenn du ewig lange Weiterleitungen willst, die furchtbar sind und überhaupt nicht interaktive Websites, dich auf Formulare beschränkst, dann kriegst du das auch ohne JavaScript hin, etwas Schreckliches zu programmieren.

Mit WebAssembly kenne ich mich gar nicht aus. Ob da Event Listener, usw. möglich sind. Aber alleine von der Einstiegshürde und Komplexität die ich höre, ist das keine Alternative.

Assembly ist auch keine Alternative zu C++. Dafür gibt es Rust.

Browser, App, HTML, Webseite, JavaScript, HTML5, Assembler, Informatik, Programmiersprache, Softwareentwicklung, Webentwickler, Webentwicklung, Anwendungsentwickler, React Native

Division in Assembly. Zeichen sind in ASCII gespeichert?

section .text
global main

main:
  mov esi, 10           ; ESI holds current number
  mov eax, 0           ; EAX holds sum of numbers
  push 10             ; Line feed for end of line (Stack is first in, last out -> Line feed will be last char)
  mov edi, 10           ; Divisor of 10 for seperating digits of number (used in divisionLoop)



; Sum numbers 1 through 10
sumLoop:
  add eax, esi          ; Add number to sum
  dec esi             ; Next number
  jnz sumLoop           ; Loop until 0



; Seperate eax into its digits, by dividing by 10 multiple times,
; where in each division the remainder will be a single digit 
; and the quotient will be the remaining digits used as dividend in next loop run
divisionLoop:
  mov edx, 0           ; Make sure edx is empty, as it is used as upper half of dividend
  div edi             ; Divide eax by edi (= 10) => quotient is in eax (= Rest of digits for next loop), remainder in edx (= Single digit)
  add edx, 48           ; Make edx (digit) a char representing its value by adding '0' to it
  push edx            ; Push char to stack for usage in print later

  cmp eax, 0           ; Loop until quotient is 0 (=> no more digits left)
  jne divisionLoop



; Print digits from Stack one by one
printLoop:
  mov eax, 4
  mov ebx, 1
  mov ecx, esp          ; Print top of stack (esp always points to top of stack)
  mov edx, 1           ; Length of 1 byte (= 1 char)
  int 80h

  pop esi             ; Remove top of stack
  cmp esi, 10           ; Loop until Line feed is reached
  jne printLoop


exit:
  mov eax, 1
  mov ebx, 0           ; Exit code 0
  int 80h

Hallo,

hier steht ein Programm in Assembler, dass die Zahlen von 1 bis 10 addiert.

Die 55 durch 10 teilt und die Reste der Division dann in einem Stack speichert.

push....

Am Ende wird alles über den Standardkanal ausgegeben auf der Konsole.

Wenn ich 55 / 10 teile ergibt das Quotient 5 steht in Register eax und der Rest hier auch 5 in edx Register. Bevor ich jetzt den Rest auf den Stack lege wird die Zahl mit 48 addiert. ergbit 53 ist das char Zeichen 5 im ASCII Code.

Heißt das jetzt, dass die Ergebnisse bei einer ganzzahligen Division im Assembler-Code immer in ASCII-Zeichen gespeichert sind?

Computer, Mathematik, Java, Assembler, Informatik, Programmiersprache

Programm dass Subtrahieren soll durch Addition?

Hallo Leute heute eine etwas untypische Aufgabe:

Wir schreiben das Jahr 2042. Nach einer extremen Verschärfung der Finanzkrise können die Universitäten nur noch sehr preiswerte Rechner anschaffen. Zum Glück hat der führende Prozessorhersteller Inrola gerade einen neuen Chip namens Untium auf den Markt gebracht. Dieser Chip ist so preiswert, weil er nur noch genau eine Instruktion hat nämlich „subtract-and-branch-on-less-zero“. Dieser Befehl hat vier Parameter, Quelle 1 (Q1), Quelle 2 (Q2), Zielregister (ZR) und Sprungadresse (SA). Wird der Befehl aufgerufen, berechnet er Q1 − Q2, schreibt das Ergebnis in ZR und springt dann nach SA, wenn das Ergebnis, das er in ZR geschrieben hat, kleiner als 0 ist (sonst folgt die Bearbeitung des Befehls in der folgenden Zeile). Der Untium-Prozessor verfügt über 6 Ganzzahlregister, $1 bis $6. Als Quelle kann entweder ein Register oder eine ganzzahlige Konstante angegeben werden, ZR ist immer ein Register. SA gibt die Nummer des Befehls an, zu dem eventuell gesprungen werden soll.Als Studierende kommt Ihnen die Ehre zuteil, den ersten Rechner dieses Typs, den SPOZ-I zu testen. Da zu einem so frühen Zeitpunkt noch keine Compiler zur Verfügung stehen, müssen sie den 1-Befehl-Assembler benutzen. Ein Assemblerprogramm besteht aus Zeilen der Form:

Q1, Q2, ZR, SA // optional kann hier ein Kommentar stehen

Ich soll jetzt herausfinden, sie eine wie eine Addition durchgeführt werden kann. Dabei seien die Sum-

manden in den Registern $1 und $2 vorgegeben. Die Summe soll nach der Berechnung in $3 stehen. Ich bin da leider nicht gehirntechnisch in der Lage, die Aufgabe zu lProgramm dass Subtrahieren soll durch Additionösen...

Programm, Assembler, Register

Meistgelesene Beiträge zum Thema Assembler