Ejercicio - Instrucciones de Transferencia
Transcript of Ejercicio - Instrucciones de Transferencia
-
7/21/2019 Ejercicio - Instrucciones de Transferencia
1/17
SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 1
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
EJERCICIO PARA PRACTICAR EL USO DE LAS
INSTRUCCIONES DE TRANSFERENCIA
Desarrollar un programa para el microcontrolador ATmega164P, quepermita llenar las doce primeras localidades de la memoria de datos, conlos cdigos ASCII del nmero 1, de la letra A mayscula y de la letra aminscula en forma alternada, tal como se muestra en la siguiente figura;donde 0x31 es el ASCII del 1, 0x41 es el ASCII de la A y 0x61 es elASCII de la a:
PRIMERA SOLUCIN
Esta solucin utiliza direccionamiento directo y valores numricos hexadecimales.
LDI R16,0x31LDI R17,0x41LDI R18,0x61STS 0x100,R16STS 0x101,R17
-
7/21/2019 Ejercicio - Instrucciones de Transferencia
2/17
SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 2
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
STS 0x102,R18STS 0x103,R16STS 0x104,R17STS 0x105,R18STS 0x106,R16
STS 0x107,R17STS 0x108,R18STS 0x109,R16STS 0x10A,R17STS 0x10B,R18
El Mdulo Fuente contenido en el archivo .ASM es el que muestra a continuacin:
; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES; DE LA MEMORIA DE DATOS, CON LOS CDIGOS ASCII DEL NMERO 1,; DE LA LETRA A MAYSCULA Y DE LA LETRA a MINSCULA,; ALTERNADAMENTE.
; LA SOLUCIN UTILIZA DIRECCIONAMIENTO DIRECTO; Y VALORES NUMRICOS HEXADECIMALES;.DEVICE ATMEGA164P;.CSEG
LDI R16,0x31LDI R17,0x41LDI R18,0x61STS 0x100,R16STS 0x101,R17STS 0x102,R18STS 0x103,R16STS 0x104,R17STS 0x105,R18
STS 0x106,R16STS 0x107,R17STS 0x108,R18STS 0x109,R16STS 0x10A,R17STS 0x10B,R18
;FIN: RJMP FIN;.EXIT ; FIN DEL MODULO FUENTE
El resultado del ensamblado contenido en el archivo .LST es:
AVRASM ver. 2.1.12 C:\Documents_and_Settings\Administrador\Mis_documentos\AVRfiles\Llenar\ATmega164\Llenar01\Llenar01.asm Sun Mar 22 10:35:41 2009
; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES; DE LA MEMORIA DE DATOS, CON LOS CDIGOS ASCII DEL NMERO 1,; DE LA LETRA A MAYSCULA Y DE LA LETRA A MINSCULA,; ALTERNADAMENTE.; LA SOLUCIN UTILIZA DIRECCIONAMIENTO DIRECTO; Y VALORES NUMRICOS HEXADECIMALES;.DEVICE ATMEGA164P;.CSEG
000000 e301 LDI R16,0x31000001 e411 LDI R17,0x41
000002 e621 LDI R18,0x61000003 9300 0100 STS 0x100,R16000005 9310 0101 STS 0x101,R17
-
7/21/2019 Ejercicio - Instrucciones de Transferencia
3/17
SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 3
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
000007 9320 0102 STS 0x102,R18000009 9300 0103 STS 0x103,R1600000b 9310 0104 STS 0x104,R1700000d 9320 0105 STS 0x105,R1800000f 9300 0106 STS 0x106,R16000011 9310 0107 STS 0x107,R17000013 9320 0108 STS 0x108,R18
000015 9300 0109 STS 0x109,R16000017 9310 010a STS 0x10A,R17000019 9320 010b STS 0x10B,R18
;00001b cfff FIN: RJMP FIN
;
RESOURCE USE INFORMATION------------------------
Notice:The register and instruction counts are symbol table hit counts,and hence implicitly used resources are not counted, eg, the'lpm' instruction without operands implicitly uses r0 and z,none of which are counted.
x,y,z are separate entities in the symbol table and arecounted separately from r26..r31 here.
.dseg memory usage only counts static data declared with .byte
ATMEGA164P register use summary:r0 : 0 r1 : 0 r2 : 0 r3 : 0 r4 : 0 r5 : 0 r6 : 0 r7 : 0r8 : 0 r9 : 0 r10: 0 r11: 0 r12: 0 r13: 0 r14: 0 r15: 0r16: 5 r17: 5 r18: 5 r19: 0 r20: 0 r21: 0 r22: 0 r23: 0r24: 0 r25: 0 r26: 0 r27: 0 r28: 0 r29: 0 r30: 0 r31: 0x : 0 y : 0 z : 0Registers used: 3 out of 35 (8.6%)
ATMEGA164P instruction use summary:adc : 0 add : 0 adiw : 0 and : 0 andi : 0 asr : 0bclr : 0 bld : 0 brbc : 0 brbs : 0 brcc : 0 brcs : 0break : 0 breq : 0 brge : 0 brhc : 0 brhs : 0 brid : 0brie : 0 brlo : 0 brlt : 0 brmi : 0 brne : 0 brpl : 0brsh : 0 brtc : 0 brts : 0 brvc : 0 brvs : 0 bset : 0bst : 0 call : 0 cbi : 0 cbr : 0 clc : 0 clh : 0cli : 0 cln : 0 clr : 0 cls : 0 clt : 0 clv : 0clz : 0 com : 0 cp : 0 cpc : 0 cpi : 0 cpse : 0dec : 0 eicall: 0 eijmp : 0 elpm : 0 eor : 0 fmul : 0fmuls : 0 fmulsu: 0 icall : 0 ijmp : 0 in : 0 inc : 0jmp : 0 ld : 0 ldd : 0 ldi : 3 lds : 0 lpm : 0lsl : 0 lsr : 0 mov : 0 movw : 0 mul : 0 muls : 0mulsu : 0 neg : 0 nop : 0 or : 0 ori : 0 out : 0pop : 0 push : 0 rcall : 0 ret : 0 reti : 0 rjmp : 1
rol : 0 ror : 0 sbc : 0 sbci : 0 sbi : 0 sbic : 0sbis : 0 sbiw : 0 sbr : 0 sbrc : 0 sbrs : 0 sec : 0seh : 0 sei : 0 sen : 0 ser : 0 ses : 0 set : 0sev : 0 sez : 0 sleep : 0 spm : 0 st : 0 std : 0sts : 12 sub : 0 subi : 0 swap : 0 tst : 0 wdr : 0
Instructions used: 3 out of 114 (2.6%)
ATMEGA164P memory use summary [bytes]:Segment Begin End Code Data Used Size Use%---------------------------------------------------------------[.cseg] 0x000000 0x000038 56 0 56 9999999 0.0%[.dseg] 0x000060 0x000060 0 0 0 9999999 0.0%[.eseg] 0x000000 0x000000 0 0 0 9999999 0.0%
Assembly complete, 0 errors, 0 warnings
-
7/21/2019 Ejercicio - Instrucciones de Transferencia
4/17
SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 4
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
El cdigo de mquina contenido en el archivo .HEX es:
:020000020000FC:1000000001E311E421E60093000110930101209324:100010000201009303011093040120930501009352:100020000601109307012093080100930901109322:080030000A0120930B01FFCF30:00000001FF
VARIACIN DE LA PRIMERA SOLUCIN
Esta solucin utiliza direccionamiento directo y expresiones con valores numricos.
LDI R16,0x31LDI R17,0x41LDI R18,0x61STS 0x100+0,R16
STS 0x100+1,R17STS 0x100+2,R18STS 0x100+3,R16STS 0x100+4,R17STS 0x100+5,R18STS 0x100+6,R16STS 0x100+7,R17STS 0x100+8,R18STS 0x100+9,R16STS 0x100+10,R17STS 0x100+11,R18
VARIACIN DE LA PRIMERA SOLUCIN, PEROQUE NO CUMPLE LO SOLICITADO
Esta solucin utiliza tambin direccionamiento directo y expresiones con valoresnumricos. ATENCIN: esta solucin llena otras localidades, con otros valores.
LDI R16,31LDI R17,41LDI R18,61STS 100+0,R16STS 100+1,R17STS 100+2,R18STS 100+3,R16STS 100+4,R17STS 100+5,R18STS 100+6,R16STS 100+7,R17STS 100+8,R18STS 100+9,R16
STS 100+10,R17STS 100+11,R18
-
7/21/2019 Ejercicio - Instrucciones de Transferencia
5/17
SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 5
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
NUEVA VARIACIN DE LA PRIMERA SOLUCIN
Esta solucin utiliza direccionamiento directo y expresiones con etiquetas.
LDI R16,NUMEROLDI R17,MAYUSCLDI R18,MINUSCSTS BLOQUE+0,R16STS BLOQUE+1,R17STS BLOQUE+2,R18STS BLOQUE+3,R16STS BLOQUE+4,R17STS BLOQUE+5,R18STS BLOQUE+6,R16STS BLOQUE+7,R17
STS BLOQUE+8,R18STS BLOQUE+9,R16STS BLOQUE+10,R17STS BLOQUE+11,R18
El Mdulo Fuente contenido en el archivo .ASM es el que muestra a continuacin:
; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES; DE LA MEMORIA DE DATOS, CON LOS CDIGOS ASCII DEL NMERO 1; DE LA LETRA A MAYSCULA Y DE LA LETRA a MINSCULA,; ALTERNADAMENTE.; LA SOLUCIN UTILIZA DIRECCIONAMIENTO DIRECTO; Y EXPRESIONES CON ETIQUETAS
;.DEVICE ATMEGA164P;.EQU NLOC = 12.EQU NUMERO = 0x31.EQU MAYUSC = 0x41.EQU MINUSC = 0x61;.DSEG.ORG 0x100BLOQUE: .BYTE NLOC;.CSEG
LDI R16,NUMERO
LDI R17,MAYUSCLDI R18,MINUSCSTS BLOQUE+0,R16STS BLOQUE+1,R17STS BLOQUE+2,R18STS BLOQUE+3,R16STS BLOQUE+4,R17STS BLOQUE+5,R18STS BLOQUE+6,R16STS BLOQUE+7,R17STS BLOQUE+8,R18STS BLOQUE+9,R16STS BLOQUE+10,R17STS BLOQUE+11,R18
;
FIN: RJMP FIN;.EXIT ; FIN DEL MODULO FUENTE
-
7/21/2019 Ejercicio - Instrucciones de Transferencia
6/17
SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 6
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
Para asignar los valores numricos a las etiquetas, se utiliza la Directiva deEQUIVALENCIA (.EQU)
Para asignar los valores de las direcciones de la SRAM a las etiquetas, se utilizan: laDirectiva de Reservacin de zonas de memoria SRAM (.BYTE) y la Directiva de
Reubicacin (.ORG), que permite establecer el origen del bloque de localidades de laSRAM. Esta misma directiva, sirve para reubicar los programas cuando es necesario.
De esta manera se facilita al programador la actualizacin de los programas, porque esms comprensible el algoritmo implementado y es ms rpido de modificarlo, como seve en el siguiente Mdulo Fuente.
; PROGRAMA PARA LLENAR LAS QUINCE LOCALIDADES A PARTIR DE LA 200 HEXADECIMAL; DE LA MEMORIA DE DATOS, CON LOS CDIGOS ASCII DEL NMERO 0; DE LA LETRA Z MAYSCULA Y DE LA LETRA t MINSCULA,; ALTERNADAMENTE.
; LA SOLUCIN UTILIZA DIRECCIONAMIENTO DIRECTO; Y EXPRESIONES CON ETIQUETAS;.DEVICE ATMEGA164P;.EQU NLOC = 15.EQU NUMERO = '0'.EQU MAYUSC = 'Z'.EQU MINUSC = 't';.DSEG.ORG 0x200BLOQUE: .BYTE NLOC;.CSEG
LDI R16,NUMEROLDI R17,MAYUSCLDI R18,MINUSCSTS BLOQUE+0,R16STS BLOQUE+1,R17STS BLOQUE+2,R18STS BLOQUE+3,R16STS BLOQUE+4,R17STS BLOQUE+5,R18STS BLOQUE+6,R16STS BLOQUE+7,R17STS BLOQUE+8,R18STS BLOQUE+9,R16STS BLOQUE+10,R17
STS BLOQUE+11,R18STS BLOQUE+12,R16STS BLOQUE+13,R17STS BLOQUE+14,R18
;FIN: RJMP FIN;.EXIT ; FIN DEL MODULO FUENTE
En esta solucin, se ha incorporado la ayuda del ensamblador para obtener los cdigosASCII de los smbolos, nicamente colocando al smbolo entre apstrofes.
Tambin, se ha utilizado de Directiva de Reubicacin (.ORG)
-
7/21/2019 Ejercicio - Instrucciones de Transferencia
7/17
SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 7
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
SEGUNDA SOLUCIN
La solucin utiliza direccionamiento indirecto, incrementos del puntero y etiquetas. Elpuntero que se utiliza es el puntero X, que est conformado por los Registros R26 yR27. Por lo que hace falta inicializar el puntero antes de utilizarlo.
LDI R16,NUMEROLDI R17,MAYUSCLDI R18,MINUSCLDI R26,LOW(BLOQUE)LDI R27,HIGH(BLOQUE)ST X,R16INC R26ST X,R17INC R26
ST X,R18INC R26ST X,R16INC R26ST X,R17INC R26ST X,R18INC R26ST X,R16INC R26ST X,R17
INC R26ST X,R18INC R26ST X,R16INC R26ST X,R17INC R26ST X,R18INC R26
Esta solucin para inicializar el Puntero X de 16 bits, utiliza dos instrucciones de carga
inmediata de 8 bits a los registro R26 y R27 (LDI); donde el operando de origen queutiliza direccionamiento inmediato es el resultado de las funciones LOW y HIGH, que
posee este ensamblador, para separar un nmero de 16 bits en dos bytes el menossignificativo con LOW y el ms significativo con HIGH.
-
7/21/2019 Ejercicio - Instrucciones de Transferencia
8/17
SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 8
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
TERCERA SOLUCIN
Esta solucin utiliza direccionamiento indirecto con post incremento, funciones yetiquetas
LDI R16,NUMEROLDI R17,MAYUSCLDI R18,MINUSCLDI R26,LOW(BLOQUE)LDI R27,HIGH(BLOQUE)ST X+,R16ST X+,R17ST X+,R18ST X+,R16ST X+,R17
ST X+,R18ST X+,R16ST X+,R17ST X+,R18ST X+,R16ST X+,R17ST X+,R18
La ventaja de esta solucin, radica en que el cdigo de mquina de todas lasinstrucciones que llenan las localidades de la SRAM, es el mismo.
; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES
; DE LA MEMORIA DE DATOS, CON LOS CDIGOS ASCII DEL NMERO 1; DE LA LETRA A MAYSCULA Y DE LA LETRA a MINSCULA,; ALTERNADAMENTE.; LA SOLUCIN UTILIZA DIRECCIONAMIENTO INDIRECTO CON; POST INCREMENTO, FUNCIONES Y ETIQUETAS;.DEVICE ATMEGA164P;.EQU NLOC = 12.EQU NUMERO = '1'.EQU MAYUSC = 'A'.EQU MINUSC = 'a';.DSEG
.ORG 0x100000100 BLOQUE: .BYTE NLOC;.CSEG
000000 e301 LDI R16,NUMERO000001 e411 LDI R17,MAYUSC000002 e621 LDI R18,MINUSC000003 e0a0 LDI R26,LOW(BLOQUE)000004 e0b1 LDI R27,HIGH(BLOQUE)000005 930d ST X+,R16000006 931d ST X+,R17000007 932d ST X+,R18000008 930d ST X+,R16000009 931d ST X+,R1700000a 932d ST X+,R18
00000b 930d ST X+,R1600000c 931d ST X+,R1700000d 932d ST X+,R18
Cdigos de Mquinaiguales
Cdigos de Mquinaiguales
Cdigos de Mquinaiguales
-
7/21/2019 Ejercicio - Instrucciones de Transferencia
9/17
SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 9
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
00000e 930d ST X+,R1600000f 931d ST X+,R17000010 932d ST X+,R18
;000011 cfff FIN: RJMP FIN
;.EXIT ; FIN DEL MODULO FUENTE
Por lo tanto, con este modo de direccionamiento se puede conseguir una solucineficiente mediante el uso de LAZOS DE REPETICIN
CUARTA SOLUCIN
Esta solucin utiliza direccionamiento indirecto con post incremento, expresiones confunciones, etiquetas y un lazo de repeticin controlado por el valor del puntero
LDI R16,NUMERO
LDI R17,MAYUSCLDI R18,MINUSCLDI R26,LOW(BLOQUE)LDI R27,HIGH(BLOQUE)
REPITA: ST X+,R16ST X+,R17ST X+,R18CPI R26,LOW(BLOQUE)+11BRNE REPITA
Resultado del ensamblado de este Mdulo Fuente:
; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES; DE LA MEMORIA DE DATOS, CON LOS CDIGOS ASCII DEL NMERO 1; DE LA LETRA A MAYSCULA Y DE LA LETRA a MINSCULA,; ALTERNADAMENTE.; LA SOLUCIN UTILIZA DIRECCIONAMIENTO INDIRECTO CON; POST INCREMENTO, EXPRESIONES CON FUNCIONES, ETIQUETAS Y; UN LAZO DE REPETICIN CONTROLADO POR EL VALOR DEL PUNTERO;.DEVICE ATMEGA164P;.EQU NLOC = 12.EQU NUMERO = '1'.EQU MAYUSC = 'A'
.EQU MINUSC = 'a';
.DSEG
.ORG 0x100000100 BLOQUE: .BYTE NLOC
;.CSEG
000000 e301 LDI R16,NUMERO000001 e411 LDI R17,MAYUSC000002 e621 LDI R18,MINUSC000003 e0a0 LDI R26,LOW(BLOQUE)000004 e0b1 LDI R27,HIGH(BLOQUE)000005 930d REPITA: ST X+,R16000006 931d ST X+,R17000007 932d ST X+,R18
000008 30ab CPI R26,LOW(BLOQUE)+11000009 f7d9 BRNE REPITA
;
Cdigos de Mquinaiguales
-
7/21/2019 Ejercicio - Instrucciones de Transferencia
10/17
SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 10
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
00000a cfff FIN: RJMP FIN;
Lamentablemente esta solucin no cumple con lo solicitado, Llenar doce localidades;porque, el programa sigue llenando ms localidades debido a una falla en el control dellazo de repeticin tal como se puede ver en la siguiente prueba de escritorio.
R16 R17 R18 R26 R27 Localidades de la SRAM Comparacin Salto0x31 0x41 0x61 0x00 0x01 (0x0100) = 0x31
0x01 0x01(0x0101) = 0x41
0x02 0x01(0x0102) = 0x61
0x03 0x01 0x030x0B Si(0x0103) = 0x31
0x04 0x01(0x0104) = 0x41
0x05 0x01
(0x0105) = 0x610x06 0x01 0x060x0B Si
(0x0106) = 0x310x07 0x01
(0x0107) = 0x410x08 0x01
(0x0108) = 0x610x09 0x01 0x090x0B Si
(0x0109) = 0x310x0A 0x01
(0x010A) = 0x410x0B 0x01
(0x010B) = 0x610x0C 0x01 0x0C0x0B Si
(0x010C) = 0x310x0D 0x01
(0x010D) = 0x410x0E 0x01
(0x010E) = 0x610x0F 0x01 0x0F0x0B Si
(0x010F) = 0x310x10 0x01
(0x0110) = 0x410x11 0x01
(0x0111) = 0x610x12 0x01 0x120x0B Si
La solucin es modificar la instruccin de comparacin por:
CPI R26,LOW(BLOQUE)+12
O, mejor:
CPI R26,LOW(BLOQUE)+NLOC
-
7/21/2019 Ejercicio - Instrucciones de Transferencia
11/17
SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 11
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
QUINTA SOLUCIN
Esta solucin utiliza direccionamiento indirecto con post incremento, expresiones confunciones, etiquetas y un lazo de repeticin controlado por un contador descendente.
LDI R16,NUMEROLDI R17,MAYUSCLDI R18,MINUSCLDI R19,NLOC/3LDI R26,LOW(BLOQUE)LDI R27,HIGH(BLOQUE)
REPITA: ST X+,R16ST X+,R17ST X+,R18DEC R19
BRNE REPITA
VARIACIN A LA QUINTA SOLUCIN
Esta variacin permite visualizar mejor el algoritmo, cuando al registro contador seetiqueta precisamente como CONTADOR, mediante la Directiva que Define un
Nombre Simblico para un Registro (.DEF)
; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES; DE LA MEMORIA DE DATOS, CON LOS CDIGOS ASCII DEL NMERO 1; DE LA LETRA A MAYSCULA Y DE LA LETRA a MINSCULA,; ALTERNADAMENTE.
; LA SOLUCIN UTILIZA DIRECCIONAMIENTO INDIRECTO CON; POST INCREMENTO, EXPRESIONES CON FUNCIONES, ETIQUETAS Y; UN LAZO DE REPETICIN CONTROLADO POR UN CONTADOR DESCENDENTE; EL REGISTRO CONTADOR ESTA ETIQUETADO PRECISAMENTE COMO "CONTADOR";.DEVICE ATMEGA164P;.EQU NLOC = 12.EQU NUMERO = '1'.EQU MAYUSC = 'A'.EQU MINUSC = 'a';.DEF CONTADOR = R19;
.DSEG.ORG 0x100BLOQUE: .BYTE NLOC;.CSEG
LDI R16,NUMEROLDI R17,MAYUSCLDI R18,MINUSCLDI CONTADOR,NLOC/3LDI R26,LOW(BLOQUE)LDI R27,HIGH(BLOQUE)
REPITA: ST X+,R16ST X+,R17ST X+,R18DEC CONTADOR
BRNE REPITA;FIN: RJMP FIN
-
7/21/2019 Ejercicio - Instrucciones de Transferencia
12/17
SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 12
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
;.EXIT ; FIN DEL MODULO FUENTE
La ventaja de elaborar lazos de repeticin bajo este esquema, es que se pueden observaren forma clara las tres partes que conforman el lazo de repeticin:
La inicializacin de los registros, del contador de repeticiones y del o de lospunteros, que intervienen en el lazo.
El cuerpo del lazo de repeticin, que realiza la tarea repetitiva, y La disminucin del contador y el correspondiente chequeo para determinar el
final de las repeticiones, mediante la instruccin de bifurcacin.
A continuacin se muestra el Mdulo Fuente en el que se ha unido la solucin a los dosproblemas que se resolvieron antes, en forma individual.
; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES; DE LA MEMORIA DE DATOS, CON LOS CDIGOS ASCII DEL NMERO 1
; DE LA LETRA A MAYSCULA Y DE LA LETRA a MINSCULA,; ALTERNADAMENTE.; TAMBIN, DEBE LLENAR QUINCE LOCALIDADES A PARTIR DE 200 HEXADECIMAL; DE LA MEMORIA DE DATOS, CON LOS CDIGOS ASCII DEL NMERO 0; DE LA LETRA Z MAYSCULA Y DE LA LETRA t MINSCULA,; ALTERNADAMENTE.; LA SOLUCIN UTILIZA DIRECCIONAMIENTO INDIRECTO CON; POST INCREMENTO, EXPRESIONES CON FUNCIONES, ETIQUETAS Y; DOS LAZOS DE REPETICIN CONTROLADO POR UN CONTADOR DESCENDENTE; EL REGISTRO CONTADOR ESTA ETIQUETADO PRECISAMENTE COMO "CONTADOR";.DEVICE ATMEGA164P;.EQU NLOC1 = 12.EQU NUMERO1 = '1'.EQU MAYUSC1 = 'A'.EQU MINUSC1 = 'a'.EQU NLOC2 = 15.EQU NUMERO2 = '0'.EQU MAYUSC2 = 'Z'.EQU MINUSC2 = 't';.DEF CONTADOR = R19;.DSEG.ORG 0x100BLQ1: .BYTE NLOC1.ORG 0x200BLQ2: .BYTE NLOC2
;.CSEG
LDI R16,NUMERO1LDI R17,MAYUSC1LDI R18,MINUSC1LDI CONTADOR,NLOC1/3LDI R26,LOW(BLQ1)LDI R27,HIGH(BLQ1)
LAZO1: ST X+,R16ST X+,R17ST X+,R18DEC CONTADORBRNE LAZO1
;LDI R16,NUMERO2LDI R17,MAYUSC2LDI R18,MINUSC2
-
7/21/2019 Ejercicio - Instrucciones de Transferencia
13/17
SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 13
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
LDI CONTADOR,NLOC2/3LDI R26,LOW(BLQ2)LDI R27,HIGH(BLQ2)
LAZO2: ST X+,R16ST X+,R17ST X+,R18DEC CONTADOR
BRNE LAZO2;FIN: RJMP FIN;.EXIT ; FIN DEL MODULO FUENTE
Esta ltima solucin al problema, permite al programador crear sus propiasMACROINSTRUCCIONES, que le faciliten an ms la elaboracin de los programas.
INCLUSIN DE MACROINSTRUCCIONES EN LA
QUINTA SOLUCINLa creacin de Macroinstrucciones consiste en agrupar un bloque de instrucciones queforman la nueva instruccin. La condicin que deben cumplir es que se diferenciennicamente en ciertos operandos como registros, localidades o valores entre lasinstrucciones de los diferentes bloques.
Para construir la nueva instruccin: Se empieza por la Directiva de Encabezado de lasMacroinstrucciones (:MACRO), donde se define el nombre que le corresponde a lanueva instruccin. A continuacin sigue el bloque de instrucciones, donde los elementosque cambian son reemplazados por @0, @1, @2 hasta @9 y que constituyen los
parmetros que se especifican cuando se invoca a la nueva instruccin, dentro delprograma. Se termina la construccin de la nueva instruccin con la Directiva deFinalizacin de las Macroinstrucciones (:ENDMACRO)
La invocacin de la nueva instruccin se realiza utilizando el nombre que se establecien la construccin, seguido de los parmetros separados por comas y en el orden que selos numer.
A continuacin esta ilustrado la creacin de la Macroinstruccin para inicializar losregistros que se utilizan en los lazos de repeticin de la solucin, a la que se le nombracomo INICIAR.
.LISTMAC
.MACRO INICIARLDI R16,@0LDI R17,@1LDI R18,@2LDI CONTADOR,@3/2LDI R26,LOW(@4)LDI R27,HIGH(@4)
.ENDMACRO
;.CSEG
-
7/21/2019 Ejercicio - Instrucciones de Transferencia
14/17
SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 14
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1LAZO1: ST X+,R16
ST X+,R17ST X+,R18DEC CONTADOR
BRNE LAZO1;INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2
LAZO2: ST X+,R16ST X+,R17ST X+,R18DEC CONTADORBRNE LAZO2
El uso de Macroinstrucciones no ahorra cdigo de mquina, como se puede ver en elresultado del ensamblado, que a continuacin se muestra:
.DEVICE ATMEGA164P;.EQU NLOC1 = 12.EQU NUMERO1 = '1'.EQU MAYUSC1 = 'A'.EQU MINUSC1 = 'a'.EQU NLOC2 = 15.EQU NUMERO2 = '0'.EQU MAYUSC2 = 'Z'.EQU MINUSC2 = 't';.DEF CONTADOR = R19;
.DSEG.ORG 0x100000100 BLQ1: .BYTE NLOC1
.ORG 0x200000200 BLQ2: .BYTE NLOC2
;.LISTMAC.MACRO INICIAR
LDI R16,@0LDI R17,@1LDI R18,@2LDI CONTADOR,@3/2LDI R26,LOW(@4)LDI R27,HIGH(@4)
.ENDMACRO
;.CSEG+
000000 e301 +LDI R16 , NUMERO1000001 e411 +LDI R17 , MAYUSC1000002 e621 +LDI R18 , MINUSC1000003 e036 +LDI CONTADOR , NLOC1 / 2000004 e0a0 +LDI R26 , LOW ( BLQ1 )000005 e0b1 +LDI R27 , HIGH ( BLQ1 )
INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1000006 930d LAZO1: ST X+,R16000007 931d ST X+,R17000008 932d ST X+,R18000009 953a DEC CONTADOR
00000a f7d9 BRNE LAZO1;+
Cdigos de Mquinaiguales
-
7/21/2019 Ejercicio - Instrucciones de Transferencia
15/17
SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 15
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
00000b e300 +LDI R16 , NUMERO200000c e51a +LDI R17 , MAYUSC200000d e724 +LDI R18 , MINUSC200000e e037 +LDI CONTADOR , NLOC2 / 200000f e0a0 +LDI R26 , LOW ( BLQ2 )000010 e0b2 +LDI R27 , HIGH ( BLQ2 )
INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2
000011 930d LAZO2: ST X+,R16000012 931d ST X+,R17000013 932d ST X+,R18000014 953a DEC CONTADOR000015 f7d9 BRNE LAZO2
;000016 cfff FIN: RJMP FIN
; ;
Analizando el listado anterior, se puede observar que las instrucciones de los lazos derepeticin tienen el mismo cdigo de mquina, lo que permite convertirles enSubrutinas, como lo que si indica a continuacin:
INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1CALL LAZOINICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2CALL LAZO
INCLUSIN DE MACROINSTRUCCIONES YSUBRUTINAS EN LA QUINTA SOLUCIN
Cuando se utilizan Subrutinas es necesario inicializar el Puntero del Stack (SP) quegeneralmente se lo ubica al final de la SRAM. Adems se ha eliminado la directiva quelista completamente las macroinstrucciones.
.DEVICE ATMEGA164P;.EQU NLOC1 = 12.EQU NUMERO1 = '1'.EQU MAYUSC1 = 'A'.EQU MINUSC1 = 'a'.EQU NLOC2 = 15.EQU NUMERO2 = '0'.EQU MAYUSC2 = 'Z'.EQU MINUSC2 = 't';.DEF CONTADOR = R19;.DSEG.ORG 0x100
000100 BLQ1: .BYTE NLOC1.ORG 0x200
000200 BLQ2: .BYTE NLOC2;;.LISTMAC.MACRO INICIAR
LDI R16,@0LDI R17,@1LDI R18,@2LDI CONTADOR,@3/2LDI R26,LOW(@4)
LDI R27,HIGH(@4).ENDMACRO;
Cdigos de Mquinaiguales
-
7/21/2019 Ejercicio - Instrucciones de Transferencia
16/17
SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 16
Ing. Jaime E. Velarde Departamento de Electrnica, Telecomunicaciones y Redes de Informacin
.CSEG000000 ef0f LDI R16,LOW(0x04FF)000001 9300 005e STS $5E,R16000003 e004 LDI R16,HIGH(0x04FF)000004 9300 005d STS $5D,R16
;000006 e301
000007 e411000008 e621000009 e03600000a e0a000000b e0b1 INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ100000c 940e 0017 CALL LAZO
;00000e e30000000f e51a000010 e724000011 e037000012 e0a0000013 e0b2 INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2000014 940e 0017 CALL LAZO
;
000016 cfff FIN: RJMP FIN;
000017 930d LAZO: ST X+,R16000018 931d ST X+,R17000019 932d ST X+,R1800001a 953a DEC CONTADOR00001b f7d9 BRNE LAZO00001c 9508 RET
;
INCLUSIN DEL ARCHIVO DE DEFINICIONESPROPORCIONADO POR EL FABRICANTE
El fabricante proporciona el archivo m164pdef.inc, para facilitar la elaboracin de losprogramas; a fin de, reemplazar los valores numricos de las direcciones de memoriapor las Etiquetas que se utilizan en las hojas de datos. En el siguiente listado se hareemplazado la definicin del dispositivo (.DEVICE ATMEGA164P) por la inclusindel archivo de definiciones y se han utilizado las directivas .NOLIST y .LIST para queen el archivo de resultado del ensamblado no se listen las lneas que contiene el archivode definiciones.
.NOLIST
.INCLUDE "m164pdef.inc"
.LIST;
.EQU NLOC1 = 12
.EQU NUMERO1 = '1'
.EQU MAYUSC1 = 'A'
.EQU MINUSC1 = 'a'
.EQU NLOC2 = 15
.EQU NUMERO2 = '0'
.EQU MAYUSC2 = 'Z'
.EQU MINUSC2 = 't';.DEF CONTADOR = R19;.DSEG.ORG 0x100
BLQ1: .BYTE NLOC1.ORG 0x200BLQ2: .BYTE NLOC2
Inicializacin delStack Pointer
-
7/21/2019 Ejercicio - Instrucciones de Transferencia
17/17
SISTEMAS MICROPROCESADOS Ejercicio para llenar localidades de la SRAMPag. 17
Ing Jaime E Velarde Departamento de Electrnica Telecomunicaciones y Redes de Informacin
;;.LISTMAC.MACRO INICIAR
LDI R16,@0LDI R17,@1LDI R18,@2LDI CONTADOR,@3/2
LDI R26,LOW(@4)LDI R27,HIGH(@4).ENDMACRO;.CSEG
LDI R16,LOW(RAMEND)OUT SPH,R16LDI R16,HIGH(RAMEND)OUT SPL,R16
;INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1CALL LAZO
;INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2CALL LAZO
;FIN: RJMP FIN;LAZO: ST X+,R16
ST X+,R17ST X+,R18DEC CONTADORBRNE LAZORET
;.EXIT ; FIN DEL MODULO FUENTE
La utilizacin de este archivo de definiciones permite escoger rpidamente elmicrocontrolador con el cual se va ha trabajar, grabado el cdigo de mquina queresulta del proceso de ensamblado. As por ejemplo, el ltimo programa en una ocasinse desea utilizarlo con el ATmega164P y en otra con el ATmega16; una de lasdiferencias entre estos microcontroladores es la direccin final de la SRAM. en el
primer caso esta direccin es 0x04FF y en el segundo caso es 0x045F. nicamentecambiando el archivo de definiciones m164pdef.inc por m16def.inc y sin modificarninguna otra lnea, se obtiene para cada caso los cdigos de mquina correspondientes.
Para el ATmega164P
:020000020000FC:100000000FEF0EBF04E00DBF01E311E421E636E07F
:10001000A0E0B1E00E94150000E31AE524E737E014:10002000A0E0B2E00E941500FFCF0D931D932D9329:060030003A95D9F708958E:00000001FF
Para el ATmega16
:020000020000FC:100000000FE50EBF04E00DBF01E311E421E636E089:10001000A0E0B1E00E94150000E31AE524E737E014:10002000A0E0B2E00E941500FFCF0D931D932D9329:060030003A95D9F708958E:00000001FF
Etiquetas que seencuentran en el archivo
de definiciones
Cdigos de Mquinadiferentes, por el cambio de
microcontrolador