| |
|
|
GDL | allô Frank,
voudrais doch dans XPIA einiges realisieren.avec den Grundversionen viens je dank deiner Beispiele lente bien sûr. Bräuchte mais chez den Arrays encore hilfe. Möchtest du mir s'il te plaît ca comme Beispiel traduire?
num%=0 whilenot num% > 100 A%[num%]=num%+1 1feldarray B%[num%,num%+1]=num%+3 2feldarray inc num% Wend
qui Boucle bekomme je oui hin, mais comment lege je qui Arrays à? et comment bekomme je qui Arrays wieder pour Profan zurück?
salut Georg |
|
|
| |
|
|
|
Frank Abbing | allô Georg,
Assembler bietet de maison aus aucun Unterstützung pour Arrays à. si on mais bedenkt, dass Arrays aussi seulement Speicherbereiche sommes, dans denen qui données hintereinander gespeichert stehen, ist qui Solution simpel. Behandle Arrays simple comment Bereiche wobei du mais tenir compte de musst, dass Word-Arrays comment z.B. spielfeld%[0,0] 4 Bytes pro Eintrag besoin, genauso comment Long-Arrays, z.B. spielfeld&[0,0]. un avec >Declare spielfeld%[2,2]< geschaffenes Array nécessaire alors 3x * 3y *4 Bytes = 36 Bytes.
Um chez meinem Beispiel trop rester: KompilierenMarqueSéparationDeclare feld%[2,2]
feld%[0,0] = 1 : feld%[1,0] = 2 : feld%[2,0] = 3
feld%[0,1] = 4 : feld%[1,1] = 5 : feld%[2,1] = 6
feld%[0,2] = 7 : feld%[1,2] = 8 : feld%[2,2] = 9pre> Im grenier steht cela Array maintenant folgendermassen:
[box:c9f0d92ac8]7FD30010 : 01 00 00 00 - 02 00 00 00 - 03 00 00 00 - 04 00 00 00 7FD30020 : 05 00 00 00 - 06 00 00 00 - 07 00 00 00 - 08 00 00 00 7FD30030 : 09 00 00 00 00000036 : BYTES TOTAL[/box:c9f0d92ac8] [hr:c9f0d92ac8] So, um deinen Code umzusetzen, übergibts du d'abord einmal qui Adresse qui Arrays à qui Assemblerroutine et manipulierst qui Werte direct im grenier. qui Anfang zur Konvertierung wäre alors:
AsmStart FillArrays(addr(a%[0]),addr(b%[0,0]))
dans para1 steht maintenant qui Adresse de Array a% et dans para2 steht qui Adresse de Array b%
maintenant peux du qui Werte dans den grenier écrivons. Versuch la fois, si du qui Konvertierung maintenant déjà selber hinbekommst. |
|
|
| |
|
|
|
GDL | allô Frank,
viens avec dem grenier pas bien sûr, mais avec dem Beispiel aus dem Kurs devrait es aussi aller. AsmStart Arrays Paramètres adresse1&,wert1&,adresse2&,wert2& jmp @f data dd 0,0,0,0,0,0,0,0,0,0,0,0 ;Datenbereich(muss so gross comment qui arraydeclare son) @f: mov ebx,para1 mov eax,para2 mov ecx,para3 mov edx,para4 lea esi,data mov [esi+ebx],eax;Wert1 écrivons mov [esi+ecx],edx;Wert2 écrivons
AsmEnd |
|
|
| |
|
|
|
Frank Abbing | Georg, lass uns chez deinem ersten Code rester et pas alles durcheinander werfen. Du vouloir alors que voici mise en œuvre bekommen? KompilierenMarqueSéparation {$iq}
Declare num%,a%[101],b%[101,101],x&,y&
num%=0
whilenot num% > 100
A%[num%]=num%+1 1feldarray
B%[num%,num%+1]=num%+3 2feldarray
Print a%[num%],b%[num%,num%+1]
inc num%
wend
AsmStart ShowMe(addr(a%[0]),addr(b%[0,0]))
PrintDec para2
DumpMem para1,400
DumpMem para2,800
AsmEnd
Print "Fertig."
WaitInput
Fin
|
|
|
| |
|
|
|
Frank Abbing | So, ici la hâte du beide Versionen des gleichen Codes. qui Assemblercode ist pas optimiert, avec cela qui Arbeitsweise besser verständlich wird: KompilierenMarqueSéparation!{$iq}
Declare num%,a%[101],b%[101,101],x&,y&
*** Profanversion
num%=0
whilenot num% > 100
A%[num%]=num%+1
B%[num%,num%+1]=num%+3
inc num%
wend
*** Assemblerversion
AsmStart FillArray(addr(a%[0]),addr(b%[0,0]))
mov ebx,para1
mov edx,para2
add edx,408
mov ecx,0
.while ecx <=100
inc ecx ;ecx = num%+1
mov [ebx],ecx
add ebx,4 ;Adresse des nächsten Wertes in a%[]
add ecx,2 ;ecx = num%+3
mov [edx],ecx
add edx,412 ;Adresse des nächsten Wertes in b%[,]
sub ecx,3
inc ecx ;Schleifenzähler um eins erhöhen
.endw
AsmEnd
WaitInput
Fin
je empfehle dir chez weiteren Umsetzungen pour Assembler Bereiche trop verwenden. Arrays sommes plan pas sonderlich kompatibel trop Assembler. |
|
|
| |
|
|
|
GDL | allô Frank,
erstmal merci pour Dein Beispiel.mais je verwende desswegen Arrays, là es wesentlich einfacher ist. Beispiel: Speedausgabe&=standardspeed&[punkt&,lok&] ou bien neue Standardspeed pour Lok& irgendeine Lok pour irgendeinen Punkt standardspeed&[punkt&,lok&]=lesewert&
lok&,punkt&,lesewert&=sind toujours 8bit breit.
cela erste Quellcodebeispiel était seulement un fiktives Beispiel à substance erstmal trop kapieren,alors pour den Einstieg.
je werde es wahrscheinlich avec Data faire.Data utilise aussi Atmelassembler chez seinen Arrays.suis en ausgegangen cela MASM32 Arrays peux. Werde ici mais weitermachen, là qui Geschwindigkeitszuwächse avant allem sur Rechnern sous 800 Mhz enorm sommes.(Lies dein Rechenbeispiel courir).
Muss chez den Data Beispiel Kit sur den Augen gehabt avons.cet Beispiel ouvrez chez meinem Prog überhaupt gänzlich neue Routinen.
salut Georg
P.S. chez deinem Beispiel vermute je la fois dass alles dans den Registern ebx et edx abgehandelt wird . je muss alors toujours seulement 8 bit breite 0 Werte erzeugen cet ensuite Auffüllen et am richtigen place dans dem Bereich kopieren.et chez Profan hernach chez chaque Arrayersatz selbige Procédure wieder.Verstehe je cela so richtig? |
|
|
| |
|
|
|
Frank Abbing | Hi.
[quote-part:7bd08b357f]mais je verwende desswegen Arrays, là es wesentlich einfacher ist.[/quote-part:7bd08b357f] Alles l'affaire qui Gewöhnung. mais im Grunde la hâte du droite.
[quote-part:7bd08b357f]je werde es wahrscheinlich avec Data faire.Data utilise aussi Atmelassembler chez seinen Arrays.suis en ausgegangen cela MASM32 Arrays peux.[/quote-part:7bd08b357f] cela selbe dans vert. seulement erzeugst du dans deinem DATA-Beispiel den grenier mittels MASM32, au cours de dans mon umgesetzen Code Profan den grenier (dans den le cas comme Array) zur Disposition stellt.
[quote-part:7bd08b357f]P.S. chez deinem Beispiel vermute je la fois dass alles dans den Registern ebx et edx abgehandelt wird . je muss alors toujours seulement 8 bit breite 0 Werte erzeugen cet ensuite Auffüllen et am richtigen place dans dem Bereich kopieren.et chez Profan hernach chez chaque Arrayersatz selbige Procédure wieder.Verstehe je cela so richtig?[/quote-part:7bd08b357f] non. Register avec trois Buchstaben (EAX usw.) travailler toujours avec 32 Bit... je denke pas, dass du mon Umsetzung verstanden la hâte. mon Assemblercode füllt qui Profan-Arrays, direct. Profan übergibt aiguille sur qui Arrays, alors qui Adressen, dans denen qui Werte des Arrays im grenier stehen. ensuite écrit qui Assembler-Boucle direct Werte dans qui Arrays, sodass vous Profan pour dem sortir de qui Assembler-Routine déjà zur Disposition stehen. Dein DATA-Beispiel nützt dans sofern rien, weil Assembler den grenier zur Disposition se mettre soll et Profan später rien en hat...
Incidemment stellt qui MASM32.lib quelques Arrayfunktionen zur Disposition. là XPIA cet Library eingebunden hat, peux du vous sans weiteres benutzen.
arr_add Ajouter à integer to every member of a DWORD array arr_mul Multiply every member of a DWORD array by à integer arr_sub Subtract à integer à partir de every member of a DWORD array create_array Créer à array of pointers to a user defined array
Particularités en supplément findest du im MASM32-paquet dans help/masmlib32.hlp |
|
|
| |
|
|
|
GDL | allô Frank,
la hâte droite,verstehe ca encore pas entier.Habe momentan avec qui jetztigen Fassung genug Stress.(Hardware erstellen). peux gesundheitlich pas plus so viel. Werde mais drann rester, là toujours plus Mitglieder cela Prog avons voulons, mais partiellement seulement 486DX33 calculateur (Modellbahnrechner arrêt) avons. peut-être könnten wir uns la fois sous Skype unterhalten, si du vouloir?
salut Georg |
|
|
| |
|
|
|
Frank Abbing | Bien sûr, volontiers. Du findest mich là sous dem Namen grasshopper64 |
|
|
| |
|
|
|
Michael Wodrich | Hmm, , Im Herbst pas plus im Gras unterwegs? |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 18.10.2006 ▲ |
|
|
|
|
GDL | allô Frank,
bekomme es comment im ersten Antwortposting pas sur qui Reihe.Habe mais dans einer Kopie de betrieb angefangen mittels Data trop travailler et den Rückgabewert ensuite dans Profan ins Array trop écrivons.Funzt aussi. Habe maintenant un kleines Warmstartprogramm vorweg dass qui Festplattenwerte dans qui Datapositionen écrit.dans Zusammenarbeit avec meiner RAMdisk wesentlich plus rapide comme auparavant. Zwar pas qui Königsweg, mais und dir versuchsweise déjà pas mal.GDL plan.
salut Georg |
|
|
| |
|
|
|
Frank Abbing | Wenns fonctionne. chez qui Rückschau sur ältere Code de mir bemerke je aussi souvent, dass je manches aujourd'hui anders lösen serait. on lernt plan toujours en supplément, et genauso wird es dir aussi ergehen, si du deinen Code dans 2-3 Jahren ansiehst. |
|
|
| |
|
|