Programación General > ASM (Ensamblador)

 Traduccion De Codigo C A Ensamblador.

(1/3) > >>

Instru:
Bueno, mas o menos tengo la idea, pero no se pierde por preguntar.

Una instruccion en C:
if(algo==1)
{
//hacer algo
}
else
{
//hacer otra cosa
}

A que instrucciones de ensamblador se traduciria?

SAludos

bob esponja:
usando intensivamente la pila ( que es mas facil para el compilador) seria algo asi como

push word [ dir_de_algo ] ; suponiendo que algo es un word
push 1
pop ax
pop bx
cmp ax,bx
je .l0000011 ; el label lo genera el compilador asi que el nombre es medio extraño
//hacer otra cosa
jmp .l0000012
.l0000011:
//hacer algo
.l0000012:
// aca sigue el codifo despues del else

es algo asi mi cerebro no es un compilador tan groso como GCC :P

el proceso del compilador para generarlo seria algo asi como:

lee la primera linea, la divide en tokens
lee el primer token ( if ) entonces llama a la funcion que parsea el if
la funcion espera un parentesis
llama a la funcion que parsea expresiones booleanas (  && || que son las de mas alta precedencia) empuja la primera variable a la pila
encuentra u operador
no lo conoce llama a la funcion que maneja la segunda precedencia mas alta ( == < , > , <= etc )
encuentra el == prende un flag para acordarse de que es una operacion de igual
empuja el segundo termino en la pila
encuentra el ")" no lo conoce
procesa la expresion ( cmp ) y vuelve al  manejador de && ||
encuentra el ")" vuelve para arriba al if que si conoce el ")"
espera un retorno de carro
espera una sentencia o un {
encuentra un {
espera una expresion
llama al parser de expresiones por cada expresion que encuentre hasta un }
encuentra un else
espera un if o un {
encuentra un {
espera una expresion
llama al parser de expresiones por cada expresion que encuentre hasta un }

ya esta :P

me encanta el tema de compiladores, no se si fui muy claro

Instru:
Muy muy claro. Estuvo bastante bien la respuesta.
Solo me quedo una duda. Yo el ensambldor que manejo no es x86 entonces no se que significan unas de las instruccions, pero namas para aclarar dudas.
je .10 salta a .10 si el flag zero esta prendido?

Saludos

bob esponja:
si
je es jmp on equal, el cmp lo que hace es resta bx de ax y prende los flags.
je es lo mismo que jz porque si son iguales la resta da cero y se prende el flag de zero

Eternal Idol:
Como nota graciosa les comento que este codigo hoy en dia no genera ni una instruccion en un buen compilador ya que estan muy optimizados  :devil:

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa