Español
Ensamblador Foro

Ayuda en Profano después de Ensamblador

 

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
 
Windows7 Xprofan 8,9,10 [...]  [...] 
14.10.2006  
 




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ón
Declare 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.
 
15.10.2006  
 




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
 
Windows7 Xprofan 8,9,10 [...]  [...] 
16.10.2006  
 




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
 
17.10.2006  
 




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.
 
17.10.2006  
 




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?
 
Windows7 Xprofan 8,9,10 [...]  [...] 
17.10.2006  
 




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
 
17.10.2006  
 




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
 
Windows7 Xprofan 8,9,10 [...]  [...] 
18.10.2006  
 




Frank
Abbing
Natürlich, gerne. Usted findest mich hay bajo el Namen grasshopper64
 
18.10.2006  
 




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
 
Windows7 Xprofan 8,9,10 [...]  [...] 
27.10.2006  
 




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.
 
27.10.2006  
 



Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

11.444 Views

Untitledvor 0 min.
Tommy29.03.2022
p.specht22.02.2019
Jörg Sellmeyer25.05.2018
Chregu Mueller10.05.2015
Más...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie