Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
16
ZUGRIFFE
2272
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    üäpöol ist offline Mitglied Gold
    Registriert seit
    Feb 2011
    Beiträge
    201
    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 asm:
    1
    2
    3
    4
    
    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.
     

  2. #2
    deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.731
    Hi.
    Zitat Zitat von üäpöol Beitrag anzeigen
    Die Idee war ohne Vorzeichen mit eins multiplizieren, wodurch die Zahl entweder positiv bleibt oder wird.
    Ha, ha, ha. Selten so gelacht. Denk nochmal drüber nach... Stichwort "neutrales Element", Multiplikation, natürliche Zahlen...

    Warum setzt du denn nicht einfach das Vorzeichenbit?

    Gruß
    üäpöol bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    üäpöol ist offline Mitglied Gold
    Registriert seit
    Feb 2011
    Beiträge
    201
    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.
     

  4. #4
    Avatar von Bratkartoffel
    Bratkartoffel ist offline gebratene Kartoffel
    tutorials.de Premium-User
    Registriert seit
    Jun 2007
    Ort
    Passau (Niederbayern)
    Beiträge
    1.760
    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
    üäpöol bedankt sich. 
    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"


    Meine Projekte sind OpenSource auf Github

  5. #5
    deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.731
    Zitat Zitat von üäpöol Beitrag anzeigen
    Ich bin leider blutiger Anfänger mit Assembler und verstehe leider nicht ganz, wie ich ein Vorzeichenbit setzen kann
    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.
    Zitat Zitat von üäpöol Beitrag anzeigen
    und was du mit neutrales Element meinst.
    https://de.wikipedia.org/wiki/Nullelement

    Gruß
    üäpöol bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  6. #6
    üäpöol ist offline Mitglied Gold
    Registriert seit
    Feb 2011
    Beiträge
    201
    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?
     

  7. #7
    Avatar von Bratkartoffel
    Bratkartoffel ist offline gebratene Kartoffel
    tutorials.de Premium-User
    Registriert seit
    Jun 2007
    Ort
    Passau (Niederbayern)
    Beiträge
    1.760
    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
    üäpöol bedankt sich. 
    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"


    Meine Projekte sind OpenSource auf Github

  8. #8
    üäpöol ist offline Mitglied Gold
    Registriert seit
    Feb 2011
    Beiträge
    201
    Danke, wie wird denn zwischen 255 und -1 unterschieden?
     

  9. #9
    Avatar von einfach nur crack
    einfach nur crack ist offline mag Cookies & Kekse
    Registriert seit
    May 2007
    Ort
    ::1
    Beiträge
    2.430
    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.
     
    Wir alle hier helfen gerne in unserer Freizeit weiter und versuchen Probleme gemeinsam zu lösen. Deshalb wäre es nett, wenn man das entsprechend mit einer positiven Bewertung oder einem Danke honoriert.

    Bei folgenden Sachen kann ich Dir übrigens helfen:
    PHP
    JavaScript
    Ruby
    CoffeeScript
    CSS
    – Webtechnologien
    – UNIX-Shell

    ... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.

  10. #10
    üäpöol ist offline Mitglied Gold
    Registriert seit
    Feb 2011
    Beiträge
    201
    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?
     

  11. #11
    deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.731
    Zitat Zitat von üäpöol Beitrag anzeigen
    OK. Jetzt versteh ich's. Das bedeutet, ich muss das erste byte der Variable/Register nur auf 0 setzten.
    Nein, da die Werte (höchstwahrscheinlich) im Zweierkomplement gespeichert werden.

    Du mußt die Methode von Bratkartoffel verwenden. Dazu mußt du aber erstmal prüfen ob das MSB überhaupt 1 ist.

    \edit: wenn mich nicht alles täuscht gibt es auch eine NEG Operation.

    Gruß
    üäpöol bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  12. #12
    Avatar von timestamp
    timestamp ist offline Mitglied Käsekuchen
    Registriert seit
    May 2010
    Ort
    Marburg
    Beiträge
    1.952
    Nur um noch einmal grundlegene Mathematik hier rein zu bringen...
    1*1 = 1
    (-1) * 1 = 1 * (-1) = -1
    (-1) * (-1) = +1
     
    Tutorials.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.

  13. #13
    üäpöol ist offline Mitglied Gold
    Registriert seit
    Feb 2011
    Beiträge
    201
    @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)
     

  14. #14
    deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.731
    Zitat Zitat von üäpöol Beitrag anzeigen
    @timestamp
    Das ist klar, aber was hat das mit meinem Problem zu tun?
    So klar schien dir das wohl nicht zu sein, da du mit 1 multipliziert hast und eine Veränderung des Wertes erwartet hast...
    Zitat Zitat von üäpöol Beitrag anzeigen
    @deepthroat
    Das bedeutet, es gibt keine Möglichkeit die Zahl ohne Abfrage zuvor, positiv zu machen?
    Ja.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  15. #15
    üäpöol ist offline Mitglied Gold
    Registriert seit
    Feb 2011
    Beiträge
    201
    Ich dachte mul multipliziert ohne Vorzeichen, oder?
     

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Antworten: 10
    Letzter Beitrag: 12.03.11, 12:16
  2. 3ds MAX Positiv-, in Negativform
    Von mahle im Forum 3D Studio Max
    Antworten: 2
    Letzter Beitrag: 02.11.09, 23:00
  3. aus zahl zeit machen
    Von Windhund im Forum PHP
    Antworten: 2
    Letzter Beitrag: 05.08.08, 19:27
  4. Aus zahl,zahl einen float-Wert machen
    Von metacortex im Forum Java
    Antworten: 8
    Letzter Beitrag: 06.07.04, 16:11
  5. Wenn Zahl negativ == Dann positiv?
    Von daDom im Forum Visual Basic 6.0
    Antworten: 15
    Letzter Beitrag: 02.04.04, 20:13

Stichworte