En assemblador cada instrucció es representa amb el seu mnemònic.
Normalment també donem noms a les variables per no haver d'anar posant les seves adreces. De la mateixa manera, podem posar etiquetes per indicar posicions de programa i així fer els salts sense haver d'anar calculant l'adreça que els correspon. Addicionalment, podem afegir comentaris per deixar clar què fa cada instrucció o tros de programa.
Els valors els introduïm en el format que ens vagi millor (binari, decimal, etc.). El programari compilador s'encarregarà de traduir mnemònics, adreces, variables i valors al codi màquina corresponent.
Agafem el següent tros de programa:
main: bsf PORTC,0 ; Activa el bit 0 del port C bcf PORTC,0 ; Desactiva el bit 0 del port C goto main ; Repetim...
I anem a comentar els principals elements:

Hi ha alguns altres elements que també han d'estar en un programa complet. Anem a veure-ho a partir del programa següent.
PROCESSOR 16F690 #include <xc.inc> config FOSC = INTRCIO, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP = OFF config CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF
; Definició de variables Retard1 EQU 0x20 ; Definim dues variables de comptador Retard2 EQU 0x21 Port EQU 0x22
PSECT code, class=CODE, delta=2, abs ; A l'inicio de la memòria
main:
bsf RP0 ; Tria el banc 1
movlw 0b11110000 ; RC0 a RC3 sortides, la resta entrades
movwf TRISC ; Posa el bit 0 del port C com a sortida
bcf RP0 ; Tria el banc 0
movlw 0b00001000 ; Activa el led de més a l'esquerra
movwf Port ; Ho escriu sobre el port
Bucle:
movf Port,w ; Copia Port a l'acumulador
movwf PORTC ; I ho guarda a PORTC
Ret:
decfsz Retard1,f ; Decrementa la variable
; si dona zero, no fa la instrucció següent
goto Ret ; Salta, excepte si el resultat ha estat zero
decfsz Retard2,f ; Decrementa la variable
goto Ret ; Salta, excepte si el resultat ha estat zero
bcf CARRY ; Desactiva el bit de les que en portem
rrf Port,f ; Roda els bits
btfsc CARRY ; Mira si en portem
bsf Port,3 ; Si és el cas, torna a activar RC3
goto Bucle ; Repetim el cicle
END main
A la primera part (fons groc) fem la configuració general. La primera línia li diu al compilador que fem servir el PIC 16F690. En la segona li demanem que inclogui el fitxer de configuracions; en aquest fitxer hi ha, per exemple, les adreces dels registres específics del processador; així quan nosaltres indiquem PORTC, el compilador sap quina adreça li correspon.
Les altres dues línies fan la configuració general del processador; són uns registres que només poden ser modificats en el moment de programar i que especifíquen la configuració que volem. En aquest cas hem posat la configuració bàsica, amb totes les funcions especials desactivades. En aquesta pàgina hi podeu trobar els detalls.
El segon bloc (fons blau) és la definició de les variables. El el nostre cas, hem posat la primera variable a l'adreça 20h, la primera adreça de memòria de dades disponible. La segona variable l'hem posat a la posició següent (21h). Podeu trobar l'organització de la memòria de dades en aquesta pàgina. En aquest cas definim tres variables.
Al darrer bloc (fons vermell) hi ha el programa pròpiament dit. A la primera línia li diem que el programa comença a la primera adreça de la memòria de programa. Per costum, el programa s'inicia amb l'etiqueta Main i acaba amb END main. L'etiqueta podria ser qualsevol altra. Podeu trobar la llista de les instruccions i la seva descripció a l'apartat 15 del document de característiques del PIC 16F690.
Anem a comentar algunes coses d'aquest programa. La memòria del microcontrolador està estructurada en quatre bancs. Encara que normalment les nostres variables estaran al banc 0, sovint necessitarem accedir a altres bancs (habitualment al banc 1, a vegades al 2 i rarament al 3) per poder llegir o escriure registres interns del microcontrolador. En aquest cas hem d'accedir al banc 1 per canviar la configuració d'entrades i sortides del port C (TRISC) que és on tenim connectats els LED.
El registre STATUS conté els dos bits que controlan els bancs de memòria (RP0 i RP1) i els bits d'estat que ens donen informació sobre el resultat d'algunes instruccions.
Els programes molt senzills tenen un codi que només es repeteix un cop, com és el cas de l' exemple EL. Llavors la darrera línia del programa és:
... goto $ ; Es bloqueja aquí END main
El goto indica al programa que salti a una posició concreta i el signe $ indica la posició actual. Així el programa es queda repetint indefinidament aquesta instrucció; fins que desconnectem l'alimentació i la tornem a connectar. Si no hi hagués aquesta línia, el microcontrolador executaria les instruccions que hi pugui haver en les posicions següents i que no sabem quines són; per tant tindríem un funcionament incontrolat.
Els programes més habituals tenen una part que només s'executa quan engeguem el microcontrolador (inicialització) i una part que es repeteix indefinidament. En el programa que hem posat d'exemple més amunt, la part d'inicialització està entre les etiquetes main i Bucle. A partir de l'etiqueta Bucle hi ha el tros de programa que es repeteix indefinidament.

Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.