| |
|
|
 GDL | ¡Hola Franco,
möchte doch en XPIA einiges realisieren.Mit el Grundversionen komme Yo dank deiner Beispiele langsam klar. Bräuchte pero en el Arrays todavía hilfe. Möchtest du me Por favor, dies como Ejemplo traducir?
num%=0 whilenot num% > 100 A%[num%]=num%+1 1feldarray B%[num%,num%+1]=num%+3 2feldarray inc num% wend
El Bucle bekomme Yo sí hin, aber como lege Yo el Arrays a? Und como bekomme Yo el Arrays otra vez después de Profano zurück?
Servus Georg |
|
|
| |
|
|
|
 Frank Abbing | ¡Hola Georg,
Ensamblador bietet de Haus de no Unterstützung para Arrays a. Wenn uno aber bedenkt, dass Arrays auch sólo Speicherbereiche son, en denen el Daten hintereinander gespeichert posición, Es el Solución simpel. Behandle Arrays simplemente como Bereiche wobei du aber beachten musst, dass Word-Arrays como z.B. spielfeld%[0,0] 4 Bytes pro Eintrag benötigen, genauso como Largo-Arrays, z.B. spielfeld&[0,0]. Ein con >Declare spielfeld%[2,2]< geschaffenes Array benötigt also 3x * 3y *4 Bytes = 36 Bytes.
Um en mi Ejemplo a bleiben: KompilierenMarcaSeparaciónDeclare 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 Speicher es el Array ahora 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, en deinen Code umzusetzen, übergibts du zuerst una vez el Adresse el Arrays a el Assemblerroutine y manipulierst el Werte direkt en el Speicher. Der Anfang a Konvertierung wäre also:
AsmStart FillArrays(addr(a%[0]),addr(b%[0,0]))
In para1 es ahora el Adresse de Array a% y para2 es el Adresse de Array b%
Jetzt kannst du el Werte en el Speicher escribir. Intento veces, si du el Konvertierung ahora ya selber hinbekommst. |
|
|
| |
|
|
|
 GDL | ¡Hola Franco,
Komme con el Speicher no está claro, aber con el Ejemplo de el Kurs debería lo auch ir. AsmStart Arrays Parámetros adresse1&,wert1&,adresse2&,wert2& jmp @f data dd 0,0,0,0,0,0,0,0,0,0,0,0 ;Datenbereich(muss así gross como arraydeclare ser) @f: mov ebx,para1 mov eax,para2 mov ecx,para3 mov edx,para4 lea esi,data mov [esi+ebx],eax;Wert1 escribir mov [esi+ecx],edx;Wert2 escribir
AsmEnd |
|
|
| |
|
|
|
 Frank Abbing | Georg, lass uns en deinem ersten Code bleiben y no alles durcheinander werfen. Usted möchtest also que aquí umgesetzt bekommen? KompilierenMarcaSeparación {$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
End
|
|
|
| |
|
|
|
 Frank Abbing | So, hier hast du beide Versionen des gleichen Codes. Der Assemblercode es no optimiert, así el Arbeitsweise mejor verständlich se: KompilierenMarcaSeparación!{$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
End
Yo empfehle dir en más Umsetzungen después de Ensamblador Bereiche utilizarse. Arrays son eben no sonderlich kompatibel a Ensamblador. |
|
|
| |
|
|
|
 GDL | ¡Hola Franco,
primero Gracias para Su Ejemplo.Aber Yo verwende desswegen Arrays, como lo wesentlich einfacher es. Ejemplo: Speedausgabe&=standardspeed&[punkt&,lok&] oder neue Standardspeed para Lok& irgendeine Lok para irgendeinen Punkt standardspeed&[punkt&,lok&]=lesewert&
lok&,punkt&,lesewert&=sind siempre 8bit breit.
Das erste Quellcodebeispiel war sólo una fiktives Ejemplo a Materie primero a kapieren,also para el Einstieg.
Yo voluntad lo wahrscheinlich con Data hacer.Data nutzt auch Atmelassembler en seinen Arrays.Bin su ausgegangen el MASM32 Arrays kann. Werde hier aber weitermachen, como el Geschwindigkeitszuwächse antes allem en Rechnern bajo 800 Mhz enorm son.(Lies dein Rechenbeispiel laufen).
Muss en el Data Ejemplo Kit en el Augen gehabt haben.Dieses Ejemplo öffnet en mi Prog überhaupt gänzlich neue Routinen.
Servus Georg
P.S. En deinem Ejemplo vermute Yo veces dass alles en el Registern ebx y edx abgehandelt se . Yo muss also siempre sólo 8 bit breite 0 Werte erzeugen esta entonces Auffüllen y al richtigen Platz en el Zona kopieren.Und en Profano hernach cada Arrayersatz selbige Procedimiento otra vez.Verstehe Yo el así correcto? |
|
|
| |
|
|
|
 Frank Abbing | Hi.
[quote:7bd08b357f]Aber Yo verwende desswegen Arrays, como lo wesentlich einfacher es.[/quote:7bd08b357f] Alles Sache el Gewöhnung. Aber en el Grunde hast du bastante.
[quote:7bd08b357f]Yo voluntad lo wahrscheinlich con Data hacer.Data nutzt auch Atmelassembler en seinen Arrays.Bin su ausgegangen el MASM32 Arrays kann.[/quote:7bd08b357f] Das selbe en grün. Nur erzeugst du en deinem DATA-Ejemplo el Speicher mittels MASM32, während en mi umgesetzen Code Profano el Speicher (en el Fall como Array) disponible stellt.
[quote:7bd08b357f]P.S. En deinem Ejemplo vermute Yo veces dass alles en el Registern ebx y edx abgehandelt se . Yo muss also siempre sólo 8 bit breite 0 Werte erzeugen esta entonces Auffüllen y al richtigen Platz en el Zona kopieren.Und en Profano hernach cada Arrayersatz selbige Procedimiento otra vez.Verstehe Yo el así correcto?[/quote:7bd08b357f] Nein. Register con drei Buchstaben (EAX usw.) trabajo siempre con 32 Bit... Yo denke no, dass du mi Umsetzung verstanden hast. Mein Assemblercode füllt el Profano-Arrays, direkt. Profano übergibt Zeiger en el Arrays, Así que el Adressen, en denen el Werte des Arrays en el Speicher posición. Dann schreibt el Ensamblador-Bucle direkt Werte en el Arrays, sodass ellos Profano después de el Verlassen el Ensamblador-Rutina ya disponible posición. Su DATA-Ejemplo nützt en sofern nichts, porque Ensamblador el Speicher disponible stellen se y Profano später nichts su ha...
Übrigens stellt el MASM32.lib algunos Arrayfunktionen disponible. Como XPIA esta Library eingebunden ha, kannst du ellos sin weiteres benutzen.
arr_add Add a integer to every member of a DWORD array arr_mul Multiply every member of a DWORD array by a integer arr_sub Subtract a integer from every member of a DWORD array create_array Crear a array of pointers to a user defined array
Näheres dazu findest du en el MASM32-Paket en help/masmlib32.hlp |
|
|
| |
|
|
|
 GDL | ¡Hola Franco,
hast bastante,verstehe dies todavía no bastante.Posesiones momentan con el jetztigen Fassung genug Stress.(Hardware redactar). Kann gesundheitlich no mehr así viel. Werde aber drann bleiben, como siempre mehr Miembros el Prog haben querer, aber teilweise sólo 486DX33 Rechner (Modellbahnrechner sólo) haben. Tal vez könnten nosotros a veces Skype unterhalten, si du möchtest?
Servus Georg |
|
|
| |
|
|
|
 Frank Abbing | Natürlich, gerne. Usted findest mich hay bajo el Namen grasshopper64 |
|
|
| |
|
|
|
 Michael Wodrich | Hmm, , Im Herbst no mehr en el Gras unterwegs?  |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 18.10.2006 ▲ |
|
|
|
|
 GDL | ¡Hola Franco,
bekomme lo como en el ersten Antwortposting no en el Reihe.Posesiones aber en uno Kopie de betrieb angefangen mittels Data a trabajo y el Rückgabewert entonces en Profano en el Array a escribir.Funzt auch. Posesiones ahora una kleines Warmstartprogramm vorweg dass el Festplattenwerte en el Datapositionen schreibt.In Zusammenarbeit con meiner RAMdisk wesentlich más rápido como vorher. Zwar no Königsweg, pero va versuchsweise ya bastante bien.GDL eben.
Servus Georg |
|
|
| |
|
|
|
 Frank Abbing | Wenns se ejecuta. En Rückschau en ältere Code de me bemerke Yo auch oft, dass Yo manches heute anders lösen sería. Man lernt eben siempre dazu, y genauso se lo dir auch ergehen, si du deinen Code en 2-3 Jahren ansiehst.  |
|
|
| |
|
|