; ****************************************************** ; BASIC .ASM template file for AVR ; ****************************************************** ;practicando algunas instrucciones del atmega8 en asembler .include "C:\VMLAB\include\m8def.inc" .cseg ;usamos la memoria flash del micro .org $00 ;comenzamos en $00 rjmp inicio inicio: ;veamos la instruccion add ldi r16,20 ;con la instruccion ldi muevo el valor de 20 a r16 ldi r17,21 ;con la instruccion ldi muevo el valor de 21 a r17 add r16,r17 ;el valor sumado se almacena en el registro r16 fin: rjmp fin
;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo ;con el f7 procedemos a avanzar nuestro codigo
; ****************************************************** ; BASIC .ASM template file for AVR ; ****************************************************** ;practicando algunas instrucciones del atmega8 en asembler .include "C:\VMLAB\include\m8def.inc" .cseg ;usamos la memoria flash del micro .org $00 ;comenzamos en $00 rjmp inicio inicio: ;veamos la instruccion add ldi r16,0 ;con la instruccion ldi muevo el valor de 20 a r16 ldi r17,0 ;con la instruccion ldi muevo el valor de 21 a r17 add r16,r17 ;el valor sumado se almacena en el registro r16 fin: rjmp fin
;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo ;con el f7 procedemos a avanzar nuestro codigo
Vemos q al sumar dos registros ceros se activa el sreg de Z indicando que ai un cero
CUADO UNO DE LOS REGISTRO SOBREPASA SU VALOR MAXIMO:
; ****************************************************** ; BASIC .ASM template file for AVR ; ****************************************************** ;practicando algunas instrucciones del atmega8 en asembler .include "C:\VMLAB\include\m8def.inc" .cseg ;usamos la memoria flash del micro .org $00 ;comenzamos en $00 rjmp inicio inicio: ;veamos la instruccion add ldi r16,$ff ;con la instruccion ldi muevo el valor de 20 a r16 ldi r17,$01 ;con la instruccion ldi muevo el valor de 21 a r17 add r16,r17 ;el valor sumado se almacena en el registro r16 fin: rjmp fin
;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo ;con el f7 procedemos a avanzar nuestro codigo
VEMOS Q EL REGISTRO SE ACE CERO R16 DONDE SE SUMA TODO, los registros sel sreg se ven aceftados:
ADC: ESTA INSTRUCCIN SUMA DOS REGISTROS CON CARRY
; ****************************************************** ; BASIC .ASM template file for AVR ; ****************************************************** ;practicando algunas instrucciones del atmega8 en asembler .include "C:\VMLAB\include\m8def.inc" .cseg ;usamos la memoria flash del micro .org $00 ;comenzamos en $00 rjmp inicio inicio: ;veamos la instruccion adc ldi r16,$E4 ;al sumarlo hexadecimalmente ldi r17,$49 ;nos queda 12d pero el 1 es nuestro carry asi q se activa adc r16,r17 ;la bandera C del sreg fin: rjmp fin
;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo ;con el f7 procedemos a avanzar nuestro codigo
Se activa las bandera c
; ****************************************************** ; BASIC .ASM template file for AVR ; ****************************************************** ;practicando algunas instrucciones del atmega8 en asembler .include "C:\VMLAB\include\m8def.inc" .cseg ;usamos la memoria flash del micro .org $00 ;comenzamos en $00 rjmp inicio inicio: ;veamos la instruccion adc ;siendo mis numeros en hexadecimal ldi r18,$00 ldi r16,$E4 ;al sumarlo hexadecimalmente ldi r17,$49 ;nos queda 12d pero el 1 es nuestro carry asi q se activa add r16,r17 ;la bandera C del sreg y el acarreo queda adc r18,r17 ;al usar el adc sumo r18 con r17 debiendo quedar $49+carry+$00 fin: rjmp fin
;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo ;con el f7 procedemos a avanzar nuestro codigo
Al fianl nuestro desaparesce de la bandera pues asido sumado
Sea la suma: $4AF3+ $3159 7C4C COMO LOGRAMOS OBTENER ESTE RESULATOD EN EL VMLAB, ESTO LO ASEMOS USAND EL dd i el adc, primero cogemos de dos en dos, es decir: $F3+ //USAMOS EL ADD PARA SUMARLO// $59 14C TENGO UN CARRY DE 1 AHORA EL SEGUNDO BLOQUE: $01+ //USAMOS EL ADC PARA SUMARLOS// $4A+ $31 $7C MI RESULTADO FINAL ES : $4AF3+ $3159 7C4C
; ****************************************************** ; BASIC .ASM template file for AVR ; ****************************************************** ;practicando algunas instrucciones del atmega8 en asembler .include "C:\VMLAB\include\m8def.inc" .cseg ;usamos la memoria flash del micro .org $00 ;comenzamos en $00 rjmp inicio inicio: ;veamos la instruccion adc ;siendo mis numeros en hexadecimal ldi r16,$F3 ldi r17,$59 ldi r18,$4A ldi r19,$31 add r16,r17 adc r18,r19 fin: rjmp fin
;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo ;con el f7 procedemos a avanzar nuestro codigo
ADIW: ESTA INSTRUCCIN SUMA INMEDIATA CON UNA CONSTANTE ADIW agrega un valor K (0-63) a un par de registros y deja el resultado en el par de registros. Esta instruccin opera en los cuatro pares de registros superiores, y est bien preparado para las operaciones en los registros punteros. Ejemplo: ADIW r24,1 ; Sumar 1 a r25:r24 ADIW r30,63 ; Sumar 63 al puntero Z (r31:r30) ; ****************************************************** ; BASIC .ASM template file for AVR ; ****************************************************** ;practicando algunas instrucciones del atmega8 en asembler .include "C:\VMLAB\include\m8def.inc" .cseg ;usamos la memoria flash del micro .org $00 ;comenzamos en $00 rjmp inicio inicio: ;veamos la instruccion adIW ;siendo mis numeros en hexadecimal ldi r30,$FF ldi r31,$00 adiw r30,$01 fin: rjmp fin ;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo ;con el f7 procedemos a avanzar nuestro codigo El acarreo del r30 se va a r31
SUB: RESTA DOS REGISTROS Descripcin: SUB resta dos registros y deja el resultado en el registro destino Rd. H: Estar a set (uno) si haba un carry negativo (Borrow) del bit 3, de lo contrario se borrar (cero). V: Estar a set si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. N: Estar a set si el bit MSB del resultado est a set, de lo contrario se borrar. Z: Estar a set si el resultado es $00, de lo contrario se borrar. C: Estar a set si el valor absoluto del contenido de Rr es mayor que el valor absoluto de Rd, de lo contrario se borrar.
(bit menos significativo (LSB)) bit mas significativo(msb) En nuestro ejemplos
La bandera n est en 1 pues nuestro resultado es $f0=0b11110000
; ****************************************************** ; BASIC .ASM template file for AVR ; ****************************************************** ;practicando algunas instrucciones del atmega8 en asembler .include "C:\VMLAB\include\m8def.inc" .cseg ;usamos la memoria flash del micro .org $00 ;comenzamos en $00 rjmp inicio inicio: ;veamos la instruccion sub ;siendo mis numeros en hexadecimal ldi r16,$FF ldi r17,$0F SUB r16,r17
fin: rjmp fin ;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo ;con el f7 procedemos a avanzar nuestro codigo
SUBI: RESTA UNA CONSTANTE A UN REGISTRO Descripcin: SUBI resta un registro con una constante y deja el resultado en el registro destino Rd. Esta instruccin trabaja en los registros R16 a R31 y est muy bien preparado para el funcionamiento con los punteros X, Z e Y.
H: Estar a set (uno) si haba un carry negativo (Borrow) del bit 3, de lo contrario se borrar (cero). V: Estar a set si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. N: Estar a set si el bit MSB del resultado est a set, de lo contrario se borrar. Z: Estar a set si el resultado es $00, de lo contrario se borrar. C: Estar a set si el valor absoluto de K es mayor que el valor absoluto de Rd, de lo contrario se borrar.
; ****************************************************** ; BASIC .ASM template file for AVR ; ****************************************************** ;practicando algunas instrucciones del atmega8 en asembler .include "C:\VMLAB\include\m8def.inc" .cseg ;usamos la memoria flash del micro .org $00 ;comenzamos en $00 rjmp inicio inicio: ;veamos la instruccion subi ;siendo mis numeros en hexadecimal ldi r16,$FF ldi r17,$0F subi r16,$FF
fin: rjmp fin
;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo ;con el f7 procedemos a avanzar nuestro codigo
Se activa el bit de la sreg Z por el resultado
; ****************************************************** ; BASIC .ASM template file for AVR ; ****************************************************** ;practicando algunas instrucciones del atmega8 en asembler .include "C:\VMLAB\include\m8def.inc" .cseg ;usamos la memoria flash del micro .org $00 ;comenzamos en $00 rjmp inicio inicio: ;veamos la instruccion subi ;siendo mis numeros en hexadecimal ldi r16,$FF ldi r17,$0F subi r16,$0F
fin: rjmp fin
;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo ;con el f7 procedemos a avanzar nuestro codigo
COMO EL BIT MSB DEL RESULTADO ESTA EN SET EL BIT n ESTARA EN 1
SBC: RESTA DE DOS REGISTROS CON CAARRY
Descripcin: SBC resta dos registros y resta el flag C, y deja el resultado en el registro destino Rd.
H: Estar a set (uno) si haba un carry negativo (Borrow) del bit 3, de lo contrario se borrar (cero). V: Estar a set si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. N: Estar a set si el bit MSB del resultado est a set, de lo contrario se borrar. Z: El valor anterior permanece sin cambio cuando el resultado es cero, de lo contrario se borrar. C: Estar a set si el valor absoluto del contenido de Rr + el carry previo es mayor que el valor absoluto de Rd, de lo contrario se borrar.
; ****************************************************** ; BASIC .ASM template file for AVR ; ****************************************************** ;practicando algunas instrucciones del atmega8 en asembler .include "C:\VMLAB\include\m8def.inc" .cseg ;usamos la memoria flash del micro .org $00 ;comenzamos en $00 rjmp inicio inicio: ;veamos la instruccion sbc ;siendo mis numeros en hexadecimal ldi r16,$FF ldi r17,$0F ldi r18,$01 ldi r19,$02 sub r17,r16 sbc r19,r18 fin: rjmp fin
;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo ;con el f7 procedemos a avanzar nuestro codigo
Se resta r19-r18-carry El carry proveniente de otra operacion
SBCI: RESTA DE CONSTANSTE CON CARRY A UN REGISTRO Descripcin: SBCI resta una constante de un registro y lo hace con el flag C, y deja el resultado en el registro destino Rd.
H: Estar a set (uno) si haba un carry negativo (Borrow) del bit 3, de lo contrario se borrar (cero). V: Estar a set si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. N: Estar a set si el bit MSB del resultado est a set, de lo contrario se borrar. Z: El valor anterior permanece sin cambio cuando el resultado es cero, de lo contrario se borrar. C: Estar a set si el valor absoluto de la constante + el carry previo es mayor que el valor absoluto de Rd, de lo contrario se borrar.
; ****************************************************** ; BASIC .ASM template file for AVR ; ****************************************************** ;practicando algunas instrucciones del atmega8 en asembler .include "C:\VMLAB\include\m8def.inc" .cseg ;usamos la memoria flash del micro .org $00 ;comenzamos en $00 rjmp inicio inicio: ;veamos la instruccion sbci ;siendo mis numeros en hexadecimal ldi r16,$FF ldi r17,$0F ldi r18,$01 ldi r19,$04 sub r17,r16 sbci r19,$02 fin: rjmp fin
;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo ;con el f7 procedemos a avanzar nuestro codigo
SBIW: RESTA UN VALOR K O CONSTANTE A UNA PALABRA Descripcin: SBIW resta un valor K (0-63) a un par de registros y deja el resultado en el par de registros. Esta instruccin opera en los cuatro pares de registros superiores, y est bien preparado para las operaciones en los registros puntero.
S: N V V: Estar a set si ocurre un desbordamiento del complemento a dos como resultado de la operacin, de lo contrario se borrar. N: Estar a set si el bit MSB del resultado est a set, de lo contrario se borrar. Z: Estar a set si el resultado es $0000, de lo contrario se borrar. C: Estar a set si el valor absoluto de K es mayor que el valor absoluto de Rd, de lo contrario se borrar.
; ****************************************************** ; BASIC .ASM template file for AVR ; ****************************************************** ;practicando algunas instrucciones del atmega8 en asembler .include "C:\VMLAB\include\m8def.inc" .cseg ;usamos la memoria flash del micro .org $00 ;comenzamos en $00 rjmp inicio inicio: ;veamos la instruccion sbiw ;siendo mis numeros en hexadecimal ldi r16,$FF ldi r17,$0F ldi r30,$01 ldi r31,$04 sbiw r30,$02
fin: rjmp fin
;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo ;con el f7 procedemos a avanzar nuestro codigo
COM: REALIZA EL COMPLEMENTO A UNO Descripcin: COM realiza el complemento a uno del registro Rd.
V: 0, borrado. N: Estar a set si el bit MSB del resultado est a set, de lo contrario se borrar. Z: Estar a set si el resultado es $00, de lo contrario se borrar. C: 1, set.
; ****************************************************** ; BASIC .ASM template file for AVR ; ****************************************************** ;practicando algunas instrucciones del atmega8 en asembler .include "C:\VMLAB\include\m8def.inc" .cseg ;usamos la memoria flash del micro .org $00 ;comenzamos en $00 rjmp inicio inicio: ;veamos la instruccion COM ;siendo mis numeros en hexadecimal ldi r16,$FF ldi r17,$0F ldi r18,$01 ldi r19,$04 COM r19
fin: rjmp fin
;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo ;con el f7 procedemos a avanzar nuestro codigo
Uso de directivas: http://es.scribd.com/doc/7842926/Capitulo4-Directivas-y-Software-Del-AVR-Studio-espanol uso de las instrucciones: http://www.sc.ehu.es/sbweb/webcentro/automatica/web_avr/archivos/SET%20AT90S8515/A ritm%E9ticas&l%F3gicas/ADIW.htm