-
21.02.12 13:08 #1
Mitglied Gold
- Registriert seit
- Feb 2011
- Beiträge
- 199
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.
Var bleibt aber negativ. Die Idee war ohne Vorzeichen mit eins multiplizieren, wodurch die Zahl entweder positiv bleibt oder wird.Code asm:1 2 3 4
mov ax, word [Var] mov bx, 1 mul bx mov word [Var], ax
Weiß jemand, warum der Code nicht funktioniert, oder hat einen anderen Lösungsvorschlag?
Danke im Voraus.
-
21.02.12 13:22 #2
Mitglied Diamant
- Registriert seit
- Jun 2005
- Beiträge
- 8.560
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
21.02.12 13:37 #3
Mitglied Gold
- Registriert seit
- Feb 2011
- Beiträge
- 199
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.
-
21.02.12 13:50 #4
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Über eine gute Bewertung freut sich jeder ;)
Bitte erledigte Threads als "Erledigt" markieren.
"Though a program be but three lines long, someday it will have to be maintained.''
-- Geoffrey James, "The Tao of Programming"
-
21.02.12 13:58 #5
Mitglied Diamant
- Registriert seit
- Jun 2005
- Beiträge
- 8.560
Stichwort Bitoperationen.
Wie werden denn bei dir überhaupt neg./pos. Zahlen repräsentiert? Zweierkomplement? Dann müßtest du doch das MSB testen und dann umrechnen.
https://de.wikipedia.org/wiki/Nullelement
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
21.02.12 14:35 #6
Mitglied Gold
- Registriert seit
- Feb 2011
- Beiträge
- 199
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?
-
21.02.12 14:42 #7
Hi,
hier mal ein paar Beispiele, wie Zahlen auf Bitebene in einem Byte aussehen:
Code :1 2 3 4 5
-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 asm:1 2 3
; In EAX ist die Zahl XOR EAX, -1 INC EAX
Grüße,
BKÜber eine gute Bewertung freut sich jeder ;)
Bitte erledigte Threads als "Erledigt" markieren.
"Though a program be but three lines long, someday it will have to be maintained.''
-- Geoffrey James, "The Tao of Programming"
-
21.02.12 15:19 #8
Mitglied Gold
- Registriert seit
- Feb 2011
- Beiträge
- 199
Danke, wie wird denn zwischen 255 und -1 unterschieden?
-
21.02.12 15:24 #9
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.
Ich mag:
- positive Bewertungen meiner Beiträge
- ein Danke für meine hilfreichen Beiträge
Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX
... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.
-
21.02.12 15:34 #10
Mitglied Gold
- Registriert seit
- Feb 2011
- Beiträge
- 199
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?
-
21.02.12 15:38 #11
Mitglied Diamant
- Registriert seit
- Jun 2005
- Beiträge
- 8.560
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
21.02.12 15:50 #12
Nur um noch einmal grundlegene Mathematik hier rein zu bringen...
1*1 = 1
(-1) * 1 = 1 * (-1) = -1
(-1) * (-1) = +1Tutorials.de Blog: Stacks und Queues
Wie wird Dir schneller geholfen?
*Bitte nur den Codeausschnitt posten. Keiner mag sich durch hunderte Zeilen Code wühlen.
*Code in Tags setzen, dadurch aktiviert man Syntaxhighlighting. [php][/php] [java][/java]...
*Code formatieren! Einrücken und Absätze machen erhöhen die Lesbarkeit ungemein, nicht nur für uns, auch für Dich
*Den Fehler klar beschreiben. Mit "funktioniert nicht" weiß keiner was anzufangen.
-
21.02.12 15:56 #13
Mitglied Gold
- Registriert seit
- Feb 2011
- Beiträge
- 199
@timestamp
Das ist klar, aber was hat das mit meinem Problem zu tun?
EDIT:
@deepthroat
Das bedeutet, es gibt keine Möglichkeit die Zahl ohne Abfrage zuvor, positiv zu machen?Geändert von üäpöol (21.02.12 um 15:58 Uhr)
-
22.02.12 08:53 #14
Mitglied Diamant
- Registriert seit
- Jun 2005
- Beiträge
- 8.560
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
22.02.12 12:11 #15
Mitglied Gold
- Registriert seit
- Feb 2011
- Beiträge
- 199
Ich dachte mul multipliziert ohne Vorzeichen, oder?
Ähnliche Themen
-
wie kann man mit inline assembler so eine art kernel erkenner machen, so dass der ...
Von TheComputaNerd im Forum C/C++Antworten: 10Letzter Beitrag: 12.03.11, 12:16 -
3ds MAX Positiv-, in Negativform
Von mahle im Forum 3D Studio MaxAntworten: 2Letzter Beitrag: 02.11.09, 23:00 -
aus zahl zeit machen
Von Windhund im Forum PHPAntworten: 2Letzter Beitrag: 05.08.08, 19:27 -
Aus zahl,zahl einen float-Wert machen
Von metacortex im Forum JavaAntworten: 8Letzter Beitrag: 06.07.04, 16:11 -
Wenn Zahl negativ == Dann positiv?
Von daDom im Forum Visual Basic 6.0Antworten: 15Letzter Beitrag: 02.04.04, 20:13


5Danke

Zitieren
Denk nochmal drüber nach... Stichwort "neutrales Element", Multiplikation, natürliche Zahlen...
Login