| 
	
		|  Autor | Tema: Pasar programa C a ensamblador  (Leído 39,054 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 = 10main:	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 ecxcmp ecx,0jne 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 ecxcmp ecx,0jne bucle 
 que un loop Al parecer han abandonado un poco el loopO!, 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.html Los 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,729 |  29 Diciembre 2013, 23:00 pm por pic16f84a
 |  
						|   |   | Pasar a código ensamblador [Ayuda] ASM
 | leogtz | 6 | 11,758 |  6 Diciembre 2011, 21:41 pm por leogtz
 |  
						|   |   | flujo programa ensamblador Ingeniería Inversa
 | fumioli | 4 | 3,937 |  7 Abril 2013, 19:21 pm por fumioli
 |  
						|   |   | Programa de leds en ensamblador (MPLAB) con PIC16F84A Ejercicios
 | Magiiq | 2 | 17,448 |  21 Mayo 2013, 19:15 pm por Magiiq
 |  
						|   |   | Pasar de c++ a ensamblador Programación C/C++
 | kur79 | 6 | 10,818 |  1 Enero 2015, 17:13 pm por kur79
 |    |