| 
	
		|  Autor | Tema: Pasar programa C a ensamblador  (Leído 39,053 veces) |  
	| 
			| 
					
						| dreams88 
								
								 Desconectado 
								Mensajes: 1
								
								
								
								
								
								   | 
 
¡Hola!
 Me gustaría pasar este programa de C a ensamblador subDLX. El programa es el siguiente:
 
 #include <studio.h>
 
 #define N 10 /*tamaño de los vectores*/
 
 main ()
 {
 int v1[N]={2, 5, 7, 9, 10, 10, 9, 8, 7, 5};
 int v2[N];
 int x=0, suma1=0, suma2=0;
 
 while (x<N) {
 
 suma1+=v1(x);    /*Tendria q ser corchetes en (x) pero m sale mal*/
 if (v1(x)>5) v2(x)=5;
 else v2(x)=v1(x);
 suma2+=v2(x);
 x++
 }
 
 }
 
 ¿Alguien podría ayudarme?
 
 Muchas gracias y un saludo
 
 
 |  
						| 
								|  |  
								| « Última modificación:  7 Febrero 2009, 12:16 pm por dreams88 » |  En línea | 
 
 |  |  |  | 
			| 
					
						| Ragnarok | 
 
Claro, pero antes lee las normas. 
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| Arkangel_0x7C5 
								 
								
								 Desconectado 
								Mensajes: 361
								
								   | 
 
pues si no sabes se ASM, lo mas facil es copilarlo y en los parametros para el compilador le pones el que te lo deja en asm o compilarlo y despues desemsamblarlo |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| Shrick 
								
								 Desconectado 
								Mensajes: 259
								
								 
								Yo no se nada, sino ¿porque pregunto?
								
								
								
								
								
								   | 
 
El gcc no convertía el código a ensamblador antes de enlazar? |  
						| 
								|  |  
								|  |  En línea | 
 
 Ubuntu User Pascal (2008/2009) C/C++ (2009/¿?) 8080 Assembler (2009/2010) MIPS I Assembler (2010/¿?) Todo lo que yo haga o diga esta bajo:  No pertenece ni a mi ni a nadie    . |  |  |  | 
			| 
					
						| -Ramc- 
								 
								
								 Desconectado 
								Mensajes: 495
								
								   | 
 
El gcc no convertía el código a ensamblador antes de enlazar?
 Sí, con el flag -s te da el código en asm. |  
						| 
								|  |  
								|  |  En línea | 
 
  Shhh... be vewy, vewy, quiet!  I'm hunting wabbits... LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL. |  |  |  | 
			| 
					
						| bizco 
								 
								
								 Desconectado 
								Mensajes: 698
								
								
								
								
								
								   | 
 
pero tampoco es tan dificil pasarlo. v1    db 2,5,7,9,0Ah,0Ah,9,8,7,5v2    db 10 dup(0)
 x     db 0
 suma1 db 0
 suma2 db 0
 
 mov ecx,0Ah
 bucle:
 aqui pones lo demas que no tiene mayor complicacion. si no, hay que leer mas.
 loop bucle
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| D4RIO 
								       
								
								 Desconectado 
								Mensajes: 1.004
								
								 
								U N I X
								
								
								
								
								
								     | 
 
@ctlon: El code que pones no es ni similar al que se generaría, y por lo tanto no es correcto pasar el programa asi.... Debes crear la pila del main() para luego reservar los int e inicializar los datos inicializados al inicio. Para eso guardas la dirección de retorno y todo eso y luego de guardar ebp lo pones con esp. A parte de eso creo que es bueno crear en la pila local 4 bytes de más para poner 2 punteros a los vectores... así es más simple acceder por subíndices, y también pasar los punteros como argumentos Ahora que tienes la pila local a main reservas memoria... o sea restas 4*10 y 4*10 por los dos vectores, más 4*3 por las variables x, suma y suma2, y luego 2*2 por los dos punteros. A eso le inicializas los datos con MOV y accedes a las variables por EBP....    Salu2 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| >FedeX< | 
 
También se puede sin el EBP. Claro que tiene sus inconvenientes, pero puedes usar el EBP para otra cosa    (claro, con su respectivo push al principio) N = 10main:	sub	ESP,(N*4)+(N*4)+(3*4) ; Todas las variables	mov	DWORD PTR SS: ESP,2	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	mov	DWORD PTR SS: ESP+84,0 ; Supongo que quieres inicializar este a 0	mov	DWORD PTR SS: ESP+80,0 ; Supongo que quieres inicializar este a 0	jmp	.bucle	.bucle2:	mov	EAX,DWORD PTR SS: ESP+80	shl	EAX,2	add	EAX,ESP	mov	EAX,DWORD PTR SS: EAX	add	DWORD PTR SS: ESP+84,EAX ; Suma1 += v1[x]	cmp	EAX,5	jbe	.comparo1	mov	EAX,DWORD PTR SS: ESP+80	shl	EAX,2	add	EAX,ESP	add	EAX,40	mov	DWORD PTR SS: EAX,5	jmp	.comparo1e	.comparo1:	mov	EDX,DWORD PTR SS: ESP+80	shl	EDX,2	add	EDX,ESP	add	EDX,40	mov	DWORD PTR SS: EDX,EAX	.comparo1e:	INC	DWORD PTR SS: ESP+80	.bucle:	cmp	DWORD PTR SS: ESP+80,N	jb	.bucle2	add	ESP,(N*4)+(N*4)+(3*4) ; Todas las variables	ret
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| Arkangel_0x7C5 
								 
								
								 Desconectado 
								Mensajes: 361
								
								   | 
 
pero tampoco es tan dificil pasarlo.
 pero se supone que el que lo pregunto no sabe ASM para pasarlo a mano, el pregunto que como pofia traducirlo, porque seguramente quiere pasar otra cosa a ASM, por eso pienso yo que es mas util que le digamos como puede traducir cualquier code a ASM en vez de hacerle nosotros la traduccion XAO |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| D4RIO 
								       
								
								 Desconectado 
								Mensajes: 1.004
								
								 
								U N I X
								
								
								
								
								
								     | 
 
@>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. De todas formas te falta inicializar una de las variables... fijate que es: int v1[N]={2, 5, 7, 9, 10, 10, 9, 8, 7, 5};int v2[N];int x=0, suma1=0, suma2=0;
 Con lo que son 10 inicializaciones para los valores del arreglo v1, más las tres inicializaciones para x, suma1 y suma2... 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++) . |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  |  |  
 
	
 
 
				
					
						| 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,447 |  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
 |    |