Fecha actual Mar May 21, 2013 3:20 am


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
  • Autor
  • Mensaje
Desconectado
Avatar de Usuario

litos.net

Loading, Please Wait...

Loading, Please Wait...

  • Mensajes: 4755
  • Registrado: Mié Oct 05, 2005 6:57 pm
  • Ubicación: Madrid

Ensamblando problemas (ejercicios de programación)

NotaMar Jun 06, 2006 9: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.
Desconectado
Avatar de Usuario

Artaburu

Trasteador

Trasteador

  • Mensajes: 5264
  • Registrado: Vie Oct 07, 2005 5:18 pm
  • Ubicación: En un país tropical.

RE: Ensamblando problemas (ejercicios de programación)

NotaMié Jun 07, 2006 9: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
Desconectado
Avatar de Usuario

Mode 2

Master of The Forum

Master of The Forum

  • Mensajes: 1449
  • Registrado: Lun Oct 10, 2005 7:01 pm
  • Ubicación: Sevilla, años 80.

Preguntas sobre ejercicios

NotaMié Jun 07, 2006 9: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!
Desconectado
Avatar de Usuario

Artaburu

Trasteador

Trasteador

  • Mensajes: 5264
  • Registrado: Vie Oct 07, 2005 5:18 pm
  • Ubicación: En un país tropical.

RE: Preguntas sobre ejercicios

NotaMié Jun 07, 2006 10:01 am

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

Mode 2

Master of The Forum

Master of The Forum

  • Mensajes: 1449
  • Registrado: Lun Oct 10, 2005 7:01 pm
  • Ubicación: Sevilla, años 80.

La primera parte del ejercicio

NotaMié Jun 07, 2006 11:58 am

;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
Desconectado
Avatar de Usuario

Artaburu

Trasteador

Trasteador

  • Mensajes: 5264
  • Registrado: Vie Oct 07, 2005 5:18 pm
  • Ubicación: En un país tropical.

NotaMié Jun 07, 2006 12: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
Desconectado
Avatar de Usuario

Mode 2

Master of The Forum

Master of The Forum

  • Mensajes: 1449
  • Registrado: Lun Oct 10, 2005 7:01 pm
  • Ubicación: Sevilla, años 80.

NotaMié Jun 07, 2006 12: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
Desconectado
Avatar de Usuario

Artaburu

Trasteador

Trasteador

  • Mensajes: 5264
  • Registrado: Vie Oct 07, 2005 5:18 pm
  • Ubicación: En un país tropical.

NotaMié Jun 07, 2006 1: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
Desconectado
Avatar de Usuario

Mode 2

Master of The Forum

Master of The Forum

  • Mensajes: 1449
  • Registrado: Lun Oct 10, 2005 7:01 pm
  • Ubicación: Sevilla, años 80.

NotaMié Jun 07, 2006 2:12 pm

Artaburu escribió: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!!
Desconectado
Avatar de Usuario

Artaburu

Trasteador

Trasteador

  • Mensajes: 5264
  • Registrado: Vie Oct 07, 2005 5:18 pm
  • Ubicación: En un país tropical.

NotaMié Jun 07, 2006 3: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
Desconectado
Avatar de Usuario

MiguelSky

Siempre vigilo

Siempre vigilo

  • Mensajes: 4345
  • Registrado: Sab Oct 08, 2005 1:02 am

NotaJue Jun 08, 2006 8: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...
Imagen
Desconectado
Avatar de Usuario

Artaburu

Trasteador

Trasteador

  • Mensajes: 5264
  • Registrado: Vie Oct 07, 2005 5:18 pm
  • Ubicación: En un país tropical.

NotaJue Jun 08, 2006 8: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
Desconectado
Avatar de Usuario

MiguelSky

Siempre vigilo

Siempre vigilo

  • Mensajes: 4345
  • Registrado: Sab Oct 08, 2005 1:02 am

NotaJue Jun 08, 2006 9: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....
Imagen
Desconectado
Avatar de Usuario

Artaburu

Trasteador

Trasteador

  • Mensajes: 5264
  • Registrado: Vie Oct 07, 2005 5:18 pm
  • Ubicación: En un país tropical.

NotaJue Jun 08, 2006 9:39 am

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

MiguelSky

Siempre vigilo

Siempre vigilo

  • Mensajes: 4345
  • Registrado: Sab Oct 08, 2005 1:02 am

NotaJue Jun 08, 2006 4:06 pm

Ya he descansado ;)
Imagen
Siguiente

¿Quién está conectado?

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


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

cron