Hola, no uso mucho el "lenguaje" ensamblador y cada vez que intento estudiarlo por internet (intento buscar libros o manuales un poco más "avanzados" que los que se suelen encontrar en internet (esos que no hacen más nada que explicar la arquitectura del Intel 8086) cuando busco algo más hacia el i386, en si me salen cosas muy "basicas". Por cierto, por favor si alguien conoce algún sitio web o libro para buscar en PDF que explique un lenguaje ensamblador que no haya sido desarrollado antes del año 1985 (i386 o i486), estaria muy agradecido :-\. Pero la pregunta en si es la siguiente:
Yo sé que el código de C:
unsigned int a;
int main()
{
a = 1;
return 0;
}
Se puede traducir a asm i386 como:
a dw 0
jmp start
start:
mov a, 1
ret
Pero un código así:
unsigned int a;
int main()
{
int b = 0;
b = 1;
a = 1;
return 0;
}
Si las variables globales se declaran
<Nombre> dw <valor>
Como se declara una local ya que se declara metiéndola en el stack?, Así?:
A dw 0
jmp start
start:
mov a, 0
;Así se declararía la variable (b)?
mov ax, 0
push ax
;Y cuando se quisiera acceder a ella se haría algo asi?:
mov ss:[bp+sp], 1; b = 1
Pd: necesito aprender sobre compiladores...
Saludos
No, no intentes pasar el código así tal cual, intenta aprender antes, ensamblador no es como C, en ASM se tiene que declarar secciones y usar etiquetas de inicio, yo mismo estoy escribiendo a cerca de aprender asm en i386 http://foro.elhacker.net/asm/curso_ensamblador-t462931.0.html
Por otra parte tambien te comento, que puedes decompilar el código para ver que contiene, no te recomiendo que aprendas así, pero siempre puedes ir probando
https://github.com/radare/radare2
Tu blog se ve muy interesante, si tienes razón en Internet se encuentra muy poca documentación sobre ese tipo de ensamblador, siempre ese condenado 8086, que Internet no entiende que ya nadie lo utiliza??? XD.
Saludos y gracias por tu ayuda!!
Pues yo cuando estaba aprendiendo encontré mucho de i386, igualmente, los fundamentos en 8086 son los mismos tanto en i386 como en 64
Puedes declarer la variable en su sección correspontidente, e incluso si solo es para leer en el mismo cuerpo del codigo.
Hay muchas formas de pasar esa variable:
.section .data
a: .word 0x01
push $0x1
subl $4, %esp
movl $1, (%esp)
; esta mejor
movl $1, -4(%esp)
Libros tienes un monton solo haciendo una busqueda por amazon mira lo que encontre.
https://www.amazon.es/dp/1484200659/ref=pd_sim_14_1?_encoding=UTF8&psc=1&refRID=6BHJXT0J67B4FSRH8QDD
https://www.amazon.es/Introduction-Intel-Assembly-Language-Programming/dp/1478119209
Asi unos cuantos.
Un saludo.