Negative Zahlen in ASM?

Fragen zu allen anderen Programmiersprachen.
Norbie
Beiträge: 134
Registriert: 29.08.2004 12:45
Wohnort: Chemnitz
Kontaktdaten:

Negative Zahlen in ASM?

Beitrag von Norbie »

Hi, ich hab nen Übersetzer gebaud, just for fun, und will dem nun beibringen, 2-1 zu rechnen:

Zur Zeit spuckt er aus:

Code: Alles auswählen

.386
jmp start

buffer1 dd 0
buffer2 dd 0
test dd 0

proc ausgabe_dl_char
push ax
push bx
push cx
push dx
mov ah,2
int 21h
pop dx
pop cx
pop bx
pop ax
ret
endp

proc ausgabe_eax_zahl
push eax
push ebx
push ecx
push edx
mov ebx,10
mov ecx,0
anfang_ausgabe_ax_zahl:
mov edx,0
idiv ebx
add edx,48
inc ecx
push edx
cmp eax,0
jne anfang_ausgabe_ax_zahl
mitte_ausgabe_ax_zahl:
pop edx
call ausgabe_dl_char
dec ecx
cmp ecx,0
jne mitte_ausgabe_ax_zahl
pop edx
pop ecx
pop ebx
pop eax
ret
endp

start:
mov eax, 1
mov DWORD buffer1, eax
mov eax, 2
mov DWORD buffer2, eax
mov eax, buffer1
sub eax,buffer2
mov buffer1, eax
mov eax, buffer1
mov test, eax
mov eax, test
mov DWORD buffer1, eax
mov eax, buffer1
call ausgabe_eax_zahl
mov ah, 4Ch
int 21h
Und das Ergebnis davon ist 255!

Was muss man ändern, dass er -1 oder zumindes nur 1 ausgibt? :mrgreen:

Das ganze ist ein Tinymodel und für Dos.
Danke für eure Hilfe :allright:
http://www.nevu.de/ Künstliche Intelligenz, die letzte Herausforderung!
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Code: Alles auswählen

start:
mov eax, 1
mov DWORD buffer1, eax ; buffer1 = 1
mov eax, 2
mov DWORD buffer2, eax ; buffer2 = 2
mov eax, buffer1 ; eax = buffer1
sub eax,buffer2 ; eax = eax - buffer2, anders geschrieben buffer1 = buffer1 - buffer2
mov buffer1, eax
mov eax, buffer1
mov test, eax
mov eax, test
mov DWORD buffer1, eax
mov eax, buffer1
call ausgabe_eax_zahl
mov ah, 4Ch
int 21h 
Dein Programm rechnet nicht 2-1 sondern 1-2.

:wink:
Greetz Laurin
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Norbie
Beiträge: 134
Registriert: 29.08.2004 12:45
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von Norbie »

Oh mein Fehler! Meinte natürlich es soll 1-2 rechen. Sonst wäre das Ergebnis ja nicht negativ :)
http://www.nevu.de/ Künstliche Intelligenz, die letzte Herausforderung!
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Es kommt kein negativer Wert raus, weil du mit Zahlen rechnest, die unsigned (ohne Vorzeichen) sind. Sorg dafür, dass du vorzeichenbehaftete Zahlen verwendest.

Greetz Laurin
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

In PB:

Code: Alles auswählen

v = 1
MOV eax, DWord[v_v]
ADD eax, -2
MOV DWord[v_v], eax
Debug v
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Negative Zahlen in ASM?

Beitrag von Danilo »

Norbie hat geschrieben:Was muss man ändern, dass er -1 oder zumindes nur 1 ausgibt? :mrgreen:
Du musst eine 'proc ausgabe_eax_zahl' schreiben die Zahlen als
vorzeichenbehaftet behandelt.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Antworten