Loops on Assembly
Lucas Carpio
For-loops
For-loop en C
for(int x = 0; x<=3; x++)
{
    //Do something!
}For-loop en assembly
        xor cx,cx   ; cx-register is the counter, set to 0
loop1   nop         ; Whatever you wanna do goes here, should not change cx
        inc cx      ; Increment
        cmp cx,3    ; Compare cx to the limit
        jle loop1   ; Loop while less or equalFor-loops (2)
Si solo necesitas hacer algo 0-3=4 veces, pero no necesitas el index, seria mas fácil de esta manera:
        mov cx,4    ; 4 iterations
loop1   nop         ; Whatever you wanna do goes here, should not change cx
        loop loop1  ; loop instruction decrements cx and jumps to label if not 0For-loops (3)
Si se decesa ejecutar una simple instruccion, por una cantidad de veces constantes, se puede utilizar un assembler-directive para hardcodear esa instruccion
times 4 nopDo-while-loops
Do-while-loop en C
int x=1;
do{
    //Do something!
}
while(x==1)        mov ax,1
loop1   nop         ; Whatever you wanna do goes here
        cmp ax,1    ; Check wether cx is 1
        je loop1    ; And loop if equal
Do-while-loop en assembly
While-loops
While-loop en C
while(x==1){
    //Do something
}
        jmp loop1   ; Jump to condition first
cloop1  nop         ; Execute the content of the loop
loop1   cmp ax,1    ; Check the condition
        je cloop1   ; Jump to content of the loop if met
While-loop en assembly
Recomendaciones
- Para for-loops se toman los cx-register como estandar.
- Para las demas loop conditions puedes tomar cualquiera de tu preferencia.
Call on Assembly
Raul Ovalle
Call
Nos permite ejecutar un procedimiento repetidas veces en diversos momentos del programa sin necesidad de reescribir las mismas instrucciones una y otra vez.
Llamada sencilla
Sin argumentos ni parámetros, en ocasiones se usan variables globales. Es también la mas sencilla de aprender.
call sumar
mov [C], eax
sumar
mov	eax,[A]
add	eax, [B]
ret
Llamada con argumentos
Es lo que hasta ahora hemos hecho con la instrucción PUSH en las llamadas a la API de Windows. Podemos darle datos de entrada
push	[B]
push	[A]
call	sumar
mov	[C], eax
sumar
push	ebp
mov	ebp,esp
virtual at ebp
.ebp_anterior	dd	?
.Retorno	dd	?
.local_A	dd	?
.local_B	dd	?
end virtual
mov	eax, [local_A]
add	eax, [local_B]
leave
ret	8Llamada con Stack Frame
Esta es la mas dificil e interesante, pues nos permite hacer lo mismo que se hace con los lenguajes como C, con variables locales, recursión, y argumentos de entrada.
push	dword [B]
push	dword [A]
call	sumar
sumar:
push	ebp
mov	ebp, esp
sub	esp, 4
virtual	at ebp – 4
.resultado	dd	?
.ebp_anterior	dd	?
.retorno	dd	?
.local_A	dd	?
.local_B	dd	?
end virtual
mov	eax, [.local_A]
add	eax, [.local_B]
mov	[.resultado], eax
leave
ret	8Loops on Assembler
By Lucas Carpio
Loops on Assembler
- 1,209
 
   
   
  