| |
|
|
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
|
|
|
| |
|
|
|
| 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:
escribir aber genauso auch:
Das gilt para procs como para nprocs. |
|
|
| |
|
|
|
funkheld | Hmm.., con push y pop ändert se el Ergebnis no.
Gruss
|
|
|
| |
|
|
|
| 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. |
|
|
| |
|
|
|
| Noch una kleiner TIP: kannst Usted komplett fallen dejar como el Rückgabewert el en EAX abgelegte Valor es. So auch en Windows-APIs. |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
| 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:
{$cleq}
nProc test.ifgleich
parámetros v&,w&
mov eax,1
mov ebx,v&
mov ecx,w&
cmp ebx,ecx
je uebersprung
mov eax,0
uebersprung:
ENDPROC
nProc test.ifkleiner
parámetros v&,w&
mov eax,1
mov ebx,v&
mov ecx,w&
cmp ebx,ecx
jl uebersprung
mov eax,0
uebersprung:
ENDPROC
nProc test.whileZaehle
parámetros v&
mov ebx,v&
xor ecx,ecx
anfang:
add ecx,1
'schleifenkörper, ecx es hier 1 a 10
cmp ecx,ebx
jge uebersprung
jmp anfang
uebersprung:
mov eax,ecx
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 son de:
0 1 1 0 10 wobei eben dies hier sí selbes Ergebis liefert:
y dies hier una optimiertere Variante su es:
y lo todavía kürzer va:
y lo auch todavía "cooler" va:
Hoffe hilft. |
|
|
| |
|
|
|
funkheld | Sí danke, el sieht sí bien de. Das son schöne Beispiele, el Yo bien anwenden kann.
Gracias.
Gruss |
|
|
| |
|
|