| |
|
|
GDL | Hallöle Comunidad,
como Yo mich en el Moment en 2 Projekte konzentriere, möchte Yo el RVK Basic por qué Eigenes sustituir.
Was Yo ya: - el genauen Befehlsumfang de los Microcontrolern - una funcionamiento RVK Compiler (y somit una Presentación qué de el individual Basic-Befehlen en Ensamblador voluntad se)
Wovon Yo überhaupt no Plan habe - como löst uno al Besten verschachtelte Befehle oder Schleifenroutinen en - como va uno generell al Besten antes, como zeilenweises 1 a 1 Übersetzen no va.
Tal vez kann me alguien Schützenhilfe geben.
Das Ganze Aunque una äußerst harter Brocken para mich, pero yo voluntad no por lo tanto herumkommen.
Grüßle Georg |
|
|
| |
|
|
|
| Usted musst sólo después de ASM auflösen.
So se z.B. de uno Variable una (en el Fall más feste) SpeicherAdresse, z.B. una Adresse en el Stack.
Also var a=0 Yo brauche una variable a, also push 0 y Stackadresse merken en el Kompilierer. Und si irgendwo a=22 es, entonces algo como como (ahora veces angenommen 32Bit)
push eax //eax en stack sichern push ebx //ebx en stack sichern mov eax,AdresseVonAImStack mov ebx,22 mov [eax],22 pop ebx pop eax
el puede ser natürlich kürzer, debería bloß una Bild voluntad.
Welche ASM dieser Microkontroller unterstützt weiß Yo no.
Yo schätze Schleifen y ifs son más Su Cuestión.
Also si un Puse por xpse después de assembler en sinnbildlich así:
if 10=20 //imprimir más //exit endif
se a
push eax push ebx mov eax,10 mov ebx,20 cmp eax,ebx pop eax pop ebx jne marke001más //imprimir jmp marke001end marke001más: //exit marke001end: weiterimtext...
el wäre entonces si un.
Schleifen son auch sólo si un.
mientras que 1<10 //imprimir wend
es sí auch sólo
marke002bucle: push eax push ebx mov eax,1 mov ebx,10 cmp eax,ebx pop eax pop ebx JGE marke002end //imprimir jmp marke002bucle
Tal vez hilft lo Usted Yo con xpse erzeuge, simplemente veces el asm anschauen.
Danach kannst Usted el ASM después de Opcodes auflösen. Schwieriger se el no como después de ASM aber como musst Usted en el Jumps eben auch el Sprungweiten beachten el je después de CPU/ OS Grenzen haben. |
|
|
| |
|
|
|
GDL | Hi,
soweit kapier Yo el schonmal. Mir gehts aber a allererst veces en el Reconocer y Auswerten el Presentación.
Extremfall: If (((a+7)/2)-5)+(14/c) > algo
gibts como irgendeinen algorythmus oder algo en el correcto a erkennen y luego después de punkt antes strich bajo Beachtung el Klammern aufzulösen.
oder stur el Klammern de innen después de aussen abarbeiten? |
|
|
| |
|
|
|
| Es auch bien, escribir para el Anfang una Función parseArg(ument) - así wandelt auch xpse "Profan"-Argumente después de ASM:
Ejemplo:
a=(10+20)+30
se a:
tmp1=10+20 //Klammer vorne+hinten kann siempre weggeworfen voluntad si einzige Klammern a=tmp+30
se a
tmp1=10 add tmp1,20 a=tmp add a,30
ergo finde Klammerauf y nimm todos Signo a a korrespondierenden Klammerzu. Einfach Zeichenweise parsen y en cada neu geöffneten Klammer simplemente una Zähler hochzählen y en uno Klammerzu el Zähler runtersetzen sodass auch wirklich el korrespondierende Klammer gefunden se.
So se de ((10+20)*(30+40)) dies: (10+20)*(30+40)
porque el Außenklammern simplemente otra vez weggeworfen voluntad puede porque ellos korrespondieren.
So Usted necesita una Klammernauflöser y mehrere Operatorenauflöser angewandt en el Reihenfolge Punkt, Strich
Das todo nenne Me gusta falso Argumenteauflöser.
Nochmal:
a=((10+20)*(30+40)) se a dies: a=(10+20)*(30+40)
porque el Außenklammern simplemente otra vez weggeworfen voluntad puede porque ellos korrespondieren.
Dann findet el Klammernauflöser otra vez una klammer, bastante vorne el.
Dann liesst él a a korrespondierenden Klammer alles una, findet also 10+20, merke 10+20 y 10+20 se ersetzt en tmpX (X es una Zahlenwert el simplemente hochzählt, also tmp1, tmp2...)
Ergo
a=(10+20)*(30+40)
se a
tmp1=10+20 a=tmp1*(30+40)
entonces: ni Klammer en el Argument? Sí, ergo findet el Klammernauflöser (30+40) y ersetzt lo en (diesmal) tmp2 y merkt 30+40
Ergo:
tmp1=10+20 tmp2=30+40 a=tmp1*tmp2
Noch una Klammer en el Argument? Nein, also de para Operatorenauflöser para Punktrechnung.
Ein Malzeichen en a=tmp1*tmp2? Sí, ergo linkes Argument parsen = tmp1, rechtes Argument tmp2.
Ergo:
tmp1=10+20 tmp2=30+40 tmp3=tmp1 mul tmp3,tmp2 a=tmp3
Noch una Punktrechnungsoperator? Nein, ergo más para Operatorenauflöser para Strichrechnung (arbeitet genau como el Punktrechnungsoperatorenauflöser):
Ein Plus gefunden? Sí, z.B. en tmp1=10+20. Wieder linkes y rechtes Argument encontrar, ergibt links 10 y rechts 20.
ergo, de: tmp1=10+20
se
tmp4=10 add tmp4,20 tmp1=tmp4
Nächste Línea es tmp2=30+40, otra vez una Strichrechner gefunden, ergo auflösen:
Aus: tmp2=30+40
se
tmp5=30 add tmp5,40 tmp2=tmp5
Dann se nirgends mehr una Operator gefunden, ergo kommt heraus:
tmp4=10 add tmp4,20 tmp1=tmp4 tmp5=30 add tmp5,40 tmp2=tmp5 tmp3=tmp1 mul tmp3,tmp2 a=tmp3
Das kann ligeramente después de ASM gebracht voluntad, beispiels 32bit asm:
aber el hatten wir sí oben ya.
Ist mist a erklären, sorry. |
|
|
| |
|
|
|
GDL | Hallöle,
erstmqal vielen Dank para deine Ausarbeitung. Schön langsam komme Yo detrás de él qué en RVK Singlepass1 y Singlepass2 a ..4 es.
Ist mist a erklären, sorry
Yo weiß, tu mich auch schwer el richtigen Fragen a stellen. Aber Yo beiß mich como ahora por.
Grüßle Georg |
|
|
| |
|
|
|
GDL | Hallöle David,
komme vorwärts. Variables de Code herausfiltern va ya y el Vektortabellen para el verschiedenen Devices bajo Berücksichtigung el Interrupts a redactar funzt auch ya. Bin nun a el "Befehlerkennung" y deren Umsetzung en el Arbeitsregister. Mühsam ernährt se el Eichhörnchen.
Grüßle Georg |
|
|
| |
|
|
|
GDL | Hi,
@David: Gracias para el Tips al Tele.
Erste lauffähige Codes hay ya. |
|
|
| |
|
|