Posted by : Andrés Cuaycal
miércoles, 15 de abril de 2015
INSTRUCCIONES ARITMÉTICAS
Todas las instrucciones se encuentran en el set de instrucciones.
>> Instrucción INC, Increment
Esta instrucción permite agregar 1 al contenido de Rd y el resultado es ubicado en el mismo Rd.Operación:
Rd ← Rd+1
Sintaxis: Operandos
INC Rd 0 ≤ d ≤ 31
Ejemplos:
ldi r16,20 ; cargo en R16
el valor de 20
inc r16 ; R16=R16+1
inc r16 ; R16=R16+1
; ==
R16 termina con el valor de 22 ==
>> Instrucción DEC, Decrement
Esta instrucción permite restar 1 al contenido del registro Rd y el resultado es ubicado en el mismo registro Rd.Operación:
Rd ← Rd-1
Sintaxis: Operandos
DEC Rd 0 ≤ d ≤ 31
Ejemplos:
ldi r20,15 ; cargo en R20
el valor de 15
dec r20 ; R20=R20-1
dec r20 ; R20=R20-1
; == R20 termina con el valor de 13 ==
>> Instrucción ADD, Add without carry
Esta instrucción suma los contenidos de dos registros Rd y Rr sin considerar la bandera del carry, y el resultado de la operación se lo ubica en el registro de destino Rd.Operación:
Rd ← Rd+Rr
Sintaxis: Operandos
ADD Rd,Rr 0 ≤ d ≤ 31, 0 ≤ r ≤ 31
Ejemplos:
ldi r16,15 ; cargo en R16
el valor de 15
ldi r17,14 ; cargo en R17
el valor de 14
add r16,r17 ; sumo R16+R17,
resultado se guarda en R16
;
= R16 termina con 29, R17 sigue con 14
>> Instrucción ADC, Add with carry
Esta instrucción suma los contenidos de dos registros Rd y Rr, considerando además la bandera del carry, y el resultado de la operación se lo ubica en el registro de destino Rd.Operación:
Rd ← Rd+Rr+C
Sintaxis: Operandos
ADC Rd,Rr 0 ≤ d ≤ 31, 0 ≤ r ≤ 31
Ejemplos:
ldi r16,15 ; cargo en R16
el valor de 15
ldi r17,14 ; cargo en R17
el valor de 14
sec ; hago que el carry sea C=1
add r16,r17 ; sumo
R16+R17+C, resultado se guarda en R16
;
= R16 termina con 30, R17 sigue con 14>> Instrucción ADIW, Add Immediate to Word
Esta instrucción suma de forma inmediata el valor de una constante (0-63) y el resultado es ubicado a un par de registros. Esta instrucción opera con los cuatro registros pares más altos y es apropiada para trabajar con los registros punteros.Operación:
Rd+1:Rd ← Rd+1:Rd+K
Sintaxis: Operandos
ADIW Rd+1:Rd,K d {24, 26, 28, 30} 0 ≤ K ≤ 63
Ejemplos:
adiw r26,5 ;
R27:R26=R27:R26+5
adiw r27:r26,5 ;
R27:R26=R27:R26+5
En los ejemplos anteriores las dos formas de utilizar la instrucción son equivalentes.
>> Instrucción SUB, Substract without carry
Esta instrucción realiza la sustracción del contenido del registro de origen del contenido del registro de destino, y el resultado queda en el registro de destino.Operación:
Rd ← Rd-Rr
Sintaxis: Operandos
SUB Rd,Rr 0 ≤ d ≤ 31, 0 ≤ r ≤ 31
Ejemplos:
ldi r28,12 ; cargo en R28
el valor de 12
ldi r15,10 ; cargo en R15
el valor de 10
sub r28,r15 ; resto R28-R15,
el resultado se guarda en R28
; = R28 termina con 2, r15 sigue con 12
>> Instrucción SBC, Substract with carry
Esta instrucción realiza la sustracción del contenido del registro de origen del contenido del registro de destino y además resta el carry, el resultado queda en el registro de destino.Operación:
Rd ← Rd-Rr-C
Sintaxis: Operandos
SBC Rd,Rr 0 ≤ d ≤ 31, 0 ≤ r ≤ 31
Ejemplos:
ldi r28,12 ; cargo en R28
el valor de 12
ldi r16,10 ; cargo en R15
el valor de 10
sec ; hago que el carry sea C=1
sub r28,r16 ; resto R28-R15,
el resultado se guarda en R28
; = R28 termina con 1, r15 sigue con 12
>> Instrucción SUBI, Substract inmediate
Esta instrucción realiza la sustracción de una constante del contenido del registro de destino y el resultado queda en el registro de destino. Esta instrucción trabaja con los registros R16 al 31.Operación:
Rd ← Rd-K
Sintaxis: Operandos
SUBI Rd,K 0 ≤ d ≤ 31, 0 ≤ K ≤ 255
Ejemplos:
ldi r25,13 ; cargo en R25
el valor de 13
subi r25,5 ; resto 5 de
R25
; = R25 termina con 8
>> Instrucción SBIW, Substract immediate from Word
Esta instrucción realiza la sustracción de forma inmediata de una constante (0-63) y el resultado es ubicado a un par de registros. Esta instrucción opera con los cuatro registros pares más altos y es apropiada para trabajar con los registros punteros.Operación:
Rd+1:Rd ← Rd+1:Rd-K
Sintaxis: Operandos
SBIW Rd+1:Rd,K d {24, 26, 28, 30} 0 ≤ K ≤ 63
Ejemplos:
sbiw r26,5 ;
R27:R26=R27:R26-5
sbiw
r27:r26,5 ; R27:R26=R27:R26-5En los ejemplos anteriores las dos formas de utilizar la instrucción son equivalentes.
>> Instrucción MUL, Multiply Unsigned
Esta instrucción realiza la multiplicación de dos numeros de 8bits, con un resultado de 16 bits.
Rd
|
Rr
|
R1
|
R0
|
||
Multiplicando
|
x
|
Multiplicador
|
→
|
Product
High
|
Product
Low
|
8
|
8
|
16
|
Operación:
R1:R0 ← RdxRr (unsigned ← unsigned x unsigned)
Sintaxis: Operandos
MUL Rd,Rr 0 ≤ d ≤ 31, 0 ≤ r ≤ 31
Ejemplos:
ldi r18,100 ; cargo en R18
el valor de 100
ldi r19,200 ; cargo en R19
el valor de 200
mul r18,r19 ; multiplico R18
x R19 = 100 X 200 = 20000, guardado en R1:R0
movw r18,r0 ; copio el
resultado de vuelta a R19:R18
Posts Relacionados :
- Back to Home »
- Lenguaje Assembler »
- Instrucciones Aritméticas
Este comentario ha sido eliminado por un administrador del blog.
ResponderEliminar