Autor
|
Tema: Pasar programa C a ensamblador (Leído 36,561 veces)
|
>FedeX<
|
De todas formas te falta inicializar una de las variables...
Todas están inicializadas, solo se me olvidó suma2, que no le dí uso... Igual es un buen aporte puesto que es totalmente válido hacerlo así... pero me pregunto ¿porque no haces el bucle usando ECX?.... esta mal codificado, pero el bucle es un for( x=0 ; x<N ; x++).
Es cierto, pero si hubiese llamadas dentro del bucle, el contador podría perderse... Entonces así estaría mejor N = 10 main: sub ESP,(N+N+2)*4 ; Todas las variables mov DWORD PTR SS: ESP,2 ; v1[0] mov DWORD PTR SS: ESP+4,5 mov DWORD PTR SS: ESP+8,7 mov DWORD PTR SS: ESP+12,9 mov DWORD PTR SS: ESP+16,10 mov DWORD PTR SS: ESP+20,10 mov DWORD PTR SS: ESP+24,9 mov DWORD PTR SS: ESP+28,8 mov DWORD PTR SS: ESP+32,7 mov DWORD PTR SS: ESP+36,5 ; v1[9] mov DWORD PTR SS: ESP+80,0 ; Suma1 mov DWORD PTR SS: ESP+84,0 ; Suma2 mov ECX,N-1 .bucle: mov EAX,ECX shl EAX,2 add EAX,ESP mov EAX,DWORD PTR SS: EAX add DWORD PTR SS: ESP+80,EAX ; Suma1 += v1[x] cmp EAX,5 jbe .comparo1 mov EAX,ECX shl EAX,2 add EAX,ESP add EAX,40 mov DWORD PTR SS: EAX,5 add DWORD PTR SS: ESP+84,5 ; Suma2 += v2[x] jmp .comparo1e .comparo1: mov EDX,ECX shl EDX,2 add EDX,ESP add EDX,40 mov DWORD PTR SS: EDX,EAX add DWORD PTR SS: ESP+84,EAX ; Suma2 += v2[x] .comparo1e: DEC ECX cmp ECX,-1 jne .bucle add ESP,(N+N+2)*4 ; Todas las variables ret
|
|
« Última modificación: 11 Febrero 2009, 20:17 pm por >FedeX< »
|
En línea
|
|
|
|
dark_hat
Desconectado
Mensajes: 185
|
@>FedeX<: El problema con acceder a las variables subiendo por el stack es que no puedes mover el stack pointer de donde está, y si haces push o pop en algún momento todos los accesos a las variables deberían cambiar su offset respecto de éste.
Una puntualización, a las variables de la pila se accede por EBP, y push y pop modifican ESP, por lo que no pasa nada por hacer push o pop a la hora de acceder a las variables locales.
|
|
|
En línea
|
Eso que huele es un poco de incienso, eso marrón una tableta de turrón...
|
|
|
D4RIO
Desconectado
Mensajes: 1.004
U N I X
|
@dark_hat: Tenes toda la razon, pero... yo me referia el code que posteo >FedeX< en el que no se hace uso del EBP sino del ESP ... Precisamente porque normalmente el acceso a las variables es en la pila y usando EBP, pero como bien postea >FedeX<, en éste caso no es necesario y se puede dejar a EBP libre. @>FedeX< : Es cierto, pero si hubiese llamadas dentro del bucle, el contador podría perderse... Normalmente las funciones solo modificarán el registro EAX, y para retornar datos >4bytes usarán punteros. De todas formas se puede guardar ECX en el stack si una función trata de modificarlo... .comparo1e: DEC ECX cmp ECX,-1 ; <<<<<<<<<<<<<<<<< WTH! jne .bucle
Pero para que usar ECX si vas a usar CMP??? Usa ECX y la orden LOOP ... ese es el uso correcto por el que ECX es el registro contador... Cuando tenga tiempo lo hago y se los paso... ahora estoy saliendo del trabajo.. bye guys!!
|
|
|
En línea
|
|
|
|
>FedeX<
|
.comparo1e: DEC ECX cmp ECX,-1 ; <<<<<<<<<<<<<<<<< WTH! jne .bucle
Pero para que usar ECX si vas a usar CMP??? Usa ECX y la orden LOOP ... ese es el uso correcto por el que ECX es el registro contador... Cuando tenga tiempo lo hago y se los paso... ahora estoy saliendo del trabajo.. bye guys!! Eso habia hecho pero.... Reemplazé la variable x por ECX... Entonces coloqué: y no v1 va solo de - a [9]... Es por eso que ECX inicializo como 9 (N-1)
Ese N-1 hace que loop cuente 9 veces... Del 9 al 1
|
|
|
En línea
|
|
|
|
D4RIO
Desconectado
Mensajes: 1.004
U N I X
|
Eso lo entendi, pero la instrucción loop es precisamente para evitar usar un dec, un cmp un jump... es algo trivial, pero si se puede hacer mejor... just do it!
S2
|
|
|
En línea
|
|
|
|
Arkangel_0x7C5
Desconectado
Mensajes: 361
|
pero en los procesadores actuales tarda menos hacer bucle: ..... ..... ..... dec ecx cmp ecx,0 jne bucle
que un loop Al parecer han abandonado un poco el loop
|
|
|
En línea
|
|
|
|
dark_hat
Desconectado
Mensajes: 185
|
pero en los procesadores actuales tarda menos hacer bucle: ..... ..... ..... dec ecx cmp ecx,0 jne bucle
que un loop Al parecer han abandonado un poco el loop O!, curioso, siempre se aprende algo. http://www.gui.uva.es/udigital/ap06.html
|
|
|
En línea
|
Eso que huele es un poco de incienso, eso marrón una tableta de turrón...
|
|
|
D4RIO
Desconectado
Mensajes: 1.004
U N I X
|
Oh!!
|
|
|
En línea
|
|
|
|
Ragnarok
|
pero en los procesadores actuales tarda menos hacer bucle: [...] jne bucle
que un loop ¿por? ¿cuánto tarda cada cosa?
|
|
|
En línea
|
|
|
|
dark_hat
Desconectado
Mensajes: 185
|
¿por? ¿cuánto tarda cada cosa?
Mira la web que puse: http://www.gui.uva.es/udigital/ap06.htmlLos datos que hay son para 486 pero supongo que no habrá cambiado demasiado.
|
|
|
En línea
|
Eso que huele es un poco de incienso, eso marrón una tableta de turrón...
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Pasar 1 a PUERTO B Ensamblador
Electrónica
|
Riki_89D
|
8
|
9,062
|
29 Diciembre 2013, 23:00 pm
por pic16f84a
|
|
|
Pasar a código ensamblador [Ayuda]
ASM
|
leogtz
|
6
|
11,191
|
6 Diciembre 2011, 21:41 pm
por leogtz
|
|
|
flujo programa ensamblador
Ingeniería Inversa
|
fumioli
|
4
|
3,510
|
7 Abril 2013, 19:21 pm
por fumioli
|
|
|
Programa de leds en ensamblador (MPLAB) con PIC16F84A
Ejercicios
|
Magiiq
|
2
|
16,972
|
21 Mayo 2013, 19:15 pm
por Magiiq
|
|
|
Pasar de c++ a ensamblador
Programación C/C++
|
kur79
|
6
|
10,286
|
1 Enero 2015, 17:13 pm
por kur79
|
|