Hilfe bei Assembler

Diskutiere Hilfe bei Assembler im Hausaufgaben Bereich.
Kirby_Sike

Kirby_Sike

Könnte mir jemand einen Tipp geben wie man in Assembler eine Zahl negiert ohne befehle wie sub oder neg. Ich hatte mir überlegt die Zahl mit -1 zu multiplizieren, dass problem ist aus der Documentation die wir zu dem Assembler von der Uni bekommen haben, werde ich nicht schlau :( vielleicht sehe ich einfach den Wald vor lauter Bäumen nicht :)

Ich schicke hier einfach mal die Command Liste als Screenshot:

12700
 
H

httpdigest

Ohne Immediates zu laden geht Negieren eines Zweierkomplement-Integers mit dem gegebenen Befehlssatz z.B. so:
Code:
; R1 enthält die zu negierende Nummer
xnor R0 R0 R0 ; produziere -1 in R0 (unabhängig vom aktuellen Inhalt von R0)
; Berechne: (R1 ^ -1) + 1
xor  R1 R0 R0 ; R0 = R1 ^ -1
addi R0 R1 1  ; R1 = R0 + 1
; Ergebnis in R1
 
Zuletzt bearbeitet:
Kirby_Sike

Kirby_Sike

Ich habe eine Frage, da ich gerade etwas überfordert bin xD Wie produziere ich eine -1? also im Zweierkomplement wäre -1 ja : 11111111
 
J

JustNobody

Httpdigest hat doch eine -1 mit dem ersten Befehl erzeugt.
 
Kirby_Sike

Kirby_Sike

Könntet ihr mir vielleicht nochmal erklären warum man dann 1 auf register 0 addiert? ich dachte in R0 ist die -1? Ich habe das gefühl, dass ich den Wald vor lauter Bäumen nicht sehe xD
 
H

httpdigest

Die grundlegende Idee ist, dass: `-a` dasselbe ist wie `(a XOR -1) + 1`
 
Kirby_Sike

Kirby_Sike

Ahhh jetzt hab ich es verstanden :) ist es normal dass der Code eine Endless Loop ist?
 
Kirby_Sike

Kirby_Sike

Würde ich nicht nein :) Meine "wunderschöne" Testumgebung für den Code fragt mich nämlich jedes mal beim Ausführen ob ich den Vorgang abbrechen möchte, da es angeblich eine endless loop wäre
 
H

httpdigest

Möglicherweise hat diese ominöse Architektur ja Restriktionen, was die Verwendung von gleichen Registern in Instruktionen angeht. Eventuell kann man dort nicht aus demselben Register lesen wie schreiben.
Du kannst ja eventuell einfach mal ein paar Register umlabeln/umbenennen, bzw. neue temporäre Register einführen/nutzen.
 
Kirby_Sike

Kirby_Sike

Also ich habe einfach unten an den Code Syscall hinzugefügt, jetzt beschwert er sich nicht mehr :)
 
Thema: 

Hilfe bei Assembler

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben