1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
;------------------------------------------------------
; FICHERO: Curso De Apaños .Ejercicio 2B asm
; Multiplicar en HEXADECIMAL FB x 0E
; El resultado debe quedar en RAM a partir de la dirección 0x110
;------------------------------------------------------
; Declaraciones estandar para este micro AT90S8515:
.include "8515def.inc"
;--------------------------------------------------------------
; Definicion de constantes y variables
; Pensamiento de Forma Global
;--------------------------------------------------------
; Pila
.equ PILA =0x0FF
;-----------------------------------------------------
.DSEG
; MEMORIA RAM
.ORG (PILA+1)
;----------------------------------------------------
; Vectores de interrupcion
;----------------------------------------------------
.CSEG
.ORG 0x0000
rjmp RESET ; RESET
; --------------------------------------------------------
; RUTINA DE RESET
; --------------------------------------------------------
RESET: cli
ldi r16,HIGH ( PILA )
out SPH,r16
ldi r16,LOW (PILA )
out SPL,r16
;*******DESDE AQUÍ VUESTRO CODIGO*****
ldi r29,0xFB ;registro 1=FB
ldi r28,0x00 ;registro 0=00
ldi r27,0x0E ;registro 2=0E
ldi r26,0xFB ;registro 3= registro 1=FB
ldi r25,0x00 ;registro 0=00
clr r29 ;Limpio el registro y lo pongo a 00
add r29,r26 ;Le Sumo FB a 00
dec r27 ;Decremento 0E 1 vez
adc r28,r28 ;aqui Sumo Fb + 00 de momento no tengo accareo
;pero mas adelante si lo tengo asi que lo guardo aqui
cpi r27,0x00 ;Comparo 0D con 00 ya que e
;decrementado 0E anteriormente (0E -1=0D)
brne Sumo ;Como 0D no es igual 00 Salto y Sumo
Sumo:
subi r27,$01 ;registro 2 = registro 2-1
adc r29,r26 ;registro 1 = registro 1 + registro 3
adc r28,r25 ;Accareo
cpi r27,0x00 ;si registro 2 es distinto de cero
;sigo en el bucle, sino me salgo
brne Sumo
Arriba:
;ya que tenemos como resultado 0DBA
sts 0x110,r28 ;aqui coloco 0D que es el MSB del World
;en la direcion 110 de la Ram
sts 0x111,r29 ;aqui coloco BA que es el LSB del World
;en la direcion 111 de la Ram
rjmp stop
;****HASTA AQUÍ VUESTRO CODIGO********
STOP: rjmp STOP ;FIN DEL PROGRAMA |
Partager