IDIV?
-
Hi Leute!
Ich hab folgendes programm:
MOV AX,-7
MOV DX,3IDIV DX
Wenn ich das nun ausführe und mit dem TurboDebugger debugge, dann bekomm ich einen Fehler: "Divided by Zero". Aber: -7 : 3 = -2 R1. Warum macht er mir das nicht?
-
du Teils DX::AX durch DX!
0x3f9 / 3 = 0x159 -> das passt nicht in eine 16Bit Register (Overflow)
-
Ich hab jetzt gelesen, dass das Registerpaar AX:DX geteilt wird. Ich hab jetzt in AX die -7 geschrieben und DX auf 0 gesetzt. Teilen werd ich durch die 3 die in CX steht.
Nun erhalte ich als Ergebnis im Registerpaar: AX:DX -> 5553:0000. Was soll das nun bedeuten? 5553h = 21843(DEZ). Das ist doch keine -2!
Ich verstehe es einfach nicht.
-
ups:
0x3fff9 / 3 = 15553
-
du musst die Zahl in AX unter berücksichtigung des Vorzeichens nach DX erweitern:
mov ax,-7 cwd mov cx,3 idiv cx
-
oder eben durch formale 8bit teilen, in diesem fall
idiv cl