2010-12-26 11 views

Antwort

11

Nun, es gibt zwei Möglichkeiten, dies zu tun, am besten wäre es, die Zahl in ein Register zu laden, dann die NEG Anweisung wie Hans erwähnen, dh: NEG EAX würde eax negieren. Der andere Weg wäre XOR EAX,EAX SUB EAX,EDX wo edx die Nummer enthält, die Sie negieren möchten

+1

Statt 'XOR EAX, EAX', warum nicht einfach' MOV EAX, 0h'? – user1720897

+3

@ user1720897: 'XOR EAX, EAX' ist ein Abhängigkeitsunterbrechungs-Idiom (siehe das Intel Optimierungshandbuch), das bedeutet, dass die CPU die Registerumbenennung verwenden kann, um die Dinge zu beschleunigen. Es ist auch eine kleinere Codierung, dies hilft mit i-Cache-Druck und Befehl holen und dekodieren. TBH, es macht keinen Unterschied in diesem Fall, es ist nur eine Angewohnheit von mir (aber keine schlechte Angewohnheit). – Necrolis

1

Sie können das Zweierkomplement der Zahl nehmen. I.e. Bitweise NICHT gefolgt von der Addition von eins.

Data Segment 
    num dw 00000010B 
Data Ends 

Code Segment 
    Assume cs:code, ds:data 

    Begin: 
    mov ax, data 
    mov ds, ax 
    mov es, ax 
    mov ax, num 
    NOT ax 
    add ax, 00000001B 

    Exit: 
    mov ax, 4c00h 
    int 21h 
Code Ends 
End Begin 
+0

Die Eingabe erfolgt in Hexdword – alonp

+1

Nicht sicher, ob ich dich verstanden habe .. –

+0

Ich möchte eine Nummer, die in sdword in hexadezimalen und nicht binären – alonp

Verwandte Themen