Ich möchte in der Montage eine positive Zahl zu negativ konvertieren, Ich brauche ein CodebeispielWie bei der Montage eine positive Zahl zu negativ konvertieren
Der Eingang ist in hex SDWORD
Dank
Ich möchte in der Montage eine positive Zahl zu negativ konvertieren, Ich brauche ein CodebeispielWie bei der Montage eine positive Zahl zu negativ konvertieren
Der Eingang ist in hex SDWORD
Dank
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
Statt 'XOR EAX, EAX', warum nicht einfach' MOV EAX, 0h'? – user1720897
@ 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
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
Hier ist eine Online-Ressource, die zeigt, wie dies für 80x86-Prozessor tun: http://webster.cs.ucr.edu/AoA/DOS/ch01/CH01-2.html
Dieser Link funktioniert nicht mehr. Jetzt wissen Sie, warum Link-Only-Antworten entmutigt werden. – Barmar
Sie müssen einen Prozessor angeben. Jeder Prozessor verwendet einen anderen Satz von Operationen. – Cheeso
Welche Assemblersprache? – marcog
x86, ich arbeite mit VS2008 – alonp