8

Click here to load reader

incremento y decremento enassembler

Embed Size (px)

DESCRIPTION

incremento y decremento enassembler

Citation preview

Page 1: incremento y  decremento enassembler

Universidad Nacional Pedro Ruiz GalloFACULTAD DE CIENCIAS FÍSICAS Y

MATEMATICAS

FACFYMSISTEMAS DIGITALES

II

Incremento y Decremento en Assembler

Asignatura

Sistemas Digitales II

Docente

Chaman Cabrera, Lucía

Alumnos

Delgado Rimarachin Jhon Tigre Seminario Jair Vela Ortiz Eduardo

Zúñiga Peña Luis

Lambayeque, 27 de Mayo del 2015

Page 2: incremento y  decremento enassembler

DECREMENTO E INCREMENTO

DECFSZ

CONSTRUCCIÓN DE BUCLES

En el desarrollo de aplicaciones en base a microcontroladores es muy común emplear bucles, ya que permiten ejecutar un conjunto de instrucciones un cierto número de veces.

La implementación de bucles se realizan con la instrucción: DECFSZ F,d .

Normalmente el uso de la instrucción DECFSZ F,d es con el destino d=1, donde F hace las funciones de una variable que mantiene el número de veces que se va a ejecutar un conjunto de instrucciones y puede tomar valores de 0 a 255 (00H -FFH).

Si después de decrementar F el resultado es cero el CPU se saltará a la siguiente instrucción, rompiendo de esta manera la secuencialidad y la duración de esta instrucción será de 2ci.

Si después de decrementar F el resultado de la operación no es cero, el CPU continuará con la siguiente instrucción; y la duración de esta instrucción es de 1ci. Generalmente que le sigue a DECFSZ es la instrucción GOTO.

 DECFSZ 0Ch,0         ; Decrementa 0C y si es 0, salta una línea            GOTO ret                  ; no es 0, ejecuta esta línea            ...                             ; si es 0, viene hasta aquí.            ...                             ;sigue programa

INCF

Page 3: incremento y  decremento enassembler

La instrucción INCF incrementa un registro. Más precisamente lo que hace es tomar el contenido de un registro (que es indicado en la instrucción), sumarle 1 y almacenar el resultado en el mismo registro o bien en el registro de trabajo w.

La instrucción se completa de la siguiente manera: INCF f, d Donde f es un registro cualquiera y d indica uno de dos posibles destinos; el mismo registro al cual se hace referencia con f o, el registro de trabajo w (también llamado acumulador.

Así es que si tienes el registro 0x45 con el contenido 0x10 y el PIC ejecuta la instrucción: INCF 0x45, f El registro 0x45 tendrá un nuevo contenido y este será 0x11 (mientras que el contenido de w no será afectado) En las mismas condiciones, la instrucción: INCF 0x45, w tendrá el siguiente resultado: el registro 0x45 permanecerá en el valor 0x10 y el registro de trabajo w tomará el valor 0x11

Sólo resta agregar que si el incremento se efectúa sobre un registro que cuyo valor (previo a la ejecución) es 0xFF (o 255) dado que incrementamos bytes el siguiente valor será 0x00 y el indicador de cero Z se pondrá en 1 Esto es, el resultado de la operación INCF afecta también el bit de estado z (cero) poniéndolo en 1 si el resultado de la operación es cero o en cero si el resultado de la operación es distinto de cero.

REPERTORIO 35 INSTRUCCIONES

Page 4: incremento y  decremento enassembler

Las 35 instrucciones de la gama media de Microchip las encontraremos resumidas en la siguiente tabla. w es el acumulador, f representa un registro cualquiera y C, DC, Z los flags del registro STATUS.

Instrucciones orientadas a registros

MNEMÓNICOOPERANDOS

DESCRIPCIÓN CÓDIGO OPBANDERA

SNCIC NOTAS

ADDWF f,d w + f → d00 0111 dfff ffff C, DC, Z 1 1,2

ANDWF f,d w AND f → d00 0101 dfff

ffff Z 1 1,2

CLRF f 00 h → f00 0001 1fff ffff Z 1 2

CLRW - 00 h → w00 0001 0xxx xxxx Z 1 -

COMF f,d Complemento de f → d00 1001 dfff ffff Z 1 1,2

DECF f,d f - 1 → d00 0011 dfff ffff Z 1 1,2

DECFSZ f,d f - 1 → d (si es 0 salta)00 1011 dfff ffff Ninguna 1(2) 1,2,3

INCF f,d f + 1 → d00 1010 dfff ffff Z 1 1,2

INCFSZ f,d f + 1 → d (si es 0 salta) 00 1111 dfff ffff Ninguna 1(2) 1,2,3

IORWF f,d w OR f → d00 0100 dfff ffff Z 1 1,2

MOVF f,d f → d00 1000 dfff ffff Z 1 1,2

MOVWF

f w → f00 0000 1fff ffff Ninguna 1 -

NOP - No operación00 0000 0xx0 0000 Ninguna 1 -

RLF f,d Rota f izq por carry → d00 1101 dfff ffff C 1 1,2

RRF f,d Rota f dcha por carry → d00 1100 dfff ffff C 1 1,2

SUBWF f,d f - w → d00 0010 dfff ffff C,DC,Z 1 1,2

SWAPF f,dIntercambia nibbles de f → d

00 1110 dfff ffff Ninguna 1 1,2

XORWF f,d w XOR f → d00 0110 dfff ffff Z 1 1,2

Page 5: incremento y  decremento enassembler
Page 6: incremento y  decremento enassembler

EJEMPLO:

INCF total,F ;(total) + 1 = (total)

Antes: (total) = 0xFF Z=?

Despues: (total) = 0x00 Z=1

EJEMPLO:

INCF total_W ;(total) + 1 = (W)

Antes: (total) = 0x06 (W)=? Z=?

Despues: (total) = 0x06 (W)=0x07 Z=0

INCFSZ

Significa Incrementar el archivo f y salta si es 0 .INCFSZ 00 a 1F,0 El resultado estará en W.INCFSZ 00 a 1F,1 El resultado estará en f.

Normalmente la función de decremento DECFSZ se usa para crear un retardo, pero también se puede usar un INCFSZ. La cual no afecta al registro STATUS.

Esto trabaja de la siguiente manera: Si el contenido de un archivo es incrementado y el resultado no es 0, entonces la siguiente instrucción es ejecutada con un GOTO una dirección anterior y ejecutará otro INCFSZ. Eventualmente el archivo será 1111 1111 y el próximo incremento lo devolverá a 0000 0000, el resultado será cero y la instrucción GOTO será ignorada, ejecutándose la siguiente instrucción.

Page 7: incremento y  decremento enassembler

INSTRUCCIONES DE SALTObtfsc f,b

btfss f,b

decfsz f,b

incfsz f,b

goto k

Salta si el bit b de f es 0

Salta si el bit b de f es 1

(f)-1 =destino y salta si es 0

(f)+1=destino y salta si es 0

Salta a la dirección k

01 10bb bfff ffff

01 11bb bfff ffff

00 1011 dfff ffff

00 1111 dfff ffff

10 1kkk kkkk kkkk