Programación en lenguaje esamblador
Enviado por Sergio Daniel Garcia Rojas • 28 de Octubre de 2015 • Práctica o problema • 2.444 Palabras (10 Páginas) • 218 Visitas
1
Taller 1: Simulaci´on
Asignatura: Estructuras Computacionales
Docente: Jaime Le´on Hincapie
Monitor: Yohan Ricardo C´espedes Villar
Universidad Nacional de Colombia - Sede Manizales
Departamento de Ingenier´ia El´ectrica, Electr´onica y Computaci´on.
Abstract— En este documento se presenta una de
las muchas soluciones posibles para cada problema
planteado. Los c´odigos deben ser usados en un software
de simulaci´on compatible con los microcontroladores
Atmel de la serie 80C5X, bien sea Pinnacle o MCU.
El software de Simulaci´on se encuentra en el siguiente link:
http://xurl.es/m1ec7
I. EJERCICIO 1
Hallar el complemento del n´umero que se encuentre en la
posici´on de memoria 25H. El resultado se debe almacenar en
la posici´on de memoria 26H.
inicio:
mov a,25h
cpl a
mov 26h,a
sjmp inicio
end
II. EJERCICIO 2
Dividir en 2 nibbles el n´umero que se encuentre en la
posici´on de memoria 25H e intercambiarlos, es decir, el nibble
m´as significativo debe quedar en el menos significativo y
viceversa.
inicio:
mov a,25h
swap a
mov 26h,a
sjmp inicio
end
III. EJERCICIO 3
Dividir en 2 nibbles e intercambiar los menos significativos
de las posiciones de memoria 25H y 26H. Guardar los
resultados en 27H y 28H.
Ej: 25H = #15H y 26H = #36H
entonces 27H = #16H y 28H = #35H.
mov 25h,#15h
mov 26h,#36h
inicio:
mov a,25h
mov r0,#26h
xchd a,@r0
mov 27h,a
mov 28h,26h
sjmp inicio
end
IV. EJERCICIO 4
Intercambiar los 2 bits m´as significativos con los 2 bits
menos significativos del contenido que est´a en la posici´on
de memoria 25H y guardar el resultado en la posici´on de
memoria 26H.
Ej: 25H = #5BH = 01011011B
entonces 26H = #D9H = 11011001B.
inicio:
;guardo en registros cada par de bits
mov r0,25h
mov a,#03h
anl a,r0
mov r1,a
mov a,#0c0h
anl a,r0
mov r2,a
mov a,r0
subb a,r2
subb a,r1
;desplazo los bits a sus nuevas posiciones
mov r4,a
mov a,r2
rl a
rl a
mov r2,a
mov a,r1
rr a
rr a
mov r1,a
;se genera el resultado final por medio de la suma
mov a,r4
add a,r1
add a,r2
mov 26h,a
sjmp inicio
end
V. EJERCICIO 5
Sumar el n´umero que se encuentra en la posici´on de
memoria 25H con el que est´a en la posici´on de memoria 26H.
2
El resultado se debe almacenar en la posici´on 27H.
mov 25h,#04h
mov 26h,#07h
inicio:
mov a,25h
add a,26h
mov 27h,a
sjmp inicio
end
VI. EJERCICIO 6
Restar el n´umero que se encuentra en la posici´on de
memoria 25H con el que est´a en la posici´on de memoria 26H.
El resultado se debe almacenar en la posici´on 27H.
mov 25h,#07h
mov 26h,#02h
inicio:
mov a,25h
subb a,26h
mov 27h,a
sjmp inicio
end
VII. EJERCICIO 7
Correr el contenido de la posici´on de memoria 25H un bit
a la izquierda y almacenar el resultado en 26H, el bit a la
derecha debe ser cero.
inicio:
mov a,25h
rl a
clr acc.0
sjmp inicio
end
VIII. EJERCICIO 8
Tomar el dato de la posici´on de memoria 25H, si el n´umero
de unos que contiene es par, sumarle 5, si es impar sumarle
3. Almacenar el resultado en la posici´on de memoria 26H, si
hay acarreo (carry) entonces 26H debe quedar en cero.
inicio:
mov a,25h
jb p,impar
add a,#05h
jc limpiar
mov 26h,a
sjmp inicio
impar:
add a,#03h
jc limpiar
mov 26h,a
sjmp inicio
limpiar:
mov 26h,#00h
sjmp inicio
end
IX. EJERCICIO 9
Multiplicar el contenido de las posiciones de memoria 25H
y 26H, el resultado debe quedar almacenado en las posiciones
de memoria 27H y 28H.
mov 25h,#17h
mov 26h,#02h
inicio:
mov a,25h
mov b,26h
mul ab
mov 27h,a
mov 28h,27h
sjmp inicio
end
X. EJERCICIO 10
Dividir el contenido de la posici´on de memoria 25H con lo
que hay en la posici´on de memoria 26H y guardar el cociente
en 27H y el residuo en 28H. Si el valor que hay en la posici´on
26H es cero, entonces 27H = #0FFH.
inicio:
mov a,26h
cjne a,#00h,dividir
mov 27h,#0ffh
sjmp inicio
dividir:
mov a,25h
mov b,26h
div ab
mov 27h,a
mov 28h,b
sjmp inicio
end
XI. EJERCICIO 11
Compara dos n´umeros a y b que est´an en 25H y 26H
respectivamente, y establecer lo siguiente:
Si a > b entonces 27H = #0FFH y 28H = #00H
Si a = b entonces 27H = #00H y 28H = #00H
Si a < b entonces 27H = #00H y 28H = #0FFH
mov 25h,#03h
mov 26h,#03h
inicio:
mov a,25h
mov b,26h
cjne a,b,dif ;si a<b, hay carry
mov 27h,#00h ;a=b
mov 28h,#00h
sjmp inicio
dif:
jc menor
mov 27h,#0ffh ;a>b no carry
3
mov 28h,#00h
sjmp inicio
menor:
mov 27h,#00h ;a<b hay carry
mov 28h,#0ffh
sjmp inicio
end
XII. EJERCICIO 12
Comparar bit a bit los contenidos de las posiciones de
memoria 25H y 26H y establecer el n´umero de bits en
los cuales son diferentes, guardar el dato en la posici´on de
memoria 27H y a partir de la posici´on de memoria 28H
guardar las posiciones de los bits diferentes (la posicion 0
corresponde al bit menos significativo). Ej:
25H = #00H = 00000000B, 26H = #05H = 00000101B
entonces 27H = #02H (2 bits diferentes)
por lo tanto 28H = #00H y 29H = #02H (los que estan
en las posiciones 0 y 2).
inicio:
mov a,25h
mov b,26h
xrl a,b
conteo:
rlc a
jc cont
djnz r1,conteo
mov 27h,r3
sjmp salir
cont:
mov r2,a ;guardo temporalmente el
...