Ich möchte ein Programm erstellen, das Teilungsprobleme berechnen kann. Das Problem ist, dass mein Programm abstürzte, als ich versuchte, durch eine negative Zahl zu teilen, obwohl ich eine Verzweigung namens "DivNeg" erstellte, die verhindern sollte, dass es abstürzt. Hat jemand Ideen, wie man das beheben kann?Teilen Sie eine positive Zahl durch eine negative Zahl in Assembly
Hier ist mein Assembler-Code
.386
.model flat
public _Divide
.code
_Divide proc
mov eax, [esp + 4] ; First address ; this is the dividend
mov ebx, [esp + 8] ; Second address ; this is the divisor
cmp ebx, 0
je DivZero
cmp ebx, 0
jnae DivNeg
cdq
idiv ebx ; To divide by eax by ebx
mov ebx, [esp + 12] ; Third address; this is the remainder
jmp Done1
DivZero:
mov eax,-1 ; If user divides by zero, this will set the result to negative 1
mov edx, 0 ; If user divides by zero, this will set the remainder to 0
mov ebx,[esp +12] ; Needed for the remainder if divided by 0
cmp ebx, 0
je Done2
Done1:
mov [ebx], edx
je Done1
DivNeg:
cmp ebx, 0
jge Done2
mov eax, -1
neg eax
je DivNeg
Done2:
ret
_Divide endp
end
nur vom ersten Blick; Du hast: 'je DivZero; Je DivNeg' eins nach dem anderen; und was sollte DivNeg tun? Warum gibt es einen Ascii eines '-'? –
Ich habe die DivNeg-Schleife erstellt, so dass das Ergebnis und der Rest der Division durch eine negative Zahl angezeigt werden. Ohne es würde das Programm aus irgendeinem Grund abstürzen. Als Teil des DivNeg-Teils stelle ich das für den Fall auf, dass der Divisor kleiner als Null ist. – Jaquai
Ich denke, du solltest ein bisschen mehr über asm lesen; die 'loop' macht keinen sinn - es ist eax> 0 es wird für immer loopen. Das ganze Problem ist ein wenig "seltsam" für die Aufgabe, die es tun sollte –