Assembler Zahl positiv machen

üäpöol

Erfahrenes Mitglied
Hi,

ich hab ein kleines Problem mit Assembler. Ich habe eine Variable, die entweder positiv oder negativ ist. Wenn sie negativ ist, soll die Zahl positiv gemacht werden. Ich möchte das ganze aber ohne Abfrage machen.
Ich habe folgendes versucht, was aber an der Variable nichts ändert.
Code:
mov ax, word [Var]
mov bx, 1
mul bx
mov word [Var], ax
Var bleibt aber negativ. Die Idee war ohne Vorzeichen mit eins multiplizieren, wodurch die Zahl entweder positiv bleibt oder wird.
Weiß jemand, warum der Code nicht funktioniert, oder hat einen anderen Lösungsvorschlag?

Danke im Voraus. :)
 

üäpöol

Erfahrenes Mitglied
Hi,

ist ja schön, wenn ich dich zum Lachen bringen konnte. :)
Ich bin leider blutiger Anfänger mit Assembler und verstehe leider nicht ganz, wie ich ein Vorzeichenbit setzen kann und was du mit neutrales Element meinst. :D
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hi,

Das Thema wird zum Beispiel hier erklärt.
Abstrakt gesagt musst du eigentlich nur alle Bits in dem Byte umdrehen, bin mir aber auch nicht mehr sicher.

Gruß,
BK
 

deepthroat

Erfahrenes Mitglied

üäpöol

Erfahrenes Mitglied
Tut mir Leid, wenn ich euch auf die Nerven gehe, aber ich bin wie gesagt - blutiger Anfänger... Ich weiß leider nicht mal wie negative Zahlen dargestellt werden. Wiegesagt möchte ich das mit möglichst wenig Code lösen.
Zu den Bitoperationen: Was passiert, wenn die Zahl schon positiv ist?
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hi,

hier mal ein paar Beispiele, wie Zahlen auf Bitebene in einem Byte aussehen:
Code:
  -1: 1111 1111
   1: 0000 0001
 -15: 1111 0001
 127: 0111 1111
-128: 1000 0000

Positiv machen kannst du diese, indem du die Zahl nimmst, ein exklusives Oder mit -1 (alle bits gesetzt)
machst und anschließend noch +1 rechnest.

Da meine ASM-Kenntnisse nicht gerade die Besten sind, folgende Angaben ohne Gewähr:
Code:
; In EAX ist die Zahl
XOR EAX, -1
INC EAX

Grüße,
BK
 

Parantatatam

mag Cookies & Kekse
Ganz einfach: wenn das erste Bit eine 1 ist, dann ist die Zahl negativ, ansonsten positiv. Deshalb gibt es keine 255. Der Wertebereich ist also –128 bis 127.
 

üäpöol

Erfahrenes Mitglied
OK. Jetzt versteh ich's. :) Das bedeutet, ich muss das erste byte der Variable/Register nur auf 0 setzten. Kann mir jemand sagen, wie man ein einzelnes byte setzt?