typestar

Fundamentos del lenguaje

31 pasos en 9 series de Assembly.

El ensamblador es el piso sobre el que se paran todos los demás lenguajes: instrucciones que el procesador ejecuta directo, registros en vez de variables, banderas en vez de booleanos, y syscalls donde estaría un runtime. Este tour habla NASM para x86-64 Linux — el dialecto de la mayoría de los tutoriales y de la cultura osdev — y cada fragmento es un programa completo que ensambla, enlaza y corre, la mayoría entregando su respuesta calculada como código de salida: la manera propia de la máquina de devolver un valor.

La ruta va del exit de cinco líneas al vocabulario de trabajo completo: mov y las vistas de registros, add hasta div con el doble turno de rdx, secciones de datos con db/dw/dq y equ, la forma de bucle cmp-y-salto, direccionamiento escalado sobre arreglos, push/pop y el par call/ret, la aritmética gratis de lea, trabajo de strings byte a byte, cmov y setcc para lógica sin saltos, complemento a dos, tablas de salto, y el marco de pila con rbp que todo compilador emite. El Bis son tres programas honestos: un impresor decimal sobre div, FizzBuzz hablado en restos, y un triángulo de bucles anidados.

Empieza este tour

Primeros programas

Aritmética

  • add y subAritmética en el lugar: el primer operando es el destino.
  • mul y divMultiplicación y división viven en rax; rdx atrapa el resto.
  • Complemento a dosneg voltea el signo; los saltos con signo lo leen bien.

Datos

Control de flujo

  • cmp y saltoscmp fija las banderas; la familia j ramifica sobre ellas.
  • La forma del bucleUna etiqueta, una comparación, un salto de vuelta: todo bucle jamás.
  • dec y jnzLa cuenta regresiva más apretada: decrementa hasta la bandera cero.
  • Tablas de saltoIndexa direcciones en vez de encadenar comparaciones.

Bits y banderas

  • Bit a bitand, or, xor, shl: aritmética debajo de la aritmética.
  • Corrimiento y máscaraSaca campos empaquetados de un valor.
  • test y setccLas preguntas de banderas se vuelven respuestas de byte.
  • cmovElige un valor desde las banderas sin ramificar.

La pila

  • push y popLa pila crece hacia abajo; último en entrar, primero en salir.
  • call y retcall empuja la dirección de retorno; ret la saca y salta.
  • Marcos de pilarbp ancla los locales a offsets fijos: el prólogo clásico.

Memoria y strings

Hablando con Linux

Bis

  • print_decimal.asmDe entero a decimal: divide por diez, arma los dígitos al revés.
  • fizzbuzz.asmEl clásico, hablado en restos y sys_write.
  • triangle.asmBucles anidados dibujan un triángulo de hashes fila por fila.

Los otros tours de Assembly