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


Anmelden zum Antworten