Español
Foro

Bekomme falsches Ergebnis en XPSE en el Bucle.

 

funkheld
¡Hola, guten Tag, Yo una Problema.
¿Por qué kommt unten el Ergenis 6 fuera?
Wenn Yo el Whilelloop rausnehme kommt correcto 9 fuera.

Gracias.
Gruss
 
18.04.2012  
 



Usted musst su ausgehen, dass Windows-APIs como XPSE-Características
como Kontrollstrukturen el ASM-Registerwerte ändern porque ellos con ihnen trabajo.

Möchte uno con esta Werten trabajo entonces debería uno ellos z.B. con push y pop
sichern/ wiederherstellen. En manchen APIs es dies incluso explizit notwenwie z.B.
en LineDDA oder manch otro ENUM-Procs.

Würdest Su Bucle also después de cmp o. test y jmp o. jle oder jl ajustar -
also sin Mientras que, entonces würden auch el Registerwerte no beeinflusst oder nutze
eben push y pop.

Übrigens... je después de el qué una liegt...

Usted puede natürlich:
nproc Addi(long x,y){ ... }


escribir aber genauso auch:

Das gilt para procs como para nprocs.
 
18.04.2012  
 




funkheld
Hmm.., con push y pop ändert se el Ergebnis no.

Gruss
 
18.04.2012  
 



Das WhileLoop y Wend nutzt ebenso mindestens eax y ebx,

si entonces müsstest dein add eax,ebx abkapseln aber Usted puede wiederum
auch no su ausgehen dass el mientras que el ebx Valor unverändert en el Bucle
durchlässt.

In diesem Fall eignet se el Mischen con ASM no. Das wiederum es wohl en allen
"ehrlichen" nativen Programmiersprachen el Fall y eben auch así en Windows-APIs
en una Más a Geschwindigkeit a erreichen o. en no unnötig Registerwerte a sichern.

Usted könntest aber Su Bucle (also el mientras que wend) auch komplett después de asm
umsetzen (como oben geschrieben) con cmp o. test(-asm)-Anweisungen.

Si usted schreibst ¿qué es exactamente Usted erreichen möchtest entonces kann Yo Usted el
ASM dazu auch aufschreiben.
 
18.04.2012  
 



Noch una kleiner TIP:
kannst Usted komplett fallen dejar como el Rückgabewert
el en EAX abgelegte Valor es. So auch en Windows-APIs.
 
18.04.2012  
 




funkheld
Jup, danke.
eax Yo rausgelassen, ahora funktioniert lo.

Aber dieses funktioniert no con el typischen MASM oder JWASM-SChleife:

Der XPIA sabe esta typische Bucle otra vez.

Gruss
 
18.04.2012  
 




funkheld

cmp o. test y jmp o. jle oder jl


Wenn du veces Por favor, una ASM-Demo hacer könntest para XPSE, welches una if-Bucle, una Whileloop-Bucle y una Mientras que-Bucle darstellt, así podría Yo entonces viel con anfangen.

Gracias.

Gruss
 
18.04.2012  
 



Morgen,

como hier (  [...]  ) ya geschrieben kannst Usted if, mientras que, whileloop simplemente direkt uso
sin la deutlich schmächtigere High-Level-Syntax (HLS) de jwasm.

Ein pocos plakativ-gestaltete ASM-Beispiele para if, mientras que y Zählschleife sin HLS
könnten así aussehen:
y son de:

0
1
1
0
10

wobei eben dies hier sí selbes Ergebis liefert:

y dies hier una optimiertere Variante su es:
 {$cleq}

nProc test.ifgleich

    parámetros v&,w&
    caso v&=w& : volver 1
    volver 0

ENDPROC

nProc test.ifkleiner

    parámetros v&,w&
    caso v&<w& : volver 1
    volver 0

ENDPROC

nProc test.whileZaehle

    parámetros v&

    whileloop v&

        'schleifenkörper

    wend

    sub eax,1'<-- no wichtig, sólo kosmetisch así 10 zurück gegeben se

ENDPROC

cls
imprimir test.ifgleich(9,10)
imprimir test.ifgleich(10,10)
imprimir test.ifkleiner(9,10)
imprimir test.ifkleiner(10,10)
imprimir test.whileZaehle(10)
waitInput
end

y lo todavía kürzer va:
 {$cleq}

nProc test.ifgleich

    parámetros v&,w&
    volver v&=w&

ENDPROC

nProc test.ifkleiner

    parámetros v&,w&
    volver v&<w&

ENDPROC

nProc test.whileZaehle

    parámetros v&

    whileloop v&

        'schleifenkörper

    wend

    sub eax,1'<-- no wichtig, sólo kosmetisch así 10 zurück gegeben se

ENDPROC

cls
imprimir test.ifgleich(9,10)
imprimir test.ifgleich(10,10)
imprimir test.ifkleiner(9,10)
imprimir test.ifkleiner(10,10)
imprimir test.whileZaehle(10)
waitInput
end

y lo auch todavía "cooler" va:
 {$cleq}

nProc test.ifgleich(long v,w){ volver v&==w& }

nProc test.ifkleiner(long v,w){ volver v&<w& }

nProc test.whileZaehle(long v){

    whileloop v {

        'schleifenkörper

    }

    sub eax,1'<-- no wichtig, sólo kosmetisch así 10 zurück gegeben se

}

cls
imprimir test.ifgleich(9,10)
imprimir test.ifgleich(10,10)
imprimir test.ifkleiner(9,10)
imprimir test.ifkleiner(10,10)
imprimir test.whileZaehle(10)
waitInput
end

Hoffe hilft.
 
19.04.2012  
 




funkheld
Sí danke, el sieht sí bien de.
Das son schöne Beispiele, el Yo bien anwenden kann.

Gracias.

Gruss
 
19.04.2012  
 



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.563 Views

Untitledvor 0 min.
funkheld29.07.2017
iF28.11.2014
mein02.06.2013
Andreas Koch14.01.2013
Más...

Themeninformationen

Dieses Thema ha 2 subscriber:

funkheld (5x)
iF (4x)


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