Andreas Bause
2003-12-03 16:01:36 UTC
Bin jetzt etwas weiter mit meinem Problem, hab es aber noch nicht
getestet (gehe sowieso davon aus das es so noch nicht läuft :-))
Also ich will 600 Schleifen durchlaufen. In jeder dieser Schleifen
werden 2 weitere Schleifen durchlaufen. Eine, die HIGHSCHLEIFE, soll
mir ein HIGH Signal am Parallelport bringen, die andere, die
LOWSCHLEIFE, soll ein LOW Signal bringen.
Die Hauptschleife (PIXELSCHLEIFE) wird immer 600 mal durchlaufen. Die
Anzahl der Durchläufe für die HIGH und LOWSCHLEIFE steht jeweils in
einem Array. Beim ersten Durchlauf der PIXELSCHLEIFE die HIGHSCHLEIFE
so oft durchlaufen werden wie es in dem Array HIGHSignal[1] steht, und
die LOWSCHLEIFE so oft wie es in dem Array LOWSignal[1] steht usw...
Die Array sind also beide auch genau von 1-600 und enthalten Integer
Zahlen von 1 bis max 2000.
Daraus soll später mal ein PWM Signal am Ausgang werden (hoffe ich
zumindenst). Die asm Routine soll in Delphi 6.0 laufen. Da ich mich
mit Assembler erst seit ca einer Woche beschäftige bin ich darin noch
alles andere als standfest.
Wäre schön wenn mal einer über den Code drüberschauen könnte und ein
paar Tips geben könnte oder Fehler aufzeigen.
begin
asm
PUSH EAX // die 32 bit Register
PUSH EBX // EAX bis EDX
PUSH ECX // werden auf dem
PUSH EDX // Stack gesichert
CLI // alle Interrupts werden gesperrt
MOV ECX,600 // ECX wird auf 600 geladen
MOV DX,$378 // Adresse des Parallelport in DX
@PIXELSCHLEIFE
MOV BX,byte PTR[ECX+HIGHSignal] // <--ich denke mal das hier
noch
@HIGHSCHLEIFE // ein Fehler drin steckt
MOV AL,192
OUT DX,AL
DEC BX
CMP BX,0
JNZ @HIGHSCHLEIFE
MOV BX,byte PTR[ECX+LOWSignal]
@LOWSCHLEIFE
MOV AL,64
OUT DX,AL
DEC BX
CMP BX,0
JNZ @LOWSCHLEIFE
STI // Alle Interrupts werden wieder
zugelassen
POP EDX // Alle vier
POP ECX // Register werden
POP EBX // wieder vom
POP EAX // Stack heruntergeholt
end; //end of asm
getestet (gehe sowieso davon aus das es so noch nicht läuft :-))
Also ich will 600 Schleifen durchlaufen. In jeder dieser Schleifen
werden 2 weitere Schleifen durchlaufen. Eine, die HIGHSCHLEIFE, soll
mir ein HIGH Signal am Parallelport bringen, die andere, die
LOWSCHLEIFE, soll ein LOW Signal bringen.
Die Hauptschleife (PIXELSCHLEIFE) wird immer 600 mal durchlaufen. Die
Anzahl der Durchläufe für die HIGH und LOWSCHLEIFE steht jeweils in
einem Array. Beim ersten Durchlauf der PIXELSCHLEIFE die HIGHSCHLEIFE
so oft durchlaufen werden wie es in dem Array HIGHSignal[1] steht, und
die LOWSCHLEIFE so oft wie es in dem Array LOWSignal[1] steht usw...
Die Array sind also beide auch genau von 1-600 und enthalten Integer
Zahlen von 1 bis max 2000.
Daraus soll später mal ein PWM Signal am Ausgang werden (hoffe ich
zumindenst). Die asm Routine soll in Delphi 6.0 laufen. Da ich mich
mit Assembler erst seit ca einer Woche beschäftige bin ich darin noch
alles andere als standfest.
Wäre schön wenn mal einer über den Code drüberschauen könnte und ein
paar Tips geben könnte oder Fehler aufzeigen.
begin
asm
PUSH EAX // die 32 bit Register
PUSH EBX // EAX bis EDX
PUSH ECX // werden auf dem
PUSH EDX // Stack gesichert
CLI // alle Interrupts werden gesperrt
MOV ECX,600 // ECX wird auf 600 geladen
MOV DX,$378 // Adresse des Parallelport in DX
@PIXELSCHLEIFE
MOV BX,byte PTR[ECX+HIGHSignal] // <--ich denke mal das hier
noch
@HIGHSCHLEIFE // ein Fehler drin steckt
MOV AL,192
OUT DX,AL
DEC BX
CMP BX,0
JNZ @HIGHSCHLEIFE
MOV BX,byte PTR[ECX+LOWSignal]
@LOWSCHLEIFE
MOV AL,64
OUT DX,AL
DEC BX
CMP BX,0
JNZ @LOWSCHLEIFE
STI // Alle Interrupts werden wieder
zugelassen
POP EDX // Alle vier
POP ECX // Register werden
POP EBX // wieder vom
POP EAX // Stack heruntergeholt
end; //end of asm