Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. .file "ctoassembler.c"  // nombre de el archivo y su extensión
  2.  .def ___main; .scl 2; .type 32; .endef
  3.  .text             // comienza el texto
  4. .globl _main              //define main como global
  5.  .def _main; .scl 2; .type 32; .endef
  6. _main:
  7.  pushl %ebp         //instrucciones de pila
  8.  movl %esp, %ebp   // Instrucciones de transferencia Son utilizadas para mover los contenidos de los
  9.  subl $8, %esp  // Proposito Sustraccion  y su sintaxis es sub destino, fuente Resta el operando fuente del destino.
  10.  andl $-16, %esp // Realiza la conjunción de los operandos bit por bit. Sintaxis: AND destino,
  11.  movl $0, %eax
  12.  addl $15, %eax //Adición.Sintaxis: ADD destino, fuente Suma dos operandos.
  13.  addl $15, %eax
  14.  shrl $4, %eax
  15.  sall $4, %eax
  16.  movl %eax, -4(%ebp)
  17.  movl -4(%ebp), %eax
  18.  call __alloca
  19.  call ___main    // Los Call son llamadas a subrutinas ejemplo llamada a main
  20.  call _Cabecera
  21.  call _SeleccionDatos
  22.  leave
  23.  ret          // Termina el programa
  24.  .section .rdata,"dr"
  25.  .align 4
  26. LC0:
  27.  .ascii "\11\11===============================\12\0" //Texto mostrado en pantalla
  28.  .align 4
  29. LC1:
  30.  .ascii "\11\11| AREAS DE FIGURAS GEOMETRICAS|\12\0"
  31.  .align 4
  32. LC2:
  33.  .ascii "\11\11===============================\12\12\0"
  34.  .text
  35. .globl _Cabecera
  36.  .def _Cabecera; .scl 2; .type 32; .endef
  37. _Cabecera:
  38.  pushl %ebp
  39.  movl %esp, %ebp
  40.  subl $8, %esp
  41.  movl $LC0, (%esp)
  42.  call _printf   // Todos los CALL son llamadas a subrutinas
  43.  movl $LC1, (%esp)
  44.  call _printf
  45.  movl $LC2, (%esp)
  46.  call _printf
  47.  leave
  48.  ret
  49.  .section .rdata,"dr"
  50. LC3:
  51.  .ascii " Area de cuadrado\12\0"
  52.  .align 4
  53. LC4:
  54.  .ascii "Ingresa el tamano de el lado del cuadrado -> \12\12\0"
  55. LC5:
  56.  .ascii "%d\0"
  57. LC6:
  58.  .ascii "El area de el cuadrado es %d \0"
  59.  .text
  60. .globl _SeleccionDatos
  61.  .def _SeleccionDatos; .scl 2; .type 32; .endef
  62. _SeleccionDatos:
  63.  pushl %ebp
  64.  movl %esp, %ebp
  65.  subl $24, %esp
  66.  movl $0, -4(%ebp)
  67.  movl $0, -8(%ebp)
  68.  movl $0, -12(%ebp)
  69.  movl $LC3, (%esp)
  70.  call _printf
  71.  movl $LC4, (%esp)
  72.  call _printf
  73.  leal -12(%ebp), %eax
  74.  movl %eax, 4(%esp)
  75.  movl $LC5, (%esp)
  76.  call _scanf
  77.  movl -12(%ebp), %eax
  78.  imull -12(%ebp), %eax //Propósito: Multiplicación de 2 enteros con signo.Sintaxis:IMUL fuente , toma en
  79.                                                             //cuenta los signos de las cantidades que se multiplican.  movl %eax, -8(%ebp)
  80.  movl -8(%ebp), %eax
  81.  movl %eax, 4(%esp)
  82.  movl $LC6, (%esp)
  83.  call _printf
  84.  call _getche
  85.  call _getche
  86.  movl $0, %eax
  87.  leave
  88.  ret
  89.  .def _getche; .scl 2; .type 32; .endef
  90.  .def _scanf; .scl 2; .type 32; .endef
  91.  .def _printf; .scl 2; .type 32; .endef
  92.  .def _SeleccionDatos; .scl 2; .type 32; .endef
  93.  .def _Cabecera; .scl 2; .type 32; .endef