.file "ctoassembler.c" // nombre de el archivo y su extensión
.def ___main; .scl 2; .type 32; .endef
.text // comienza el texto
.globl _main //define main como global
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp //instrucciones de pila
movl %esp, %ebp // Instrucciones de transferencia Son utilizadas para mover los contenidos de los
subl $8, %esp // Proposito Sustraccion y su sintaxis es sub destino, fuente Resta el operando fuente del destino.
andl $-16, %esp // Realiza la conjunción de los operandos bit por bit. Sintaxis: AND destino,
movl $0, %eax
addl $15, %eax //Adición.Sintaxis: ADD destino, fuente Suma dos operandos.
addl $15, %eax
shrl $4, %eax
sall $4, %eax
movl %eax, -4(%ebp)
movl -4(%ebp), %eax
call __alloca
call ___main // Los Call son llamadas a subrutinas ejemplo llamada a main
call _Cabecera
call _SeleccionDatos
leave
ret // Termina el programa
.section .rdata,"dr"
.align 4
LC0:
.ascii "\11\11===============================\12\0" //Texto mostrado en pantalla
.align 4
LC1:
.ascii "\11\11| AREAS DE FIGURAS GEOMETRICAS|\12\0"
.align 4
LC2:
.ascii "\11\11===============================\12\12\0"
.text
.globl _Cabecera
.def _Cabecera; .scl 2; .type 32; .endef
_Cabecera:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
movl $LC0, (%esp)
call _printf // Todos los CALL son llamadas a subrutinas
movl $LC1, (%esp)
call _printf
movl $LC2, (%esp)
call _printf
leave
ret
.section .rdata,"dr"
LC3:
.ascii " Area de cuadrado\12\0"
.align 4
LC4:
.ascii "Ingresa el tamano de el lado del cuadrado -> \12\12\0"
LC5:
.ascii "%d\0"
LC6:
.ascii "El area de el cuadrado es %d \0"
.text
.globl _SeleccionDatos
.def _SeleccionDatos; .scl 2; .type 32; .endef
_SeleccionDatos:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
movl $0, -4(%ebp)
movl $0, -8(%ebp)
movl $0, -12(%ebp)
movl $LC3, (%esp)
call _printf
movl $LC4, (%esp)
call _printf
leal -12(%ebp), %eax
movl %eax, 4(%esp)
movl $LC5, (%esp)
call _scanf
movl -12(%ebp), %eax
imull -12(%ebp), %eax //Propósito: Multiplicación de 2 enteros con signo.Sintaxis:IMUL fuente , toma en
//cuenta los signos de las cantidades que se multiplican. movl %eax, -8(%ebp)
movl -8(%ebp), %eax
movl %eax, 4(%esp)
movl $LC6, (%esp)
call _printf
call _getche
call _getche
movl $0, %eax
leave
ret
.def _getche; .scl 2; .type 32; .endef
.def _scanf; .scl 2; .type 32; .endef
.def _printf; .scl 2; .type 32; .endef
.def _SeleccionDatos; .scl 2; .type 32; .endef
.def _Cabecera; .scl 2; .type 32; .endef