You are on page 1of 10

Pontificia Universidad Catlica del Per Curso : Sistemas Digitales Especialidad : Ing.

Electrnica

Profesor : Ing. Hugo Pratt

Instrucciones aritmticas
Estas instrucciones realizan operaciones aritmticas de suma (con acarreo y sin acarreo), resta (con prstamo y sin prstamo), incremento, decremento, comparacin y multiplicacin. Adems del resultado, stas afectan a una o ms de las banderas. En las tabla de instrucciones se especifica qu banderas son afectadas y de qu manera. Con la excepcin de las instrucciones de comparacin, en todas las instrucciones aritmticas uno de los operandos es modificado.

Instrucciones de suma
La suma sin acarreo efecta la suma de dos nmeros, mientras que la suma con acarreo efecta la suma de tres nmeros, siendo uno de los el contenido de la bandera de acarreo. Hay dos instrucciones de suma sin acarreo: ADD (para nmeros de 8 bits) y ADIW (para sumar un nmero de 16 bits con otro de 6 bits), y una instruccin de suma con acarreo: ADC. Es gracias a la suma con acarreo que puede efectuarse la suma de nmeros de ms de 8 bits.

Instruccin ADD
Efecta la suma sin acarreo de dos de los registros R0..R31 del CPU.
Sintaxis ADD Rd, Rr Operacin Rd Rd+Rr Detalles Rd: Es uno de los registros R0..R31 Rr: Es uno de los registros R0..R31 Banderas modificadas H, S, V, N, Z, C

Ejemplo
para sumar el contenido del registro R0 al registro R1 y el resultado almacenarlo en R1, operacin que se representara as: R1 R0 + R1, debe escribirse as: ADD R1, R0

Ejemplo
Qu hacer si se quiere sumar R0 con R1 y el resultado almacenarlo en R2, pero sin modificar ni R1 ni R2? No es posible hacerlo con una sola instruccin. Aqu es necesario efectuar sumas parciales as: LDI R2, 0 ADD R2, R0 ADD R2, R1 Pregunta: Qu problema habra si se quita la primera instruccin?

InstruccATmega88Parte2Rev1.doc

-1-

26/04/2012

Pontificia Universidad Catlica del Per Curso : Sistemas Digitales Especialidad : Ing. Electrnica

Profesor : Ing. Hugo Pratt

Instruccin ADIW
Efecta la suma sin acarreo de un nmero de 16 bits, contenido en uno de los pares de registros R25:R24, R27:R26, R29:R28, o R31:R30, y un nmero sin signo de 6 bits.

Sintaxis ADIW Rd, Rr

Operacin Rd+1:Rd Rd+1:Rd + K

Detalles Rd: Es uno de los registros pares R24, R26, R28, R30 K es un nmero sin signo de 6 bits. 0 K 63

Banderas modificadas S, V, N, Z, C

Ejemplo
Para sumar al par de registros R31:R30 el nmero 14, se escribira: ADIW R30, 14

Ejemplo
En la porcin de programa: LDI R26, $FF LDI R27, $40 ADIW R26, 1 Luego de ejecutarse la ltima instruccin se tendr grabado en R26 el valor $00 y en R27 el valor $41, pues la instruccin ADIW est efectuando la siguiente suma: $40FF + 1. Cuyo resultado es $4100, grabndose en R27 el byte ms significativo y en R26 el byte menos significativo. Ejercicio: Escriba una porcin de programa que efecte la siguiente operacin: R25:R24 R25:R24 + 76 Puede hacerse con ADIW?

Instruccin ADC
Efecta la suma con acarreo de dos nmeros de 8 bits, contenidos en dos registros del CPU que pueden ser de R0 a R31.
Sintaxis ADC Rd, Rr Operacin Rd Rd+Rr+C Detalles Rd: Es uno de los registros R0..R31 Rr: Es uno de los registros R0..R31 C: es el contenido de la bandera de acarreo Banderas modificadas H, S, V, N, Z, C

Ejemplo
El uso de esta instruccin, conjuntamente con la de suma sin acarreo (ADD) permite sumar nmeros de ms de 8 bits. En la figura se muestra cmo se suman dos nmeros de 16 bits mediante sumas parciales de 8 bits. Se comienza por los bytes menos significativos y se termina con los bytes ms significativos.
InstruccATmega88Parte2Rev1.doc

-2-

26/04/2012

Pontificia Universidad Catlica del Per Curso : Sistemas Digitales Especialidad : Ing. Electrnica

Profesor : Ing. Hugo Pratt

Suma de nmeros de 16 bits


10110011 00110011 10110011 10000110 +

Suma sin acarreo de los bytes menos significativos

10110011 00110011

10110011 10000110

1 00111001 acarreo Resultado parcial byte menos significativo

Suma con acarreo de los bytes ms significativos

10110011 00110011 1 0 11100111

acarreo de suma anterior Resultado parcial byte menos significativo

acarreo

acarreo El resultado final 0 11100111 00111001

Fig. 1 Suma de nmeros de 16 bits mediante sumas parciales de 8 bits Un ejemplo de programa que efecta la suma indicada en la figura es el siguiente: LDI R0, 0b11010011 LDI R1, 0b11010011 LDI R2, 0b00110011 LDI R3, 0b10000110 ADD R1, R3 ADC R0, R2 Donde el sumando se ha grabado primero en R0:R1, el sumador en R2:R3, y el resultado de la suma se graba en R0:R1. Observar que la primera suma se efecta con la instruccin ADD, pues corresponde a los bytes menos significativos, y la segunda con la instruccin ADC, pues hay que considerar el acarreo generado en la primera suma. Luego de la ejecucin de la instruccin ADD, la bandera de acarreo contendr el acarreo de dicha suma (1 si hubo realmente acarreo, y 0 si no lo hubo). Este valor es empleado luego por la instruccin ADC en el programa.

InstruccATmega88Parte2Rev1.doc

-3-

26/04/2012

Pontificia Universidad Catlica del Per Curso : Sistemas Digitales Especialidad : Ing. Electrnica

Profesor : Ing. Hugo Pratt

Ejercicio: Repita el ejemplo, pero ahora empleando slo la instruccin ADC para ambas sumas. Aada las instrucciones que sean necesarias. Ejercicio: Escriba un programa que efecte la suma de los siguientes nmeros: $456789 y $FFEE00. El resultado debe almacenarse en los registros R18:R17:R16.

Instrucciones de resta
Estas instrucciones permiten efectuar la resta de nmeros. Hay dos tipos de instrucciones: resta sin prstamo, y resta con prstamo. En la resta sin prstamo al contenido de un registro (minuendo) se le resta el contenido de otro (sustraendo), y el resultado se almacena en el primero. En la resta con prstamo, adems de restar a un registro el contenido de otro, tambin se le resta el contenido de la bandera de acarreo. Hay tres instrucciones de resta sin prstamo: SUB, SUBI, SBIW, y dos instrucciones de resta con prstamo: SBC, SBCI. Es gracias a la resta con prstamo que puede efectuarse la resta de nmeros de ms de 8 bits.

Instrucciones SUB, SUBI


Efectan la resta sin prstamo de dos nmeros de 8 bits.
Sintaxis SUB Rd, Rr Operacin Rd Rd-Rr Detalles Rd: Es uno de los registros R0..R31 Rr: Es uno de los registros R0..R31 C: es el contenido de la bandera de acarreo Rd: Es uno de los registros R16..R31 K: es un nmero de 8 bits Banderas modificadas H, S, V, N, Z, C

SUBI Rd, K

Rd Rd K

H, S, V, N, Z, C

Ejercicio: la instruccin SUBI permite restarle a un registro una constante. No existe una instruccin similar para la suma (tal vez pudo haberse llamado ADDI). Sin embargo, por ejemplo, para sumar a R16 el nmero 4 se puede hacer as: LDI R17, 4 ADD R16, R17 Si en vez de ello se resta a R16 -4, como se indica: SUBI R16, -4 a) Determine si el resultado es el mismo. b) Determine si todas la banderas tienen en ambos casos los mismos valores. c) Para qu rengo de nmeros podra emplearse la instruccin SUBI?. Verifquelo con el simulador.

InstruccATmega88Parte2Rev1.doc

-4-

26/04/2012

Pontificia Universidad Catlica del Per Curso : Sistemas Digitales Especialidad : Ing. Electrnica

Profesor : Ing. Hugo Pratt

Instrucciones SBC, SBCI


Efectan la resta con prstamo de dos nmeros de 8 bits.
Sintaxis SBC Rd, Rr Operacin Rd Rd-Rr-C Detalles Rd: Es uno de los registros R0..R31 Rr: Es uno de los registros R0..R31 C: es el contenido de la bandera de acarreo Rd: Es uno de los registros R16..R31 K: es un nmero de 8 bits C: es el contenido de la bandera de acarreo. Banderas modificadas H, S, V, N, Z, C

SBCI Rd, K

Rd Rd -K-C

H, S, V, N, Z, C

Ejemplo de uso de las instrucciones SUB, SBC, SUBI, SBCI


As como la suma de nmeros de ms de 8 bits se realiza mediante sumas parciales de 8 bits, de la misma manera, para efectuar la resta de nmeros de ms de 8 bits de longitud se efecta mediante restas parciales de 8 bits, comenzando por los bytes menos significativos de los nmeros a restar (resta sin acarreo), y para restar los dems bytes se emplea la resta con prstamo. Supongamos que en los registros R31:R30:R29 est almacenado un nmero de 24 bits, y se le quiere restar el nmero $1AF501 Una solucin sera: SUBI R29, $01 SBCI R30, $AF SBCI R31, $1A Si en ves del anterior nmero se quisiera restar 1 (la unidad), al efectuar la resta hay que hacerla asumiendo que el nmero a restar es de 24 bits, o sea: $001. La resta quedara entonces as: SUBI R29, 1 SBCI R30, 0 SBCI R31, 0 Aunque parezca innecesario a primera vista, no debe olvidarse que en la primera resta podra haber prstamo, y ste ocurrir tambin luego en la segunda resta, y la instruccin SBCI toma en cuenta dicho prstamo (no solo se resta "0" sino tambin el prstamo que hubo en la anterior resta).

Instruccin SBIW
Efecta la resta sin prstamo de un nmero de 16 bits, contenido en uno de los pares de registros R25:R24, R27:R26, R29:R28, o R31:R30, y un nmero sin signo de 6 bits.
Sintaxis SBIW Rd, Rr
InstruccATmega88Parte2Rev1.doc

Operacin Rd+1:Rd Rd+1:Rd + K

Detalles Rd: Es uno de los

Banderas modificadas S, V, N, Z, C
26/04/2012

-5-

Pontificia Universidad Catlica del Per Curso : Sistemas Digitales Especialidad : Ing. Electrnica

Profesor : Ing. Hugo Pratt

registros pares R24, R26, R28, R30 K es un nmero sin signo de 6 bits. 0 K 63

Ejemplo
Para restar al par de registros R25:R24 el nmero 27, se escribira: SBIW R24, 27

Ejemplo
En la porcin de programa: LDI R26, $10 LDI R27, $40 SBIW R26, 1 Luego de ejecutarse la ltima instruccin se tendr grabado en R26 el valor $0F y en R27 el valor $40, pues la instruccin SBIW est efectuando la siguiente resta: $4010 - 1. Cuyo resultado es $400F, grabndose en R27 el byte ms significativo y en R26 el byte menos significativo.

Instrucciones de incremento y decremento


La instruccin de incremento le suma una unidad al contenido de uno de los registros R0..R31 del CPU. La de decremento le resta una unidad al contenido de uno de los registros R0..R31 del CPU.
Sintaxis INC Rd DEC Rd Operacin Rd Rd+1 Rd Rd 1 Detalles Rd: Es uno de los registros R0..R31 Rd: Es uno de los registros R0..R31 Banderas modificadas S, V, N, Z S, V, N, Z

Observar que, a diferencia de las instrucciones de suma y resta, tanto INC como DEC no modifican la bandera de acarreo C ni la bandera de medio acarreo H. Esto tiene utilidad cuando se emplea un registro como contador.

Ejemplo
Sumar dos nmeros de 64 bits (8 bytes) almacenados a partir de las direcciones $100 y $108 del espacio de datos, estando primero los bytes menos significativos. El resultado almacenarlo a partir de la direccin $110, con el byte menos significativo primero.

Solucin:
Como se mostr para la instruccin ADC, deben efectuarse sumas parciales comenzando por los bytes menos significativos. Una solucin (la menos elegante) es usar direccionamiento directo. As:
suma: LDS LDS ADD R16, $100 R17, $108 R16, R17

InstruccATmega88Parte2Rev1.doc

-6-

26/04/2012

Pontificia Universidad Catlica del Per Curso : Sistemas Digitales Especialidad : Ing. Electrnica
STS LDS LDS ADC STS ... ... LDS LDS ADC STS rjmp $110, R16 R16, $101 R17, $109 R16, R17 $111, R16

Profesor : Ing. Hugo Pratt

fin:

R16, $107 R17, $10F R16, R17 $117, R16 fin

En total se requieren 32 instrucciones, y puede observarse que las operaciones son las mismas, pero las direcciones de los operandos varan. Otra solucin, usando direccionamiento indirecto por registro es la mostrada a continuacin, en donde el registro R15 se utiliza como un contador. El registro X siempre apunta a la direccin del registro a sumar del primer nmero y el registro Y al del segundo nmero. El registro Z apunta a la direccin del registro para el resultado.

suma: LDI LDI LDI LDI LDI LDI LDI clc sigue: LD LD ADC ST DEC BRNE RJMP R26, $00 R27, $01 ; X = $100 inicio de primer nmero R28, $08 R29, $01 ; Y = $108, inicio del segundo nmero R30, $10 R31, 1 ; Z = $110, inicio del resultado r15, 8 ; el contador, 8 sumas a realizar ; usaremos slo ADC, y la primera vez ; tenemos que asegurarnos que C=0 R16, X+ R17, Y+ R16, R17 Z+, R16 R15 sigue fin

fin:

Puede verse que slo tom 15 instrucciones con el empleo del direccionamiento indexado. Observar adems que se ha empleado la instruccin DEC para descontar una unidad al contador, y cuando llega a cero es porque ya se terminaron las 8 sumas parciales. Preguntas: a) Qu pasara si en vez de usar la instruccin DEC se emplea la instruccin: SUBI R15, 1 b) Haga las modificaciones necesarias para que, reemplazando la instruccin DEC por: SUBI R15, 1 la suma de los nmeros se efecte correctamente. c) Cul de las dos versiones es menos complicada?

InstruccATmega88Parte2Rev1.doc

-7-

26/04/2012

Pontificia Universidad Catlica del Per Curso : Sistemas Digitales Especialidad : Ing. Electrnica

Profesor : Ing. Hugo Pratt

Ejercicio: Modifique el programa considerando ahora que los nmeros estn almacenados pero con el byte ms significativo en la direccin ms baja, y en el resultado tambin.

Instrucciones de comparacin
Estas instrucciones realizan la comparacin (resta) de dos nmeros, siendo uno de ellos el contenido de uno de los registros R0..R31 del CPU y el otro un nmero de 8 bits o uno de los registros antes mencionado. A diferencia de una instruccin de resta, estas instrucciones no modifican el contenido de los registros, slo modifican las banderas. Estas instrucciones se usan conjuntamente con las instrucciones de salto condicional para ejecutar una porcin de programa segn el valor particular de un registro o la relacin existente entre dos nmeros (mayor, mayor o igual, menor, menor o igual, igual).
Sintaxis CP Rd, Rr CPI Rd, K CPC Rd, Rr Operacin Rd-Rr Rd-K Rd Rd Rr - C Detalles Rd: Es uno de los registros R0..R31 Rr: Es uno de los registros R0..R31 Rd: Es uno de los registros R0..R31 K: Es un nmero de 8 bits Rd: Es uno de los registros R0..R31 Rr: Es uno de los registros R0..R31 C: es el contenido de la bandera de acarreo Banderas modificadas H, S, V, N, Z, C H, S, V, N, Z, C H, S, V, N, Z, C

Ejemplo
Se tiene almacenado en la memoria SRAM, las notas de los cinco laboratorios de un curso. Las notas son de 0 a 20. Se quiere calcular la suma de las notas, pero sin considerar la menor nota. En las direcciones $100, $101, $102 y $103 estn las notas. En la direccin $104 debe grabarse la suma de las notas. Solucin: Se muestran dos soluciones. En el primer caso se suman primero todas las notas, luego se determina la menor, y se resta sta a la suma realizada. En el segundo caso, conforme se van leyendo las notas se suman y se determina la menor. En el primer caso no se utiliza direccionamiento indexado. En la segunda s, con lo cual el programa utiliza menos instrucciones. Como se estn comparado nmeros sin signo (pues las notas van de 0 a 20), para analizar el resultado de las comparaciones se pueden emplear las instrucciones BRLO BRSH. En el ejemplo se emplea slo BRLO. Si los nmeros hubiesen sido nmeros con signo, tendran que haberse empleado las instrucciones BRLT BRGE.

InstruccATmega88Parte2Rev1.doc

-8-

26/04/2012

Pontificia Universidad Catlica del Per Curso : Sistemas Digitales Especialidad : Ing. Electrnica
.include "m88def.inc" ; Programa que determina la suma ; un curso. Las notas son de 0 a ; No debe cosiderarse en la suma ; se suman tres notas). ; La suma debe almacenarse en la .dseg .org $100 .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .cseg .org inicio: lds lds add lds add lds add lds lds cp brlo mov lds cp brlo mov lds cp brlo mov sub sts rjmp r16, Nota1 r17, Nota2 r16, r17 r17, Nota3 r16, r17 r17, Nota4 r16, r17 r17, Nota1 r18, Nota2 r17, r18 sig1 r17, r18 r18, Nota3 r17, r18 sig2 r17, r18 r18, Nota4 r17, r18 sig3 r17, r18 r16, r17 Suma, r16 fin 0

Profesor : Ing. Hugo Pratt

de notas de prcticas de 20. Son 4 prcticas. la menor nota. (slo direccin $104

Nota1: Nota2: Nota3: Nota4: Suma:

; primero sumamos las cuatro notas

; ahora determinamos la menor nota

; ponemos la menor en r17

sig1:

sig2:

sig3: fin:

; en r17 la menor nota. Se resta ; el resultado en Suma

InstruccATmega88Parte2Rev1.doc

-9-

26/04/2012

Pontificia Universidad Catlica del Per Curso : Sistemas Digitales Especialidad : Ing. Electrnica

Profesor : Ing. Hugo Pratt

.include "m88def.inc" ; SumaNotas2 ; ; Programa que determina la suma de notas de prcticas de un curso. Las notas son de 0 a 20. ; Son 4 prcticas y no debe considerarse en la suma la menor nota (slo se suman tres notas). ; La suma debe almacenarse en la direccin $104 ; Aqu se usa direccionamiento por registro indirecto para la suma y bsqueda del nmero menor. ; Para el resultado de las sumas parciales se usar r16 ; la nota menor se almacenar en r17 .def .def .dseg .org .byte 1 .byte 1 .byte 1 .byte 1 .byte 1 .cseg .org inicio: ldi ldi ldi ld mov mov ld add cp brlo mov dec brne sub sts rjmp XH, high(Nota1) XL, low(Nota1) r18, 3 r19, X+ sumpar, r19 menor, r19 r20, X+ sumpar, r20 menor, r20 sig2 menor, r20 r18 sig1 sumpar, menor Suma, sumpar fin ; X apunta a direccin Nota1 ; contador (se harn 3 sumas y comparaciones) ; En R19 primera nota ; suma parcial = Nota1 ; En r17 estar la menor nota ; se lee siguiente nota ; se aade a la suma ; analizamos si es la menor nota ; S lo es, actualizamos menor ; Hay ms notas por leer? ; se haban sumado las 4 notas. Restamos la menor sumpar = r16 menor = r17

$100

Nota1: Nota2: Nota3: Nota4: Suma:

sig1:

sig2:

fin:

InstruccATmega88Parte2Rev1.doc

-10-

26/04/2012

You might also like