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 ?
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 ?