Tipus d'instruccions en llenguatge assemblador: guia completa

Darrera actualització: 7 de maig de 2025
  • El llenguatge assemblador organitza les instruccions per finalitat: transferència, càlcul, control de flux i més.
  • Cada instrucció està formada per un opcode i operands, amb formats diferents segons l'arquitectura.
  • Hi ha diverses maneres d'encaminament per accedir a les dades, com ara immediat, directe i indirecte.

assemblador Llenguatge màquina i format d'instruccions

El llenguatge assemblador ha estat un dels pilars fonamentals en el desenvolupament de programari des dels inicis de la informàtica. Encara que avui dia els llenguatges d'alt nivell dominen l'escena, l'assemblador continua tenint ús i rellevància en entorns on el control sobre el maquinari, optimització o restriccions de recursos són prioritàries.

En aquest article ens endinsarem en profunditat en els tipus d'instruccions del llenguatge assemblador, analitzant la seva estructura, objectius, modes d'encaminament i com s'organitzen en diferents arquitectures. A més, coneixeràs exemples, formats i una visió global que et permetrà entendre a fons la lògica darrere d'aquestes instruccions que operen molt a prop del maquinari.

Què és una instrucció en llenguatge assemblador?

Una instrucció assemblador és una ordre que la CPU pot entendre directament (un cop traduïda a codi màquina per un programa assemblador). Cada instrucció té un propòsit específic i sol estar composta per un mnemònic que representa l'operació i un o diversos operands que indiquen on es prenen les dades i/o on s'emmagatzemen els resultats.

Aquestes instruccions són molt dependents de l'arquitectura del processador, per la qual cosa cada tipus de CPU (ja sigui x86, ARM, MIPS, entre d'altres) té el seu propi conjunt d'instruccions amb sintaxi i capacitats particulars.

Estructura d´una instrucció

Les instruccions es componen normalment de dues parts:

  • Codi d'operació (opcode): Indica l'acció que cal executar, com sumar, moure dades, comparar, etc.

Els operands proporcionen la informació necessària per fer l'operació i poden estar en registres, memòria o ser constants. No totes les instruccions requereixen operands i en alguns casos aquests poden estar implícits en la instrucció o registres predefinits.

Tipus d'instruccions en llenguatge assemblador

Segons la funcionalitat que exerceixen dins un programa, les instruccions del llenguatge assemblador es poden classificar en diversos grups. A continuació, es detallen els més rellevants:

1. Instruccions de transferència de dades

Aquestes instruccions permeten copiar dades d'un lloc a un altre , sense modificar-ne el contingut a l'origen. Són fonamentals per moure informació entre registres, memòria i perifèrics.

  Guia Completa d'OpenCode: Com programar amb IA usant ChatGPT, Claude i Gemini

Algunes de les instruccions més comunes en aquest grup són:

  • MOV: Copia el contingut d'un operand a l'altre. Per exemple, MOV AX, BX copia el contingut de BX a AX.
  • MOVS / MOVSB ​​/ MOVSW: Mou cadenes des d'una adreça font (SI) a una adreça destí (DI), automatitzant el procés de transferència.
  • LODS / LODSB / LODSW: Carregueu un valor des de l'adreça indicada pel registre SI a l'acumulador (AL o AX).
  • LLEGEIXI: Carrega una adreça efectiva en lloc del valor. Útil per obtenir la direcció duna variable o estructura.

2. Instruccions de la pila

La pila (stack) és una estructura LIFO (últim a entrar, primer a sortir) utilitzada per emmagatzemar dades temporalment, passar paràmetres o guardar el context d'execució.

  • PUSH: Desa un valor a la pila, decrementant el punter SP.
  • POP: Recupera el valor més recent emmagatzemat a la pila, incrementant SP.
  • PUSHF / POPF: Emmagatzemen i recuperen l'estat de les banderes de la CPU a la pila.

3. Instruccions aritmètiques i lògiques

Permeten fer càlculs i operacions sobre bits. Aquestes instruccions són essencials per manipular dades numèriques i prendre decisions al flux del programa.

Entre les més utilitzades trobem:

  • ADD / SUB: Suma i resta.
  • MUL / IMUL: Multiplicacions binàries.
  • DIV / IDIV: Divisió (sencera o amb signe).
  • AND / OR / XOR / NOT: Operacions lògiques bit a bit.
  • SHL / SHR / ROL / ROR: Desplaçaments i rotacions de bits.

4. Instruccions de control de flux

Permeten modificar la seqüència d'execució del programa , introduint salts o trucades condicionals i incondicionals a altres instruccions.

  • JMP: Salta incondicionalment a una altra adreça del programa.
  • CALL / RET: Trucada a una subrutina i tornada.
  • JE / JNE / JG / JL / JZ / JNZ: Salts condicionals, s'executen si es compleixen certes condicions (després d'una comparació).

5. Instruccions d'entrada/sortida (I/O)

Permeten la comunicació del processador amb dispositius externs. Aquestes instruccions permeten llegir i escriure dades des de/cap a ports (hardware).

  • IN: Llegiu dades des d'un port d'entrada.
  • OUT: Envieu dades a un port de sortida.

6. Instruccions de coma flotant

Moltes CPU tenen coprocessadors matemàtics (o instruccions especials) dedicats a treballar amb números decimals (punt flotant). Aquestes instruccions permeten realitzar operacions com:

  • Suma, resta, multiplicació i divisió de números reals.
  • Operacions trigonomètriques (sinus, cosinus, tangent).
  • Operacions logarítmiques, exponencials i arrels.
  Guia Completa de Vibe Coding per crear Programari de RR.HH. i Aplicacions Empresarials

Aquestes instruccions solen complir amb l'estàndard IEEE 754 per a precisió numèrica.

Maneres d'encaminament

Una part fonamental del disseny d'instruccions és com s'identifica on són els operands. Els modes d'encaminament defineixen com accedeix la CPU a les dades.

1. Direccionament immediat

La dada està inclosa directament a la instrucció. És ràpid, però no permet modificar valors sense canviar la instrucció.

MOV AX, 5

2. Direccionament directe

L'adreça de memòria que conté la dada s'especifica explícitament.

MOV AX, 

3. Direccionament indirecte

L‟adreça efectiva s‟obté a partir del contingut d‟un registre. Molt flexible i usat per a estructures i llistes enllaçades.

MOV AX, 

4. Direccionament indexat

Es calcula la direcció sumant una base i un índex (per exemple, per recórrer arrays). Usa registres especials com SI, DI o registres base + desplaçament.

MOV AX, 

Formats d'instruccions: diferents tipus d'arquitectura

L'estructura d'una instrucció pot variar segons l'arquitectura.

Format de 4 adreces

Inclou dos operands, una ubicació de resultat i la direcció de la següent instrucció. Avui dia està en desús per la complexitat.

Format de 3 adreces

Especifica dos operands i una adreça de destinació. És comú en arquitectures RISC modernes.

Format de 2 adreces

Usa un operant font i una destinació (la destinació també pot aportar valor). Popular a x86 i altres arquitectures CISC.

Format de 1 adreça

Només s'hi indica un operand; l'altre suposa que és l'acumulador. Comú en processadors antics i sistemes simples.

Format de 0 adreces (basat en pila)

Les operacions usen la pila per extreure i emmagatzemar operands i resultats. Molt eficient per a màquines amb pila, com algunes calculadores programables.

Macro instruccions i pseudo-opcodes

Per millorar la productivitat, molts assembladors ofereixen macroinstruccions , que expandeixen una sola línia en diverses instruccions reals. Són útils per evitar repetir patrons complexos o per crear estructures d'alt nivell com ara bucles o estructures condicionals.

Els pseudo-opcodes són instruccions que l‟assemblador tradueix internament a una seqüència real d‟instruccions. Per exemple, NOP (no operació) es pot traduir com XCHG AX, AX a CPU x86.

  Tot sobre els arranjaments en programació: tipus, usos i exemples

Directives de l'assemblador

Les directives ( també anomenades pseudo-operacions ) no són instruccions pròpiament dites. Serveixen per controlar el procés d'acoblament, definir dades, seccions de codi, macros, condicions de compilació, etc.

Exemples comuns inclouen:

  • .data / .code: Indiquen la secció de dades o de codi.
  • .org: Estableix la direcció des de la que iniciarà l'assemblatge.
  • .equ: Defineix constants simbòliques.

Casos d'ús del llenguatge assemblador

Tot i l'auge de llenguatges d'alt nivell, l'assemblador continua sent clau en diversos àmbits:

  • Desenvolupament de sistemes encastats i microcontroladors.
  • Programació de drivers, bootloaders i BIOS.
  • Optimització extrema en aplicacions com a videojocs o criptografia.
  • Enginyeria inversa, debugging i hacking a baix nivell.

A més, la formació en llenguatge assemblador encara ocupa un lloc important en carreres d'informàtica i electrònica, ja que aporta una comprensió profunda de com funciona un processador, com s'emmagatzemen i es manipulen les dades, i com s'executen les instruccions a nivell binari.

Comprendre tots els tipus d'instruccions en assemblador, la seva estructura, funcionalitats i modes d'encaminament ofereix una base sòlida per a qualsevol programador que es vulgui endinsar en la programació de baix nivell o comprendre com els llenguatges d'alt nivell es tradueixen finalment en codi màquina. Tot i que el seu ús s'ha tornat més específic, continua sent una eina imprescindible en múltiples àrees crítiques del desenvolupament de programari i sistemes.

llenguatge assemblador
Article relacionat:
Tot sobre el Llenguatge Assemblador: Què És i Com Funciona