Intercambio de nibbles entre registros.

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
curro
Me voy lanzando
Me voy lanzando
Mensajes: 32
Registrado: Mar 23 Abr , 2019 7:35 pm

Intercambio de nibbles entre registros.

Mensajepor curro » Sab 26 Feb , 2022 7:07 pm

Hola, una duda a partir de un pequeño experimento que estuve haciendo: Tengo los registros a y b que quiero usar para pintar en pantalla, pero antes necesito intercambiar el nibble bajo de a con el mayor de b. El código que hice fue el de más abajo (es un fragmento que va a su vez en bucle) y funciona, pero quisiera preguntar si hay alguna otra forma más eficiente de intercambiar nibbles o si consideráis que he hecho alguna barbaridad. Gracias.

Código: Seleccionar todo

; Intercambio el nibble menor de a con el mayor de b
ld d,a ; guardo a en d
ld c,a ; también en c pues a y d van a ser modificados
ld e,b ; guardo b en e
srl b
srl b
srl b
srl b
and &f0
or b
ld (&c000),a ; pinto los 4 primeros pixels

ld a,e
sla d
sla d
sla d
sla d
and &0f
or d
ld (&c001),a ; pinto los 4 siguientes

Avatar de Usuario
MoteroV4
Forero habitual
Forero habitual
Mensajes: 106
Registrado: Jue 02 May , 2019 9:26 pm

Re: Intercambio de nibbles entre registros.

Mensajepor MoteroV4 » Sab 26 Feb , 2022 7:48 pm

Hola, una duda a partir de un pequeño experimento que estuve haciendo: Tengo los registros a y b que quiero usar para pintar en pantalla, pero antes necesito intercambiar el nibble bajo de a con el mayor de b. El código que hice fue el de más abajo (es un fragmento que va a su vez en bucle) y funciona, pero quisiera preguntar si hay alguna otra forma más eficiente de intercambiar nibbles o si consideráis que he hecho alguna barbaridad. Gracias.
Existe la instrucción RRD que realiza una rotación decimal a la derecha. Intercambia nibbles, el bajo de A al alto de (HL), el alto (HL) al bajo, y el bajo (HL) al bajo de A.
Otra sería RLD o rotación decimal a la izquierda.

Quizás te sirvan.

Urusergi
Forum Addict
Forum Addict
Mensajes: 381
Registrado: Sab 25 Feb , 2006 5:45 pm

Re: Intercambio de nibbles entre registros.

Mensajepor Urusergi » Sab 26 Feb , 2022 8:06 pm

Más o menos algo como esto:

Código: Seleccionar todo

ld hl,&6100
ld (hl),b
rld
ld (&c000),a
ld a,(hl)
rrca
rrca
rrca
rrca
ld (&c001),a

ret

curro
Me voy lanzando
Me voy lanzando
Mensajes: 32
Registrado: Mar 23 Abr , 2019 7:35 pm

Re: Intercambio de nibbles entre registros.

Mensajepor curro » Sab 26 Feb , 2022 9:09 pm

¡Claro! No entendía bien como funcionaban. Voy a probarlo. Gracias a los dos. =D>


¿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