Ensamblando problemas (ejercicios de programación)

Programando el Amstrad en Ensamblador.
Reglas del Foro
Debido a que hay varios temas pidiendo ayuda para programar en ensamblador máquinas distintas al Amstrad CPC, con micro distinto al Z80 y que incluso dependen del sistema operativo, nos vemos en la necesidad de poner por escrito que estos posts son bienvenidos pero que no es el lugar adecuado ya que por estos lares nos dedicamos más al ensamblador del Z80, un microprocesador de 8 bits que tuvo su gran auge en ordenadores y consolas de los años 80.

De todas formas, esto no quita que alguien que sepa del asunto pueda postear alguna respuesta pero es más fácil encontrar foros dedicados a programar en ensamblador en Windows o MS-DOS que ayudarán más que nosotros:
http://www.lawebdelprogramador.com/news ... nsamblador
Avatar de Usuario
litos.net
Loading, Please Wait...
Loading, Please Wait...
Mensajes: 5961
Registrado: Mié 05 Oct , 2005 7:57 pm
Ubicación: Madrid
Contactar:

Ensamblando problemas (ejercicios de programación)

Mensajepor litos.net » Mar 06 Jun , 2006 10:56 am

(Editado por Artaburu)

Se abre este hilo a sugerencia de un forero interesado en aprender ensamblador. Iremos proponiendo ejercicios a realizar. Podéis postear las soluciones y las vamos viendo y comentando entre todos.
El nivel de los ejercicios irá subiendo poco a poco y espero que así nos beneficiemos todos, aprendiendo y aportando.

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

RE: Ensamblando problemas (ejercicios de programación)

Mensajepor Artaburu » Mié 07 Jun , 2006 10:35 am

Busquemos soluciones para los siguientes casos:

Sumar 2 números de 8 bits, sumar dos números de 16.
Restar 2 números de 8 bits, Restar 2 números de 16 bits.
(de números que están en memoria)

En los números de 8 bits usando registros de 8 bits y en los de 16 haciéndolo mediante registros de 8 y de 16 bits. Con lo cual habrá 2 soluciones para los de 16 bits.


Condiciones:
Inicio del programa &4000

valor 1 8 bits &4100
valor 2 8 bits &4101
resultado suma se guardará en &4102
resultado resta se guardará en &4103


valor 1 16 bits &4104
valor 2 16 bits &4106

resultado suma1 se guardará en &4108
resultado suma2 se guardará en &410A
resultado resta1 se guardará en &410C
resultado resta2 se guardará en &410E
Salu2,
Arta

Avatar de Usuario
Mode 2
I am The Forum
I am The Forum
Mensajes: 2068
Registrado: Lun 10 Oct , 2005 8:01 pm
Ubicación: Sevilla, años 80.
Contactar:

Preguntas sobre ejercicios

Mensajepor Mode 2 » Mié 07 Jun , 2006 10:55 am

Arta, en cuanto a los nºs a sumar y restar:

¿Se meten directamente en las posiciones de memorias especificadas o se leen por teclado?
¿Es indiferente su valor imagino?

¿Se guarda solamente o se saca por pantalla el resultado?

Gracias, genio!

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

RE: Preguntas sobre ejercicios

Mensajepor Artaburu » Mié 07 Jun , 2006 11:01 am

Por ahora sin entradas y salidas, eso para más adelante. Los valores que querais luego ya veremos si funciona. ;)
Salu2,
Arta

Avatar de Usuario
Mode 2
I am The Forum
I am The Forum
Mensajes: 2068
Registrado: Lun 10 Oct , 2005 8:01 pm
Ubicación: Sevilla, años 80.
Contactar:

La primera parte del ejercicio

Mensajepor Mode 2 » Mié 07 Jun , 2006 12:58 pm

;Suma y resta de 8 bits

org &4000

ld a,30
ld (&4100),a
ld a,20
ld (&4101),a

ld a,(&4100)
ld b,a
ld a,(&4101)
add b
ld (&4102),a

ld a,(&4101)
ld b,a
ld a,(&4100)
sub b
ld (&4103),a

ret

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Mensajepor Artaburu » Mié 07 Jun , 2006 1:12 pm

Ok, eso suma y resta dos números de 8 bits. ¿alguna opción más? Por ejemplo, usando HL se puede hacer más rápida (usando menos ciclos). Esto puede evitar, además, usar el registro B.
Salu2,
Arta

Avatar de Usuario
Mode 2
I am The Forum
I am The Forum
Mensajes: 2068
Registrado: Lun 10 Oct , 2005 8:01 pm
Ubicación: Sevilla, años 80.
Contactar:

Mensajepor Mode 2 » Mié 07 Jun , 2006 1:43 pm

Hombre, yo sé que se puede poner algo más claro como en el ejemplo de abajo. Pero lo de no usar B y usar los registros H y L, no sé a que te refieres a no se que con H y L consumas menos ciclos.


;Suma y resta de 8 bits

suma equ &4102
resta equ &4103
numero1 equ &4100
numero2 equ &4101

org &4000

ld a,30
ld (numero1),a
ld a,20
ld (numero2),a

ld a,(numero1)
ld b,a
ld a,(numero2)
add b
ld (suma),a

ld a,(numero2)
ld b,a
ld a,(numero1)
sub b
ld (resta),a

ret

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Mensajepor Artaburu » Mié 07 Jun , 2006 2:51 pm

Me refiero a apuntar a los números con HL, y escribir y leer contra HL, se ahorran ciclos.
Por ejemplo, LD HL,numero1
Salu2,
Arta

Avatar de Usuario
Mode 2
I am The Forum
I am The Forum
Mensajes: 2068
Registrado: Lun 10 Oct , 2005 8:01 pm
Ubicación: Sevilla, años 80.
Contactar:

Mensajepor Mode 2 » Mié 07 Jun , 2006 3:12 pm

Me refiero a apuntar a los números con HL, y escribir y leer contra HL, se ahorran ciclos.
Por ejemplo, LD HL,numero1
Ah!! Bien que con HL no hace falta cargar el número en A y luego traspasarlo a B sino que se hace del tirón:

ld hl,numero1 en vez de

ld a,numero1
ld b,a


Pero HL es la unión de H y L, sería para números de 16 bits, ¿no?

Es igual:

ld h,&33
ld l,&22

que:

ld hl,&3322

Gracias Arta!!

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Mensajepor Artaburu » Mié 07 Jun , 2006 4:05 pm

Yo me refiero a usar HL como "apuntador" a los números de 8 bits.
Mira:
LD HL,&4100
Puedo ir guardando los valores con LD (HL),30 ...
y hasta aquí puedo leer. ;)
Salu2,
Arta

Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 6969
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Mensajepor MiguelSky » Jue 08 Jun , 2006 9:11 am

Jodo, no tengo tiempo ni de postear... Originalmente me han salido las sumas como a Nemesis_v2.0, aunque obviando la carga de los números a sumar, que los presupongo ya en memoria.

Lo del HL viene en el Capítulo 3 del Tuto ;)


org &4000

;en 8 bits
;suma
LD HL,&4100
LD A,(HL)
INC HL
ADD (HL)
INC HL
LD (HL),A

;resta
LD HL,&4100
LD A,(HL)
INC HL
SUB (HL)
INC HL
INC HL
LD (HL),A

RET

A ver si luego puedo meterme con las de 16 bits con el HL...

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Mensajepor Artaburu » Jue 08 Jun , 2006 9:32 am

Bien, esta solución es más rápida quela primera, pero también menos evidente.
En la resta hay algo "raro", MiguelSky. Creo que te sobra un INC HL.
Salu2,
Arta

Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 6969
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Mensajepor MiguelSky » Jue 08 Jun , 2006 10:08 am

Anda !! Arta no había visto tu penúltimo post, dejé la respuesta a medias para irme a currar... Te refieres a los 2 INC HL seguidos? Son para guardar la resta en su posición &4103... Me voy a la piltra....

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Mensajepor Artaburu » Jue 08 Jun , 2006 10:39 am

Cierto, olvida lo que he puesto. Que descanses a gusto :D
Salu2,
Arta

Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 6969
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Mensajepor MiguelSky » Jue 08 Jun , 2006 5:06 pm

Ya he descansado ;)


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro


La Comunidad Española
ESP Soft, juegos para tu CPC Foro de Amstrad CPC Todos los juegos para CPC en un CD Web dedicada al Amstrad CPC (utilidades) Información útil para el CPC (talleres) Selección de juegos de Amstrad CPC Mundo CPC Pree Play then any Key CPC Basic