Anda di halaman 1dari 40

Ing. Hctor Jimnez M.

MICROCONTROLADORES
Repertorio de Instrucciones
(2)
Instrucciones Aritmticas

Ing. Hctor Jimnez M.
MICROCONTROLADORES
Instrucciones Aritmticas
Instrucciones Aritmticas
incf f,d (Increment f)
El registro f se incrementa en una unidad. Almacena el
resultado en W si d = 0 (f no vara) y en f si d = 1
Z = 1 si es cero, es decir, si hay desbordamiento al pasar de
b 11111111 a b00000000

incf Contador,F ;(Contadr) + 1 (Contador)
Antes : (Contador) = 0xFF Z = ?
Despus : (Contador) = 0x00 Z = 1

incf Contador,W ;(Contador) + 1 (W)
Antes : (Contador) = 0x0l, (W) = ? Z = ?
Despus : (Contador) = 0x0l, (W) = 0x02 Z = 0
Instrucciones Aritmticas
decf f,d (Decrement f)
El registro f se decrementa en una unidad.
Almacena el resultado en W si d = 0 (en cuyo caso no vara)
y en el registro f si d = 1
Z = 1 si es cero

decf Contador,F ; (Contador) - 1 (Contador)
Antes : (Contador) = 0x0l Z = ?
Despus : (Contador) = 0x00 Z = 1

decf Contador,W ; (Contador) - 1 (W)
Antes : (Contador) = 0x04 (W) = ? Z = ?
Despus : (Contador) = 0x04 (W) = 0x03 Z = 0
Suma de Binarios
La suma de 1+1 debe escribirse en
binario con dos cifras (10) y, por tanto
1+1 es 0 y se arrastra una unidad.
1+1 = 0 + 1
1
+ 1
1 0
Suma de Binarios
Se ha superado el valor mximo (255) y por tanto Carry = 1
En este caso el resultado no corresponde al correcto (265), si se
aade el Carry se obtiene b100001001, que es el valor correcto
Se puede afirmar que el flag Carry es el noveno bit del registro
de trabajo y por lo tanto del resultado
Instrucciones Aritmticas
addlw k (Add Literal to W)
Suma el registro W con el literal o constante k
Almacena el resultado en W. Si hay acarreo C = 1

addlw 0x4F ; (W) + 4Fh (W)
Antes : (W) = 0xA3 C =?
Despus : (W) = 0xF2 (0xA3 + 0x4F = 0xF2) C = 0

addlw 0x38 ; (W) + 38h (W)
Antes : (W) = 0xD C = ?
Despus : (W) = 0x09 (0xDl+0x38=0x09 ms acarreo) C = 1


Instrucciones Aritmticas
addwf f,d (Add W and f)
Suma el registro W al registro f
Almacena el resultado en W si d = 0 y en el registro f si d = 1
Si se produce acarreo C = 1

addwf PORTA, W ; (PORTA) + (W) (W)
Antes : (W) = 0x17 (PORTA) = 0xC2, C =?
Despus : (W) = 0xD9 (PORTA) = 0xC2 C = 0

addwf Contador,F ; (Contador) + (W) (Contador)
Antes : (W) = 0xDl (Contador) = 0x38 C =?
Despus : (W) = 0xDl (Contador) = 0x09 C = 1


Resta de Binarios
La resta 0 - 1 se resuelve, igual que en el
sistema decimal, tomando una unidad
prestada de la posicin siguiente: 1 0 - 1
es decir, 2
10
1
10
= 1
1 1 = 0 - 1
1
0
-1
1
1
-1
1
0
1 0
-1
Binarios con signo
La representacin de Nmeros Negativos
se realiza mediante:
Signo-magnitud
Signo-complemento de 1
Signo-complemento de 2
Complemento a 1 - Complemento a 2
La representacin se obtiene reemplazando 1 por 0
y 0 por 1 incluyendo el bit de signo
00001001
2

Complemento a 1 11110110
2

El complemento a 2 se obtiene sumndole 1 a su C1
00001001
2

Complemento a 1 11110110
2


Complemento a 2 = 11110110
2
+ 1 = 11110111
2
Instrucciones Aritmticas
La resta se realiza sumando, el binario puro sin
signo del registro f ( literal k ) ms el
complemento a dos del registro W

Al realizar la resta en 8 bits con signo el
resultado no puede exceder de +127 ni de -128

Las banderas pueden indicar 3 casos:

Es positivo distinto de cero C=1 Z=0
Es cero C=1 Z=1
Es negativo C=0 Z=0
Instrucciones Aritmticas
sublw k (Subtract W from Literal)
Resta (complemento a 2) la constante k menos el registro W
y almacena el resultado en W

sublw 0x03 ; 03h - (W) (W)
Antes : (W) = 0x0l C = ? Z = ?
Despus : (W) = 0x02 C = 1 (positivo) Z = 0

sublw 0x02 ; 02h - (W) (W)
Antes : (W) = 0x02 C = ? Z = ?
Despus : (W) = 0x00 C = 1 Z = 1 (cero)

sublw 0x02 ; 02h -(W) (W)
Antes : (W) = 0x03 (+3 dec) C = ? Z = ?
Despus : (W) = 0xFF (-1 dec) C = 0 (negativo) Z = 0
Instrucciones Aritmticas
subwf f,d (Subtract Wfrom f)
Resta (complemento a 2) el registro f menos el registro W
Almacena el resultado en W si d = 0 y en f d = 1

subwf Regl,w ; (Reg1) - (W) (Reg1)
Antes (Reg1) = 0x03 (W) = 0x02 C = ? Z = ?
Despus : (Reg1) = 0x03 (W) = 0x01 C= 1 (positivo) Z= 0

subwf Regl,w ; (Reg1) - (W) (Reg1)
Antes : (Reg1) = 0x02 (W) = 0x02 C = ? Z = ?
Despus : (Reg1) = 0x02 (W) = 0x00 C= 1 Z= 1 (cero)

subwf Regl,w ; (Reg1) - (W) (Reg1)
Antes : (Reg1)=0x0l (+1 dec) (W)= 0x02 C = ? Z = ?
Despus : (Reg1)=0xFF (-1 dec) (W)= 0x02 C= 0 (neg) Z= 0
Instrucciones Aritmticas
subwf f,d (Subtract Wfrom f)
Resta (complemento a 2) el registro f menos el registro W
Almacena el resultado en W si d = 0 y en f d = 1

subwf Regl,F ; (Reg1) - (W) (Reg1)
Antes (Reg1) = 0x03 (W) = 0x02 C = ? Z = ?
Despus : (Reg1) = 0x0l (W) = 0x02 C= 1 (positivo) Z= 0

subwf Regl,F ; (Reg1) - (W) (Reg1)
Antes : (Reg1) = 0x02 (W) = 0x02 C = ? Z = ?
Despus : (Reg1) = 0x00 (W) = 0x02 C= 1 Z= 1 (cero)

subwf Regl,F ; (Reg1) - (W) (Reg1)
Antes : (Reg1)=0x0l (+1 dec) (W)= 0x02 C = ? Z = ?
Despus : (Reg1)=0xFF (-1 dec) (W)= 0x02 C= 0 (neg) Z= 0
Ing. Hctor Jimnez M.
MICROCONTROLADORES
Instrucciones Lgicas
A B And Or Nand Nor
0 0 0 0 1 1
0 1 0 1 1 0
1 0 0 1 1 0
1 1 1 1 0 0
Instrucciones Lgicas

Instrucciones Lgicas
iorlw k (Inclusive OR Literal with W)
Operacin OR lgica entre el registro W y la constante k.
Almacena el resultado en W. El flag Z = 1 si el resultado es cero

iorlw b 00110101 ; (W) OR b00110101 (W)
Antes : (W) = b 10011010 Z =?
Despus (W) = b10111111 Z =0


iorwf f,d (Inclusive OR W with f)
Operacin OR lgica entre el registro W y el registro f.
Almacena el resultado en W si d = 0 y en el registro f si d = 1
El flag Z = 1 si el resultado es cero

iorwf Resultado, W ; (W) OR (Resultado) (W)
Antes : (Resultado) = b00010011, (W) = b10010001 y Z =?
Despus : (Resultado) = b000l00l 1, (W) = b 10010011 y Z =0
Instrucciones Lgicas
andwf f,d (AND W with f)
Efecta la operacin AND entre el registro W y el registro f.
Almacena el resultado en W si d = 0 y en f si d = 1.
Z =1 si es cero

andwf FSR,F ; (W) And (FSR) (FSR)
Antes : (W) = b00101111 (FSR) = b11000010 Z = ?
Despus : (W) = b00101111 (FSR) = b00000010 Z = 0

andf FSR,W ; (W) And) (FSR) (W)
Antes : (W) = b00101111 (FSR) = b11000010 Z =?
Despus : (W) = b00000010 (FSR) = b11000010 Z = 0
Instrucciones Lgicas
andlw k (AND Literal with W)
Efecta la operacin AND lgica entre el registro W y la
constante k. Almacena el resultado en W.
Z = 1 si es cero

andlw b01011111 ;(W)And b01011111 (W)
Antes : (W) = b10100011 Z = ?
Despus : (W) = b00000011 Z = 0

xorlw k (Exclusive OR Literal with W)
Realiza la funcin OR-Exclusiva entre el registro W y la
constante k de 8 bits. Almacena el resultado en W.
Z = 1 si cero

xorlw b10101111 ;(W) Xor b10101111 (W)
Antes : (W) = b10110101 Z = ?
Despus : (W) = b00011010 Z = 0
Instrucciones Lgicas
xorwf f,d (Exclusive OR W with f)
Realiza la funcin OR-Exclusiva entre el registro W y el
registro f.
Almacena el resultado en f si d =1 y en W si d = 0
Z =1 si es cero

xorwf Reg,F ;(W) XOR (Reg) (Reg)
Antes : (Reg) = b 10101111 (W) = b 10110101 Z = ?
Despus : (Reg) = b 00011010 (W) = b 10110101 Z = 0

xorwf Reg,W ;(W) XOR (Reg) (W)
Antes : (Reg) = b10101111 (W) = b10110101 Z = ?
Despus : (Reg) = b10101111 (W) = b00011010 Z = 0
Instrucciones Lgicas
comf f,d (Complement f).
Realiza un complemento del registro f bit a bit
Almacena el resultado en W si d = 0 ( f no vara) y en el
registro f si d = 1.
Z = 1 si es cero

comf Regl,F ;(/Reg1) (Reg1)
Antes : (Reg1) = b00010011 Z=?
Despus : (Reg1) = b11101100 Z = 0

comf Reg1,W ;(/Reg1) (W)
Antes : (Reg1) = b00010011 (W) = ? Z = ?
Despus : (Reg1) = b00010011 (W) = b11101100 Z =0
Flags
rlf f,d (Rotate Left f trhrough Carry)
Rotacin de un bit a la izquierda del registro f pasando
por el bit de acarreo C. El desplazamiento es cerrado,
formando un anillo con el bit C (Carry)

El resultado se almacena en f si d = 1, el resultado se
almacena en W si d = 0

El contenido del Carry pasa a la posicin del bit de
menor peso y el bit de mayor peso pasa al Carry
7 6 5 4 3 2 1 0
C
Registro f
Flags
rrf f,d (Rotate Right f through Carry)
Rotacin de un bit a la derecha del registro f,
pasando por el bit de acarreo C

El resultado se almacena en f si d = 1, el resultado
se almacena en W si d = 0

El contenido del Carry pasa a la posicin del bit de
mayor peso y el bit de menor peso pasa al Carry
7 6 5 4 3 2 1 0
C
Registro f
Flags
rlf Reg1,W
Antes : (Reg1) = b11100110 W = ? C = 0
Despus : (Reg1) = b11100110 (W) = b11001100 C = 1

rlf Regl,F
Antes : (Reg1) = b11100110 C = 0
Despus : (Reg1) = b11001100 C = 1

rrf Reg1,W
Antes : (Reg1) = b11100110 (W) = ? C = 0
Despus : (Reg1) = b11100110 (W) = b01110011 C = 0

rrf Reg1,F
Antes : (Reg1) = b11100110 C = 0
Despus : (Reg1) = b01110011 C = 0
Flags
swapf f,d (Swap Nibbles in f)
Los 4 bits de ms peso del registro f se intercambian con los 4
bits de menor peso del mismo registro f.
Si d = 0 almacena en W, si d = 1 se almacena en f

swapf Reg1,W
Antes : (Reg1) = 0xA5 (W) =?
Despus : (Reg1) = 0xA5 (W) = 0X5A

swapf Regl,F
Antes : (Reg1) = 0xA5
Despus : (Reg1) = 0x5A

Ing. Hctor Jimnez M.
MICROCONTROLADORES
Operaciones Comunes
Operaciones Comunes
Incrementar un registro en una unidad
Por ejemplo el registro llamado Contador
incf Contador,F

Incrementar un registro en un valor n
Por ejemplo, para incrementar en 7 el registro
Operando.
movlw d7
addwf Operando,F

Decrementar un registro en una unidad
|Por ejemplo el registro llamado Centenas
decf Centenas,F
Operaciones Comunes
Decrementar un registro en un valor n
Por ejemplo, decrementar en 15 unidades el registro
MensajeLongitud
movlw 15
subwf MensajeLongitud,F

Incrementar W. El registro de trabajo W no ocupa posicin
en la memoria RAM de datos, por tanto no se puede operar
directamente con l para incrementar o decrementar
As la instruccin incf W,1 no es admitida
Por tanto, para incrementar el contenido del registro W hay
que hacerlo de la siguiente forma:
addlw 0x0l

Operaciones Comunes
Decrementar W. Por el mismo motivo anterior, para
decrementar W hay que hacerlo de la siguiente forma:
sublw 0x0l

Complementar W, invirtiendo sus bits. Se hace
aprovechando la particularidad de la operacin lgica
XOR que complementa un bit cuando se realiza una
XOR con un 1 (bit) XOR 1 = /bit
xorlw b11111111

Negar W. Hallando su complemento a 2, es decir,
restndole de cero
sublw 0 ;ya que 0 - (W) = -(W)
Operaciones Comunes
Poner a cero varios bits del registro W sin alterar el resto.
Se usa la operacin lgica AND, poniendo en el
operando inmediato, un 0 en aquellos bits que se desea
poner a 0 mientras que los restantes se ponen a 1
A la constante con la que se hace la operacin AND se la
llama mscara
Por ejemplo, si desea poner a 0 los bits pares del
registro W sin modificar los restantes puede usar la
instruccin:
andlw b10101010
Operaciones Comunes
Poner a uno varios bits del registro W sin alterar el resto.
Se usa la operacin lgica OR, poniendo en el operando
inmediato un 1 en aquellos bits que se desea poner a
1, mientras que los restantes se ponen a 0
A la constante con la que se hace la operacin OR se la
llama mscara.
Asi por ejemplo, si se desea poner a 1 los 5 bits
de menos peso de W sin modificar los otros tres,
puede usarse la instruccin:
iorlw b00011111
Operaciones Comunes
Multiplicar un registro por un numero potencia de 2.
Se puede hacer desplazando un bit varias posiciones hacia la izquierda e
introduciendo ceros por la derecha. Se debe tener precaucin de no perder
dgitos significativos por la izquierda, es decir, el resultado no puede ser
mayor de 255 que es el mximo nmero representable con 8 bits.
Por ejemplo para multiplicar el registro Operando por 2, 4 y 8:

bcf STATUS,C ;El cero a introducir por la derecha
rlf Operando,F ; Se multiplica por dos
bcf STATUS,C ; El cero a introducir por, la derecha
rlf Operando,F ; Se multiplica por cuatro
bcf STATUS,C ; El cero a introducir por la derecha
rlf Operando,f ; Se multiplica por ocho

; As por ejemplo, si en principio (Operando) = b00011010 = 26 (dec),
; por cada desplazamiento a la izquierda quedara:
(Operando) = b00011010 = 26 (dec), al principio.
(Operando) = b00110100 = 52 (dec), ha multiplicado por 2, (26 x 2 = 52).
(Operando) = b01101000 = 104 (dec), ha multiplicado por 4, (26 x 4 = 104)
(Operando) = b11010000 = 208 (dec), ha multiplica 2do por 8, (26 x 8= 208)
Operaciones Comunes
Dividir un registro entre un nmero potencias de 2. Se puede hacer
fcilmente desplazando un bit varias posiciones hacia la derecha e
introduciendo ceros por la izquierda. Por ejemplo para dividir el registro
Operando entre 2, 4 y 8 se hara:

bcf STATUS,C ; El cero a introducir por la izquierda.
rrf Operando,F ; Se divide entre dos.
bcf STATUS,C ; El cero a introducir por la izquierda.
rrf Operando,F ; Se divide entre cuatro.
bcf STATUS,C ; El cero a introducir por la izquierda.
rrf Operando,F ; Se divide entre ocho.

;As por ejemplo, si en principio (Operando) = b00011010 =26 (decimal),
;por cada desplazamiento a la derecha quedara:
;(Operando) = b00011010 = 26 (dec), al principio
;(Operando) = b00001101 = 13 (dec), ha dividido entre 2, (2612 = 13)
;(Operando) = b00000110 = 6 (dec), ha dividido entre 4, (26/4 = 6)
;(Operando) = b00000011 = 3 (dec), ha dividido entre 8, (26/8 = 3)
Operaciones Comunes
Invertir varios bits de W sin alterar el resto.
Se usa la operacin lgica XOR, poniendo en el
operando inmediato un 1 en aquellos bits que se
desea invertir mientras que los restantes se ponen a
0.
A la constante con la que se hace la operacin XOR
se la llama mscara
As por ejemplo, si desea invertir los 3 bits de
mayor peso de W sin modificar los otros cinco,
puede usar la instruccin:

xorlw b11100000
Ejercicios
Elemental_01.asm: Por el Puerto B se obtiene el dato de las cinco
lneas del Puerto A, al que est conectado un array de interruptores,
sumndole el valor de una constante, por ejemplo 74 decimal. Es decir:
(PORTB) = (PORTA) + Constante

Elemental_02.asm: Por el Puerto B se obtiene el dato del Puerto A
multiplicado por 2. Es decir: (PORTB) = 2 (PORTA) = (PORTA)
(PORTA)

Elemental_03.asm: Por el Puerto B se obtiene el dato introducido por
el Puerto A, pero los bits pares de la salida se fijan siempre a 1. El
orden de los bits ser b7 b6 b5 b4 b3 b2 b1 b0, siendo los pares el
b6, b4, b2 y b0. Por ejemplo, si por el Puerto A se introduce el dato --
001100, por el Puerto B se visualiza -- 011101. Observa que:
Los bits pares estn a 1 , efectivamente (Puerto B) = -- x1x lx1
Los impares permanecen con el dato del puerto de entrada,
efectivamente:
(Puerto A) --0xlx0x y (Puerto B) --0x1x0x
Ejercicios
Elemental_04.asm: Por el Puerto B se obtiene el contenido del
Puerto A, pero los bits impares de la salida se fijan siempre a 0. El
orden de los bits ser b7 b6 b5 b4 b3 b2 b1 b0, siendo los impares
el b7, b5, b3 y b1. Por ejemplo, si por el Puerto A se introduce el
dato b--101100, por el Puerto B se visualiza 00000100. Observar
que:
Los bits impares estn a 0, efectivamente: (Puerto B) =
0x0x0x0x
Los pares permanecen con el dato del puerto de entrada,
efectivamente:
(Puerto A) = --x0x1x0 y (Puerto B) = --x0x1x0

Elemental_05.asm: Por el Puerto B se obtiene el dato del Puerto A
invertidos los unos y los ceros. Por ejemplo, si por el Puerto A se
introduce --011001, por el Puerto B aparecer xx100110. (No
importa el estado de los tres bits superiores del Puerto B).

Elemental 06.asm: Por el Puerto B se obtiene el dato del Puerto A
intercambiando los nibbles alto y bajo. Por ejemplo, si por el Puerto
A se introduce --011001 , por el Puerto B aparecer 1001xx01.
Ejercicios
Elemental_07.asm: Por el Puerto B se obtiene el dato del Puerto A
desplazando un bit hacia la izquierda, por la derecha entrar un 1
. Por ejemplo, si por el Puerto A se introduce --011001, por el
Puerto B aparecer x0110011.

Elemental_08.asm: Por el Puerto B se obtiene el dato del Puerto A
desplazando un bit hacia la derecha, por la izquierda entrar un
0. Por ejemplo, si por el Puerto A se introduce --011001, por el
Puerto B aparecer 0xx01100.

Elemental_09.asm: Por el Puerto B se obtiene el dato del Puerto A
invirtiendo los bits pares. Los impares se dejan como en la entrada.

Elemental_10.asm: Por el Puerto B se obtiene el dato de las cinco
lneas del Puerto A al que estn conectado un array de
interruptores. Esta operacin la realizar una nica vez, despus el
programa entrar en modo Srandby o de bajo consumo del cual no
podr salir.
Ing. Hctor Jimnez M.
MICROCONTROLADORES
Repertorio de Instrucciones

Anda mungkin juga menyukai