Home
Más Sobre registros y operaciones
Contents
1. Aprovecha una caracter stica del sistema ASCII las letras may sculas y min sculas vistas en binario se diferencian en que su bit n mero 5 est a CERO en las may sculas En el Manual de Usuario del CPC pod is ver que las may sculas van de 65 a 90 y las min sculas de 97 a 122 El programa transforma a may sculas en la etiqueta inicial y min sculas en resto las letras que est n dentro de este rango mediante SET y RES para activar o no el bit 5 volviendo a esperar una pulsaci n si el ASCII asociado a la tecla pulsada no est en este rango Esto lo va comprobando con los bloques de CP y JP ORG 4000 Direcci n de Inicio instrucci n para el Ensamblador LD A 1 Carga el Acumulador con 1 decimal Forzamos Mode 1 CALL BC0E Rutina del Firmware SCR SET MODE establece el modo que est en el Acumulador 0 1 2 LD H 05 Carga H con 8205 LD L 07 Carga L con 8207 CALL BB75 Rutina del Firmware TXT SET CURSOR posiciona el cursor de texto en la columna H y y fila L inicial CALL amp BB18 Rutina del Firmware KM WAIT KEY espera la pulsaci n de una tecla y pone su ASCII en el Acumulador CP 65 Compara resta 65 del n mero que hay en acumulador JP C inicial Si hubo Carry ASCII lt 65 vuelve a esperar una tecla CP 123 Compara resta 123 del n mero que hay en acumulador JP NC inicial Si no hubo Carry ASCIH gt 123 vuelve a esperar tecla CP 97 Compara resta 97 del n mero que hay en
2. acumulador JR NC sigue Si no hubo Carry ASCH gt 97 contin a en sigue CP 91 Compara resta 91 del n mero que hay en acumulador JP NC inicial Si no hubo Carry ASCH gt 91 vuelve a esperar tecla Sigue l RES 5 A Pone a 0 el bit 5 del Acumulador Pone en may scula CALL amp BB5A Rutina del Firmware TXT OUTPUT imprime en pantalla el caracter cuyo ASCII est en el Acumulador resto LD B 8 Carga B con 8 Nuestro nombre tendr m ximo 9 letras bucle CALL amp BB18 Rutina del Firmware KM WAIT KEY espera la pulsaci n de una tecla y pone su ASCII en el Acumulador CP 13 RET Z CP 65 JP C bucle CP 123 JP NC bucle CP 97 JR NC sigue2 CP 91 JP NC bucle Sigue2 SET 5 A CALL BBSA DJNZ bucle RET Compara 13 con el Acumulador ASCII de Return Si se hab a pulsado Return Z 1 RETorna Compara resta 65 del n mero que hay en acumulador Si hubo Carry ASCII lt 65 vuelve a esperar una tecla Compara resta 123 del n mero que hay en acumulador Si no hubo Carry ASCIH gt 123 vuelve a esperar tecla Compara resta 97 del n mero que hay en acumulador Si no hubo Carry ASCII gt 97 vuelve a esperar tecla Compara resta 91 del n mero que hay en acumulador Si no hubo Carry ASCH gt 91 vuelve a esperar tecla Pone a 1 el bit 5 del Acumulador Rutina del Firmware TXT OUTPUT imprime en pantalla el car cter cuyo ASCII est en el Acum
3. and Jump if Not Zero que utiliza el registro B como un contador y le va restando uno y saltando el desplazamiento indicado d hasta que B llega a cero momento en que continuar con la siguiente instrucci n Los indicadores de Carry y el Zero forman parte de un registro especial de 8 bits del Z80 llamado F de Flags o Banderas no Antonio el de la Griffith si no las de los barcos ya sabeis de las de hacer se ales De sus 8 bits s lo se usan 6 y son AA E had fa Signo Se pone a 1 si el bit m s significativo de ciertas operaciones es uno Zero Se pone a 1 si el resultado una operaci n es nulo cero Half Carry Como el Carry pero para las operaciones con medio byte se pone a 1 si hay acarreo del bit 3 al 4 Parid Desb Ser uno u otro seg n la instrucci n tras una operaci n l gica o de rotaci n desplazamiento P igual a 1 si hay un n mero par de bits puestos a l tras una operaci n aritm tica V igual a uno si hay desbordamiento Suma Resta Se pone a 1 si la operaci n precedente fue una resta y a 0 si fue suma Carry Se pone a 1 si el resultado de una operaci n produce acarreo tanto si se trata de suma como de resta Estos indicadores o flags menos H y N que no pueden verificarse nos proporcionan m s condiciones para nuestras instrucciones C Hay acarreo C 1 NC No hay acarreo C 0 Z gual Z 1 NZ No igual Z 0 M Negativo S 1 P Positivo S 0 PO Paridad impar P V 1 PE Paridadpar P
4. que nos llevamos ya sea para sumarla o restarla lo nico que hace es activar un indicador el CARRY que est ah para saber que se ha rebasado la barrera entre el cero y el 255 es decir que ha habido acarreo Por ejemplo LD A amp 04 SUB 07 RET Tras ejecutarse este programilla tendr amos en el Acumulador exacto lo hab is pillado amp FD o sea 253 en decimal Para los que no recordad que 4 3 2 1 0 255 254 253 8104 8203 8202 amp 01 800 FF SFE amp FD Eh Y el CARRY activado Siempre que se hace un ADD o un SUB el Carry se activar o desactivar convenientemente seg n haya habido o no acarreo Esto no sucede con las instrucciones INC o DEC estas instrucciones NO afectan al Carry El Carry nos permite utilizar instrucciones que bifurcar n el programa dependiendo de si est activado o no por ejemplo las de salto JP Conoceremos las instrucciones de salto con este programa que nos muestra el juego ASCII de caracteres ORG 4000 Direcci n de inicio instrucci n para el ensamblador 4000 LD A 20 Carga el Acumulador con 220 ASCII de Espacio 4002 CALL BB5A Rutina del Firmware TXT OUTPUT imprime en pantalla el caracter cuyo ASCII est en Acumulador 4005 ADD A 1 Suma uno al n mero contenido en el Acumulador 4007 JP NC amp 4002 Si No hay Carry salta JumP a la direcci n amp 4002 400A RET RETorna a donde estaba En este programa la instrucc
5. 5A Rutina del Firmware TXT OUTPUT imprime en pantalla el caracter cuyo ASCII est en el Acumulador 4016 DEC C Decrementa el n mero contenido en C 4017 JP NZ amp 4002 Si No hay Zero salta JumP a la direcci n 84002 401A RET RETorna a donde estaba Se alaremos aqu que las JP son saltos absolutos ya que existe tambi n un juego de instrucciones de salto relativo JR en las que en vez de dar una direcci n a donde saltar lo que hacemos es saltar varios bytes hacia delante o hacia atr s en la memoria indic ndole solamente el n mero de bytes que queremos que var e el Contador de Programa PC record is es ese registro de 16 bits que lleva la cuenta de qu posici n de memoria contiene la siguiente instrucci n del programa lo vimos en la Intro Este n mero de bytes se llama desplazamiento y puede ser positivo o negativo para saltar adelante o atr s Como hemos visto que nuestro Z80 cuenta ciclicamente ignorando los n meros negativos hemos de adoptar aqu un convenio cuando en algunos casos como en este del desplazamiento necesitemos n meros negativos para poder saltar atr s usaremos un sistema de numeraci n de 7 bits estando el octavo bit destinado al signo y que estar a cero en los positivos y a uno en los negativos quedando de la siguiente manera 128 A A 3 2 1 0 lr E 126 127 amp 80 8 lin amp FD SFE 8 FF 800 801 8202 8203 STE amp 7F 10000000 c o0ooccccc
6. Cap tulo II M s sobre Registros y Operaciones En el Cap tulo anterior aprendimos a sumar a mover datos entre registros y modificar su valor INCrement ndolo o DECrement ndolo En ste veremos m s operaciones que modificar n los datos contenidos en los registros empezando por la RESTA Es muy simple tenemos una instrucci n para restar cuyo mnem nico es SUB y su ortograf a es distinta a la de la suma en este caso ponemos a continuaci n de la instrucci n el valor o registro que queremos restar del Acumulador Esta resta es aplicable nicamente al Acumulador por ejemplo SUB B o SUB amp 3F restar n el byte contenido en el registro B o amp 3F respectivamente del byte contenido en el Acumulador guard ndose en ste el resultado Como en nuestros registros y posiciones de memoria s lo cabe un Byte los n meros que podemos utilizar en nuestras operaciones han de estar entre 0 y 255 decimal amp FF en hexadecimal 11111111 en binario Pero qu ocurre si el resultado de nuestra suma o resta se sale de este rango por arriba o por abajo Me gust mucho la analog a que le en alg n sitio con el cuentakil metros antiguo del coche pasas por 7 8 9 0 Y TE LLEVAS UNA sumas una al d gito siguiente y sigues con 1 2 3 Y para la resta lo mismo 2 1 0 9 8 7 Aqu tambi n te llevar as una pero tendr as que restarla del d gito superior Nuestro Z80 tambi n funciona as s lo que la
7. V 0 Los saltos relativos JR s lo admiten las condiciones con Carry y Zero mientras que los saltos absolutos JP admiten todas Tambi n admiten todas las condiciones las instrucciones CALL y RET que ya conoc amos en su versi n incondicional Otro tipo de operaciones que podemos hacer con los registros son las cl sicas operaciones l gicas siguientes que expongo junto a su tabla de verdad Y que ser n efectuadas bit a bit entre el Acumulador y el Operando esto es el bit O del Acumulador con el bit O del Operando el bit 1 del Acumulador con el bit 1 del Operando bit 7 del Acumulador con el bit 7 del Operando quedando el resultado en el Acumulador Estas instrucciones modifican convenientemente los flags S Z y P V que en este caso act a como bit de paridad poni ndose a uno si queda un n mero par de unos en el Acumulador ponen N y C a cero y OR y XOR ponen H a cero y AND a uno Y queda una serie de instrucciones que ya que hablamos de bits voy a citar CPL Complementa a uno un registro es decir le cambia los ceros por unos y viceversa Equivalente a la operaci n l gica NOT negaci n NEG Cambia el contenido de un registro por su negativo o sea por su complemento a dos Recordemos que para obtener un n mero negativo desde su positivo lo que hacemos es sumarle uno a su complemento a uno DAA Efect a un ajuste decimal del Acumulador traduce su contenido a BCD binario codificado como decimal De mom
8. cumulador nos activar el Carry pero si es menor no Si son iguales no nos activa el Carry no hemos rebasado el l mite pero s nos activa el Zero otro indicador que se activa cada vez que el resultado de una operaci n sea cero Entonces CP lo que hace es restar lo que le indiquemos del byte contenido en el acumulador y nos colocar los indicadores de Carry y Zero convenientemente pero no alterar el contenido del Acumulador ni del otro registro si fuera el caso El indicador Zero nos permite aumentar nuestras instrucciones de salto condicional con una nueva condici n la dependencia del Zero Lo vemos en este ejemplo con bucles anidados que dibuja un tri ngulo de asteriscos ORG 4000 Direcci n de inicio instrucci n para el ensamblador 4000 LD C 08 Carga el registro C con 408 4002 LD B C Copia el contenido de C en B 4003 LD A amp 2A Carga el Acumulador con amp 2A ASCII de asterisco 4005 CALL amp BB5A Rutina del Firmware TXT OUTPUT imprime en pantalla el caracter cuyo ASCII est en el Acumulador 4008 DEC B Decrementa el n mero contenido en B 4009 JP NZ amp 4005 Si No hay Zero salta JumP a la direcci n amp 4005 400C LD A 0A Carga el Acumulador con amp 0A Salto de l nea 400E CALL BB5A Rutina del Firmware TXT OUTPUT imprime en pantalla el caracter cuyo ASCII est en el Acumulador 4011 LD A 0D Carga el Acumulador con 0D Inicio de l nea 4013 CALL amp BB
9. ento baste saber que existe esta instrucci n BIT b r Esta instrucci n comprueba el bit b del registro r poniendo el flag Zero a 1 si contiene un cero y a cero si no si es un 1 SET b r y RES b r Ponen a uno SET o a cero RES el bit b del registro r Estas dos instrucciones no afectan a los flags SCF Pone el Carry a 1 y CCF Complementa el Carry si es cero lo pone a uno y viceversa Podemos poner el Carry a cero con OR A o AND A pero recordemos que tambi n se modifican otros flags Con las instrucciones que conocemos podemos sumar y restar n meros de 16 bits tambi n sumando restando por separado sus bytes de bajo peso y de alto peso por ejemplo en amp C14F el byte de bajo peso es 4F y C1 el de alto y recordando a adir restar uno al byte alto si la suma resta de los bytes de poco peso ha provocado acarreo o sea que nos llevamos una Para ello tendr amos que comprobar el Carry cada vez que hici ramos una suma pero no ya que tenemos unas instrucciones espec ficas para esta tarea que son ADC y SBC que lo que hacen es a adir o restar uno respectivamente a la suma que estamos efectuando si el Carry est activado Pero en el pr ximo Cap tulo veremos mejores formas de de trabajar con n meros de 16 bits Para cerrar este cap tulo en este ejemplo creamos una rutina que escribir la palabra que introduzcamos con la primera letra en may scula y el resto en min sculas independientemente del estado de BLOQ MAYS y MAYS
10. i n JP NC 4002 nos va mandando de nuevo al CALL y sumando uno al Acumulador mientras que no haya acarreo El acarreo se producir al sumar 1 a 255 la condici n no cumplir y seguir el programa en la siguiente instrucci n el RET Con INC A el programa no funcionar a al no afectar al Carry Como este programa ya hace algo nos podr a interesar guardarlo en el MAXAM en ROM podemos guardar el C digo Fuente el listado en Ensamblador con la opci n S del men luego podremos recuperarle con L Si estamos usando el MAXAM de WinAPE File Save nos guardar el C digo Fuente Si lo que queremos es guardar el archivo ya ensamblado en binario volvemos a BASIC y escribimos save nombre B 4000 N donde 824000 ser a la direcci n de inicio de nuestro programa y N el n mero de bytes de nuestro programa Otra forma de hacerlo es incluyendo la linea write nombre en el c digo fuente Al ensamblar el MAXAM guardar una copia en disco Otro modo de usar JP ser a saltando si s hubiera Carry JP C NN o incluso sin condici n que ser a un salto incondicional similar a la instrucci n BASIC GOTO Hay otra instrucci n que tambi n afecta al Carry y que opera igual que la resta pero sin cambiar el byte contenido en el acumulador digamos que simula la resta pero no guarda el resultado en ning n sitio es CP de ComParar Fijaos en que en una resta si el n mero que restamos es mayor que el del A
11. ono oo 11111111 0 oi 01111111 Pero tenemos una pega a la hora de indicar un desplazamiento el negativo de un n mero NO es el mismo n mero positivo con su octavo bit puesto a uno y si no haced la prueba Aunque lo podemos calcular facilmente ya que corresponde con el complemento a dos de su positivo en binario Y c mo se hace eso Es muy sencillo tomamos el n mero positivo en binario y lo complementamos a dos es decir ponemos los bits que eran cero a uno y los que eran uno a cero y despu s le sumamos uno Lo vemos con el 6 sacado desde el 6 positivo 110 ponemos el n mero positivo en binario 001 complementamos a 1 cambiamos 1 por 0 1 sumamos 1 para complementarlo a 2 65 11111010 Nuestro 6 esto es FA 65 00000 11111 Los c lculos de los desplazamientos nos los har autom ticamente el Ensamblador gracias a las etiquetas pero creo que es interesante y til conocer esta informaci n Las instrucciones de salto relativo ocupan un byte menos que las de salto absoluto aunque estas ltimas son m s r pidas Por ahorro de espacio podemos usar las de salto relativo siempre que nos sea posible tienen un rango de utilizaci n limitado a 127 y 128 bytes por delante y por detr s pero si nos sobra espacio merece la pena usar las de salto absoluto por su rapidez Y para rematar los bucles y desplazamientos hay una instrucci n especial del Z80 destinada a la creaci n de bucles DJNZ d DecreaseB
12. plementa a uno el Acumulador NEG Complementa a dos el Acumulador DAA Ajusta el Acumulador en BCD BIT b R Activa flag Zero si hay un 0 en el bit b del registro R SET b R Pone a uno el bit b del registro R RES b R Pone a cero el bit b del registro R SCF Pone a uno el Carry Flag CCF Complementa el Carry Flag
13. ulador Decrementa B y si no hay Zero salta a bucle Retorna a donde estaba Bueno como veis hemos introducido alguna rutina del Firmware m s La verdad es que nos ser n de utilidad en muchas ocasiones Pod is ampliar informaci n sobre estas rutinas y m s cosas en The Amstrad CPC Firmware Manual en ingl s que pod is encontrar en http www cantrell org uk david tech cpe cpc firmware Resumiendo SUBNOR Resta el byte N o el contenido en el registro R del que hay en Acumulador Resultado queda en Acumulador CPNOR Compara resta el byte N o el contenido en el registro R con el que hay en el Acumulador No se guarda el resultado s lo se cambian flags ADCA NoR Suma el byte N o el contenido en el registro R y el Carry al Acumulador quedado all el resultado SBCNOR Resta el byte N o el contenido en el registro R y el Carry del Acumulador quedando all el resultado JP c NN Salto condicional a la direcci n NN JR c d Salto relativo de d bytes S lo con Carry y Zero DJNZ d Decrementa B y si no es Zero salta d bytes CALL c NN Llamada condicional a la direcci n NN RET c Retorno condicional a donde se llam a la rutina Nota En estas instrucciones la condici n es opcional y puede omitirse ANDNoR AND l gico bit a bit entre el Acumulador y N o R ORNoR OR l gico bit a bit entre el Acumulador y N o R XOR NoR XOR l gico bit a bit entre el Acumulador y N o R CPL Com
Download Pdf Manuals
Related Search
Related Contents
超小型光ファイバ融着接続機「S123シリーズ Example-based creation and tuning of motion recognizers for motion Mode d`emploi - Région Poitou PASS v 2.23 user manual 3030 Cover - english.eps V7 HDMI Flat Cable (m/m) gold plated connector black 2m 関連PDF1 CSA824 取扱説明書 Copyright © All rights reserved.
Failed to retrieve file