Ensamblador para dummies.
(#2)
(C) Mikhail Spitsin 1995
________________________________
Banderas
El registro "F" del procesador se llama registro de banderas. ¿Qué es esto?
Una bandera es una variable que puede tener dos estados: establecida (igual a uno) y reiniciada (igual a cero). Por lo tanto, el registro "F" se puede considerar como un conjunto de ocho bits de bandera. Solo podemos usar cuatro de ellos: bandera de cero, bandera de acarreo, bandera de signo y bandera de paridad-desbordamiento.
Operaciones aritméticas.
La aritmética es una ciencia muy y muy útil, constantemente estamos calculando algo: sumando, restando, dividiendo, multiplicando. Hablaremos de cómo hacer esto en ensamblador.
Comenzaremos con lo más simple, sumaremos uno a algo, por ejemplo al registro "A":
********************************
LD A,NUBER
INC A
RET
********************************
Como pueden ver, es muy simple, para esto existe el comando "INC" - incremento (aumento en uno), después de él va el operando, es decir, algún registro o par de registros:
********************************
INC A INC HL
INC H INC DE
INC E INC IY
INC E INC (HL)
INC (IX+N) INC (IY+N)
********************************
Si necesitas aumentar en uno alguna celda de memoria, debes proceder así:
********************************
LD HL,ADDRES LD IX,ADDRES
INC (HL) INC (IX+0)
RET RET
********************************
La primera opción funciona más rápido y es conveniente si se trabaja con una sola celda de memoria, pero si trabajas en una tabla, no es económico y no es bonito. Comparen: necesitamos aumentar en uno el primer, quinto y décimo byte en la tabla:
********************************
LD HL,TABL+1 LD IX,TABL
INC (HL) INC (IX+1)
LD HL,TABL+5 INC (IX+5)
INC (HL) INC (IX+10)
LD HL,TABL+10 RET
INC (HL)
RET
********************************
Todo lo que se ha dicho anteriormente sobre aumentar en uno también es válido para el decremento, es decir, para disminuir en uno:
********************************
DEC A DEC HL
DEC L DEC IX
DEC H DEC DE
DEC E DEC BC
DEC D DEC IY
DEC C DEC IX
DEC B DEC (HL)
DEC (IX+N) DEC (IX+N)
********************************
Ahora supongamos que necesitamos aumentar el registro "A" no en uno, sino digamos, en diez:
********************************
LD A,NUMBER
ADD A,10
RET
********************************
Se puede sumar el registro "A" con un número y otros registros y con una celda de memoria, dirigida por pares de registros "HL", "IX" e "IY". También se pueden sumar pares de registros con "HL", "IX" e "IY".
(PureBasic - sistema de archivos)
********************************
ADD A,N ADD A,(HL)
ADD A,A ADD A,(IX+N)
ADD A,B ADD A,(IY+N)
ADD A,C ADD HL,HL
ADD A,D ADD HL,BC
ADD A,E ADD HL,DE
ADD A,H ADD HL,SP
ADD IX,IX ADD IX,BC
ADD IX,DE ADD IX,SP
********************************
Como pueden ver, el conjunto de comandos es bastante grande. Al ejecutar este comando puede ocurrir un error:
********************************
LD A,45
LD B,230
ADD A,B
RET
********************************
La suma "A" y "B" superó 255 y por lo tanto en "A" resultará no 275, sino 20 (el registro "A" no es elástico); para que sepamos que ocurrió un desbordamiento, el procesador establece la bandera de acarreo en uno. Solo queda verificarla.
Así como "INC" tiene "DEC", "ADD" también tiene su "pareja", que es "SUB", y tiene sus propias características. El comando "SUB" solo trabaja con el registro "A", por lo que al escribir la mnemotécnica de este comando se omite "A":
********************************
SUB N SUB C
SUB A SUB H
SUB B SUB D
SUB E SUB (HL)
SUB (IX+N) SUB (IY+N)
********************************
El comando afecta a la bandera de acarreo de la misma manera que "ADD".
Además del par de comandos "ADD" y "SUB", existe otro par. Los comandos "ADC" y "SBC" trabajan teniendo en cuenta la bandera de acarreo, es decir, al sumar o restar se agrega (o se resta) el valor de la bandera de acarreo al resultado. Para establecer la bandera de acarreo hay dos comandos especiales: "SCF" y "CCF". "SCF" - establece la bandera de acarreo en uno. "CCF" - establece la bandera de acarreo en cero.
********************************
ADC A,N SBC A,N
ADC A,A SBC A,A
ADC A,H SBC A,H
ADC A,L SBC A,L
ADC A,D SBC A,D
ADC A,E SBC A,E
ADC A,B SBC A,B
ADC A,C SBC A,C
ADC A,(HL) SBC A,(HL)
ADC A,(IX+N) SBC A,(IX+N)
ADC A,(IY+N) SBC A,(IY+N)
ADC HL,HL SBC HL,HL
ADC HL,BC SBC HL,BC
ADC HL,DE SBC HL,DE
ADC HL,SP SBC HL,SP
********************************
Ahora ejemplos de cómo funcionan los comandos "ADC" y "SBC":
********************************
LD A,10 LD A,10
LD B,5 LD B,5
CCF CCF
SBC A,B ADC A,B
RET RET
A=5 B=5 A=15 B=5
********************************
En lugar de los dos comandos "CCF" y "SBC A,B" se puede poner simplemente "SUB B", el resultado será el mismo.
********************************
LD A,10 LD A,10
LD B,5 LD B,5
SCF SCF
SBC A,B ADC A,B
RET RET
A=4 B=5 A=16 B=5
********************************
Como se puede ver en los resultados, la bandera de acarreo influye significativamente en el resultado de la operación. Al restar se resta del resultado, y al sumar se agrega al resultado.
Se ha hablado casi todo sobre las operaciones de suma y resta, ahora hablaremos sobre la división y la multiplicación. Desafortunadamente, SPECCY no tiene comandos de división y multiplicación, pero estos comandos se pueden construir a partir de varios otros. Por ejemplo, necesitamos multiplicar el contenido de dos registros - "A" y "C":
********************************
LD A,10
LD C,5
LD B,A
XOR A
LOOP ADD A,C
DJNZ LOOP
RET
********************************
En el ejemplo hay dos nuevos comandos - "XOR A" y "DJNZ LOOP". "XOR A" pone a cero el registro "A", y el comando "DJNZ LOOP" repite todos los comandos desde el comando marcado con la etiqueta (por ejemplo "LOOP") hasta el comando "DJNZ" (después de él debe estar la misma etiqueta que al inicio del ciclo); el número de repeticiones se establece en el registro "B". Usando lo que la multiplicación M por N es la suma del número M consigo mismo N veces, puedes entender el ejemplo anterior.
Se puede usar esta propiedad también para la división. Intenta hacerlo tú mismo.
La próxima vez hablaremos sobre los comandos de comparación y el trabajo con bits.
________________________________
Contenido de la publicación: ZX Format #02
- IS-DOS
Anuncio de un complejo hardware-software para escuelas por Iskra Soft y Peters, con una configuración de clase informática en red en ZX Spectrum con IS-DOS.
- IS-DOS - Владимир Елисеев
Explicación del monitor de línea de comandos y reinicio del editor de texto en IS-DOS usando la utilidad mon.com como ejemplo.
- IS-DOS
Introducción a las utilidades del sistema IS-DOS, cubriendo funciones como ayuda, menú de usuario, visualización de archivos, edición y operaciones de archivos.
- IS-DOS
Descripción detallada del programa eliminat.com para liberar memoria de tareas residentes y controladores, con modo interactivo y claves de línea de comandos. Números de canal específicos asignados para tipos de tareas y controladores. Incluye opciones de uso y personalización de colores.
- Sistema de Ventanas IS-DOS - Владимир Елисеев
Exploración de reinicios del sistema de ventanas IS-DOS para imprimir texto en ventanas y coordenadas de pantalla absolutas. Ejemplos de implementaciones de reinicios como lwt, adrwt, lenwt, prstr, str y lnstr. Continuación para cubrir reinicios auxiliares en el próximo número.
- Ensamblador
Introducción a los conceptos básicos del lenguaje ensamblador, centrándose en las banderas, operaciones aritméticas y manipulación de registros. Se discuten operaciones como suma, resta y operaciones complejas como multiplicación y división a través de ejemplos. Destaca comandos específicos de ensamblador y sus funciones para ZX Spectrum.
- Hardware
Discusión sobre modificaciones de hardware para Scorpion ZS-256-Turbo, incluida la implementación de un interruptor Turbo/Normal. Pros y contras de los métodos de cambio basados en software. Consejos sobre soldadura y ajustes de circuitos.
- Hardware
Discusión de un nuevo complemento musical para ZX Spectrum de X-TRADE y HACKER STINGER, llamado 'ZX GENERAL SOUND', que ofrece audio de alta calidad y uso mínimo del procesador.
- Hardware
Discusión sobre innovaciones de hardware y estrategias de marketing, enfocándose en interfaces de ratón y teclado para ZX Spectrum. Crítica a la publicidad engañosa de la competencia y análisis de la tecnología de ratón serial frente a pasiva. El autor cuestiona la necesidad y el costo de características avanzadas.
- Hardware
Discusión sobre métodos de aceleración de hardware para ZX Spectrum, centrándose en modos turbo y sus efectos en el rendimiento y la compatibilidad.
- Juguetes
Cuento de fantasía sobre criaturas mágicas luchando contra la intrusión humana. El personaje principal recluta aliados para restaurar la gloria pasada de la tierra. Desafíos incluyen encontrar herramientas, superar obstáculos y revivir compañeros.
- Juguetes
Reseña del juego 'Carrier Command', centrada en sus aspectos estratégicos y de simulación. Incluye detalles de mecánicas de juego, controles y objetivos. Destaca estrategias para el éxito y características únicas como la gestión de recursos y sistemas autónomos.
- Entrevista
Entrevista con Sergey Zonov y Andrey Larchenko discutiendo su experiencia con microprocesadores y el desarrollo del ZX Spectrum, incluyendo la creación del ordenador Scorpion ZS 256.
- Información
Información de contacto y lista de personal de ZX-Format No. 2 (1995) incluyendo editor, programadores y diseñadores.
- Información
Dirección del editor a los lectores de ZX Format, discutiendo comentarios positivos, errores pasados y la búsqueda de un caricaturista, con planes futuros para la revista.
- Información
Discusión sobre la nueva interpretación del sistema de menú de ventanas 'PULLDOWN' para ZX Spectrum, centrándose en las actualizaciones de la interfaz y las mejoras en la interacción del usuario.
- Información
Discusión sobre empresas que distribuyen ilegalmente ZX Format, enfatizando los beneficios de comprar copias oficiales.
- Concurso
El artículo discute la falta de participación en el concurso de ZX Format, detalla las reglas y premios, y alienta a los lectores a participar con nuevas ideas.
- Vamos a Relajarnos
Relato humorístico de los desafíos de un vendedor de software al tratar con clientes ignorantes, ilustrando la naturaleza estresante de su trabajo.
- Buzón
Descripción de componentes y precios para entusiastas de ZX Spectrum con detalles de pedido.
- Buzón
La sección de cartas de lectores en ZX Format #02 discute comentarios de los lectores, aborda problemas con las características de ZX Format y ofrece mejoras futuras.
- Estreno
Guía de Digital Studio v1.12, un editor musical para ZX Spectrum, incluyendo características, navegación del menú y uso de Digital Studio Compiler.
- Para Programadores
Exploración de herramientas que amplían el Basic 48 estándar, incluyendo Renumber para Basic 128, Trace & Speed, Blast Toolkit y ZXeditor, destacando sus funcionalidades y utilidades.
- Varios
Historia de los modelos de computadoras Amiga y su evolución desde A1000 hasta A4000/60T con especificaciones y características únicas. Explicación de términos técnicos y diferencias entre memoria chip y fast. Mención de nuevos desarrollos como el chipset AGA y modelos para diferentes necesidades.
- Varios
El artículo presenta lanzamientos de software para ZX Spectrum y revisa innovaciones de juegos como 'Aventuras de Winnie Pooh' y 'UFO 2: Demonios del Abismo'. Destaca características, creadores y requisitos técnicos. Incluye anuncios de SOFTLAND y Cracked Masters Group.
- Sistemas
Discusión sobre la creación de música con Instrument 3.01, centrado en el sonido digitalizado. Análisis de las capacidades del programa y conversión de ASC Sound Master. Instrucciones para composición y conversión.
- Qué Hay de Nuevo
Reseña de nuevos juegos para ZX Spectrum en el mercado de San Petersburgo a finales de 1995. Descripciones detalladas de juegos, requisitos de memoria, controles y evaluaciones de música/gráficos. Destacan Night Hunter, Extreme, Grell & Falla y más.