Problemas resueltos curso 18/19
por Ruiz de Clavijo, Paulino
—
Última modificación
30/05/2019 10:49
## Rellenar la memoria con datos .include"m328pdef.inc" .EQU N=16 LDI XH,0X01 LDI XL,0X00 ; X = 0X0100 LDI R16,1 Bucle: ST X+, R16 INC R16 CPI R16 , N+1 BRNE Bucle ## Problema 7a traslada: PUSH R17 ; Hay que guardar los registros PUSH R18 ; que se usen en la subrutina CLR R17 Bucle_traslada: INC R17 LD R18,X+ ; R18=RAM[X++]; (equivalente en JAVA/C) ST Y+, R18 ; RAM[Y++]=R18; (equivalente en JAVA/C) CP R17,R16 BREQ fin_traslada JMP Bucle_traslada fin_traslada: POP R18 ; Recupera los registros guardados POP R17 ; antes de volver de la subrutina ret ## Problema 7b LDI XH, 0X01 LDI XL, 0x00 LDI YH, 0X02 LDI YL, 0x00 LDI R16, 16 CALL Traslada ## Problema 8 ldi xh,0x01 ldi xl,0x00 ld r0, x ldi r16,0 bucle: ; for (r16=0;r16!=16;r16++) cpi r16,16 breq fin ld r17,x+ cp r0,r17 brlo sigue ; Comprueba si el número es menor mov r0, r17 sigue: inc r16 jmp bucle ## Problema 10 .include"m328pdef.inc" LDI XH, 0x01 LDI XL, 0x00 LDI R16, 2 Bucle: ST X+, R16 INC R16 INC R16 CPI R16, 254 BREQ Fin JMP Bucle Fin: ST X+, R16 ; Faltaba una iteración del bucle BREAK ## Problema 11 LDI XH, 0x01 LDI XL, 0x00 LDI R16, 0 CLR R0 CLR R1 Bucle: ld r17,x+ SBRS R17,7 ; Comprueba si el bit 7 es 0 INC R0 ; Es positivo SBRC R17,7 ; Comprueba si el bit 7 es 1 INC R1 ; Es negativo inc r16 cpi r16,100 BREQ Fin JMP Bucle Fin: BREAK ## Problema 12 ; Este es un poco complicado de entender LDI XH, 0x01 LDI XL, 0x00 LDI YH, 0x01 LDI YL, 0x10 ; Apunta al siguiente tras el último LDI R16, 0 Bucle: ld R0,x ld R1,-y st x+,r1 st y,r0 inc r16 cpi r16,8 brne bucle ; Salta si R16 != 8 BREAK ## Problema 18 .include"m328pdef.inc" ldi r16,0b01000001 call subrutina_bcd break subrutina_bcd: push r17 push r18 mov r17,r16 mov r18,r16 andi r17,0b00001111 andi r18,0b11110000 swap r18 cpi r17,10 ; R17 < 10 brlo ok ser r0 jmp fin_subrutina ok: cpi r18,10 ; R17 < 10 brlo ok2 ser r0 jmp fin_subrutina ok2: clr r0 fin_subrutina: pop r18 pop r17