08.05.2013 Views

Juego de instrucciones del 80C31

Juego de instrucciones del 80C31

Juego de instrucciones del 80C31

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

(continua)<br />

La instrucción CJNE (compara y salta si no igual) es también usada para lazos <strong>de</strong> control. Dos bytes son<br />

especificados en el campo <strong>de</strong> operandos <strong>de</strong> la instrucción y el salto es ejecutado sólo si los dos bytes no son<br />

iguales. Si, por ejemplo, un carácter ha sido recién leído hacia el acumulador <strong>de</strong>s<strong>de</strong> el puerto serial y es<br />

<strong>de</strong>seado saltar hacia una instrucción i<strong>de</strong>ntificada mediante la etiqueta TERMINA si el carácter es SYN<br />

(16H), entonces las siguientes <strong>instrucciones</strong> pudieran ser usadas:<br />

CJNE A, #16H, SKIP<br />

SJMP TERMINA<br />

SKIP: (continua)<br />

Puesto que el salto ocurre sólo si A ≠ SYN, un salto es usado para sobrepasar la instrucción que efectúa el<br />

salto que termina, excepto cuando el código <strong>de</strong> sincronía es leído.<br />

Otra aplicación <strong>de</strong> esta instrucción es en comparaciones "mayor que" o "menor que". Los dos bytes en el<br />

campo <strong>de</strong> operandos se toman como enteros sin signo. Si el primero es menor que el segundo, la ban<strong>de</strong>ra <strong>de</strong><br />

acarreo se hace “1”. Si el primero es mayor o igual al segundo, la ban<strong>de</strong>ra <strong>de</strong> acarreo es limpiada. Por<br />

ejemplo, si se <strong>de</strong>sea brincar a BIG si el valor en el acumulador es mayor que o igual a 39H, las siguientes<br />

<strong>instrucciones</strong> pudieran ser usadas:<br />

CJNE A, #39H, $+3<br />

JNC BIG<br />

El <strong>de</strong>stino <strong>de</strong>l salto para CJNE se especifica como "$+3." El signo <strong>de</strong> dólar ($) es un símbolo especial <strong>de</strong>l<br />

ensamblador representando la dirección <strong>de</strong> la instrucción actual. Ya que CJNE es una instrucción <strong>de</strong> 3 bytes,<br />

"$+3" es la dirección <strong>de</strong> la siguiente instrucción, JNC. En otras palabras, la instrucción CJNE es seguida por<br />

la instrucción JNC sin importar el resultado <strong>de</strong> la comparación. El único propósito <strong>de</strong> la comparación es<br />

afectar a la ban<strong>de</strong>ra <strong>de</strong> acarreo. la instrucción JNC <strong>de</strong>ci<strong>de</strong> si o no el salto toma lugar. Tal ejemplo es una<br />

instancia en la cual el método <strong>de</strong>l 8051 a una situación común <strong>de</strong> programación es más grotesco que con la<br />

mayoría <strong>de</strong> los <strong>de</strong>más microprocesadores; sin embargo, el uso <strong>de</strong> macros permite secuencias <strong>instrucciones</strong><br />

muy productivas, como el ejemplo dado.<br />

EJEMPLOS<br />

Ejemplo 1. Suma <strong>de</strong> dos números con varios dígitos.<br />

1 0000 datos equ 30h ; suma dos numeros BCD <strong>de</strong> 4 bytes<br />

2 0000 ; usando ajuste <strong>de</strong>cimal 12'849,528 + 6'373,463 = 19'222,991<br />

3 0000 org 0<br />

4 0000 753012 mov datos, #12h ; mueve datos a RAM interna<br />

5 0003 753184 mov datos+1,#84h<br />

6 0006 753295 mov datos+2,#95h<br />

7 0009 753328 mov datos+3,#28h<br />

8 000C 753406 mov 34h, #06<br />

9 000F 753537 mov 35h, #37h<br />

10 0012 753634 mov datos+6,#34h<br />

11 0015 753763 mov 37h,#63h ; mueve el ultimo dato BCD<br />

12 0018 ; prepara...<br />

13 0018 7A04 mov R2,#4 ; cuatro sumas<br />

14 001A 7933 mov R1,#datos+3 ; inicia apuntador<br />

15 001C 7837 mov R0,#datos+7 ; inicia apuntador<br />

16 001E<br />

17 001E C3 clr c<br />

18 001F E7 lazo1: mov A,@R1 ; usa modo indirecto<br />

19 0020 36 addc A,@R0 ; suma con el carry<br />

20 0021 D4 da A ; ajuste <strong>de</strong>cimal<br />

21 0022 F7 mov @R1,A ; salva resultado parcial<br />

22 0023 19 <strong>de</strong>c R1<br />

Profr. Salvador Saucedo 15

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!