PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Assembler-Routine will nicht - Verzweiflung


Lord_Otter
07.08.2002, 16:24
Hi Leute !
Ich bin gerade dabei, eine Assembler-Routine zu schreiben, die aus 2
Rechtecken das Rechteck berechnet, dass beide Rechtecke einschließen.
Also noch mal genauerer:
Ich habe zwei Rechtecke, Rect1 und Rect2.
Diese Variablen enthalten 2 Koordinatenpaare:
Den oberen,linken Punkt des Rechteckes und den unteren/rechten Punkt des
Rechteckes.
Jede Koordinate ist also 2 Byte groá, also ein WORD.
Nun soll die Koordinaten von dem Rechteck berechnet werden, welches von den
Rechtecken Rect1 und Rect2 eingeschlossen wird.
Diese Koordinaten sollen wieder in Rect1 gespeichert werden.


PUSH DS
CLD
LES DI,Rect1
LDS SI,R
LODSW
MOV BX,AX
LODSW
MOV CX,AX
LDS SI,Rect2
LODSW
CMP AX,BX
JA @@1
XCHG AX,BX
@@1:
STOSW
LODSW
CMP AX,CX
JA @@2
XCHG AX,CX
@@2:
STOSW
LODSW
MOV BX,AX
LODSW
MOV CX,AX
LDS SI,Rect1
ADD SI,4
LODSW
CMP AX,BX
JB @@3
XCHG AX,BX
@@3:
STOSW
LODSW
CMP AX,CX
JB @@4
XCHG AX,CX
@@4:
STOSW
POP DS


Aber irgentwie funzt das nicht so Recht.
Ich hab' das Problem auch schon gefunden, aber ich weiß nicht, wie es
zustande oder gar wie ich es beheben kann:
Nach dem Label @@2 stimmen die Werte des letzten Koordinatenpaares
von Rect1 nicht mehr. Das letzte Koordinatenpaar von Rect1, also dem
für den unteren,rechten Punkt, ist plötzlich identisch mit dem ersten
Paar von Rect2. Beispiel:
Die Werte von Rect1: 1,1,10,10
Die Werte von Rect2: 2,2,9,9
Nach Label @@2: 2,2,10,10

Woran könnte das liegen ?


Felix Kaiser
07.08.2002, 18:31
Du hast den Code noch nicht richtig debuggt, denn dann würdest du den Fehler rasch finden. Ein Debugger hat nicht umsonst neben CPU Code, CPU Register und Stackansicht auch einen Betrachter für beliebige Speicheradressen (z.B. ES:DI oder DS:SI), zumindest ist dies beim Turbo Debugger so. Somit lassen sich gerade solche Fehler rasch finden. Versuchs bitte nochmal. Nur wenn dus wirklich absolut nicht schaffst nach einigen Versuchen, würde ich den Code mal bei mir in den Debugger haun. Zu dem könntest du mal die Struktur für eines deiner Rechtecke erläutern.

Lord_Otter
08.08.2002, 08:15
Du kannst ja wie ich Pascal programmieren, also werde ich es so erklären:

MeineRechtEckStruktur:
RECORD
x1:Word;
y1:Word;
x2:Word;
y2:Word;
END;

Aber ich habe das Problem gestern, etwa 1 Stunde, nachdem ich diesen Beitrag geschrieben hatte, gelöst.
Das nächste mal werde ich den Debugger verwenden.

Felix Kaiser
08.08.2002, 15:29
Ok, weiter so! :)