Negative Zahlen in ASM
-
Hi, ich hab nen Übersetzer gebaud, just for fun, und will dem nun beibringen, 2-1 zu rechnen:
Zur Zeit spuckt er aus:
Code:
.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?
Das ganze ist ein Tinymodel und für Dos.
Danke für eure Hilfe
-
Ich meinte natürlich 1-2. Sonst wäre das Ergebnis ja nicht negativ. Mein Fehler!
-
Negative Zahlen sind Interpretationssache. Wenn du 8 Bit hast, kannst du dadrin die zahlen z.B. zwischen 0 und 255 oder -128 bis 127 speichern. Wenn du nun 1-2 rechnest, und -1 rauskommt, wird die im Rechner genauso dargestellt wie die 255, es liegt an dir wie du das interpretierst. Genaueres dazu auf http://de.wikipedia.org/wiki/Zweierkomplement