# Hilfe bei Assembler



## Kirby.exe (4. Dez 2019)

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:


----------



## httpdigest (4. Dez 2019)

Ohne Immediates zu laden geht Negieren eines Zweierkomplement-Integers mit dem gegebenen Befehlssatz z.B. so:

```
; 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
```


----------



## Kirby.exe (4. Dez 2019)

Dankeschön  Ich probiere mal ein bisschen rum


----------



## Kirby.exe (4. Dez 2019)

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


----------



## kneitzel (4. Dez 2019)

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


----------



## Kirby.exe (4. Dez 2019)

Achsooooo


----------



## Kirby.exe (4. Dez 2019)

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


----------



## httpdigest (4. Dez 2019)

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


----------



## Meniskusschaden (4. Dez 2019)

Kirby_Sike hat gesagt.:


> ich dachte in R0 ist die -1?


Nach dem ersten Schritt ist dort -1. Aber nach dem zweiten Schritt nicht mehr. Dann ist dort der invertierte Inhalt von R1.


----------



## Kirby.exe (4. Dez 2019)

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


----------



## httpdigest (4. Dez 2019)

Kirby_Sike hat gesagt.:


> ist es normal dass der Code eine Endless Loop ist?


Ist er nicht. Er enthält keinerlei Sprunganweisungen.

Würdest du den folgenden Java-Code auch als "Endlosschleife" bezeichnen?:

```
int a = ...; // <- irgendwas
a = (a ^ -1) + 1; // <- Endlosschleife!
```


----------



## Kirby.exe (4. Dez 2019)

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


----------



## httpdigest (4. Dez 2019)

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.exe (4. Dez 2019)

Ich probiere es mal eben aus


----------



## Kirby.exe (4. Dez 2019)

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


----------

