SISTEMAS DE NUMERACIÓN (T−1) CONCEPTO.− Un sistema de numeración es un conjunto de símbolos y reglas que se utilizan para la representación de datos numéricos o cantidades. Cada sistema de numeración se va ha caracterizar por su base que es el número de cada símbolo distinto que utiliza, y además determina el valor de cada símbolo, dependiendo de la posición que ocupe. Sistema decimal. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Base: 10 Ej: 123 = U · B0 + D · B1 + C B2 = 3 · 100+ 2 · 101 + 1 · 102 = 100 + 20 + 3 = 123 El valor decimal de una cantidad expresada en otro sistema de numeración viene dada por la siguiente fórmula: Nº = Sumatorio (Dígito)· (Base)n SISTEMA BINARIO.− Símbolos: 0, 1. Base: 2 101(2 = 1 · 20 + 0 · 21 + 1 · 22 = 22(10 Binary Digit 1 Bit = 1 Simbolo 1 Byte = 8 bits 1 Kb = 1024 bytes 1 Mb = 1024 Kb 1 Gb = 1024 Mb SISTEMA OCTAL.− Símbolos: 0, 1, 2, 3, 4, 5, 6, 7. Base: 8 1 107(8 = 7 · 80 + 0 · 81 + 1 · 82 = 7 + 64 = 71(10 SISTEMA HEXADECIMAL.− Símbolos: 0, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Base: 16 1A2(10 = 2 · 160 + A · 161 + 1 · 162 = 2 + 10 · 16 + 256 = 418(10 CAMBIOS DE SISTEMAS DE NUMERACIÓN.− ·Binario. Hay que dividir sucesivamente por 2 hasta no se posible más. 17(10 /2 •8/2 04/2 02/2 •1 1 0 0 0 1(2 ·Cambio de binario a hexadecimal. Binario 0000 Hexadecimal 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 10−A 2 1011 11−B 1100 C 1101 D 1110 E 1111 F 1)Contar en exadecimal del 0000 / 0020. 0000−0001−0002−0003−0004−0005−0006−0007−0008−0009−000A−000B−000C−000D−000E−000F−0010−0011−0 2)Hallar en nº anterior. 441F>441E 01EF>01EE 4400>43FF 0220>021F 4401>4400 FFFF>FFFE ARQUITECTURA DE LOS ORDENADORES.− U.C. Es la encargada de gobernar al resto de unidades y ejecutar las instrucciones controlando su secuencia. U.A.L. Es la encargada de realizar todas las operaciones de tipo aritmético y lógico. M.C. Es la encargada de almacenar programas y datos necesarios para que el sistema informático realice un trabajo determinado. U.C. Controlador de programa. Registro instrucción. Decodificador. Reloj. Secuenciador. El contador de programa va contener siempre la dirección de memoria de la siguiente instrucción a ejecutar. 3 El registro de instrucción contiene la instrucción que se está ejecutando en cada momento. U.A.L. Circuito operacional. Registro entrada. Registro acumulador. Registro estado. El circuito operacional va a contener los circuitos necesarios para realizar operaciones con los registros de entrada. Los registros de entrada contienen los datos que intervienen en una operación. El registro acumulador almacena los resultados de operaciones. El registro de estado es un conjunto de biestables un los que se registran condiciones que se dieron en la última operación. ENSAMBLADOR.− ·Características del 6502. El bus de datos: es de 8 bits mientras que el de direcciones es de 16. El contenido de cada celda de memoria es de 8 bits y los registros de que disponemos son: acumulador, reg. X, reg. Y, reg. Estado (todos ellos de 8 bits). ·Instrucciones. LDA. Carga en el acumulador el valor indicado en el operando. Podemos hacer 3 tipos de direccionamiento: −Inmediato. El valor que voy ha introducir en el acumulador está a continuación de la instrucción. #&Binario. # Decimal. #$ Hexadecimal. −Absoluto. Meto en el acumulador el contenido de la dirección de memoria especificada ($FFFF). −Pag 0. Hace lo mismo que el absoluto, pero solo puedes meter una cifra de 2 dígitos ($45). NOTA:Estos direccionamientos de memoria son válidos para cualquier instrucción. 4 STA. Carga lo que hay en el acumulador a una posición de memoria. LDX. Carga el contenido del operando al registro X. LDY. Pasa el contenido especificado en el operando al contenido Y. STX. Carga el contenido del registro X a una posición de memoria Direccionamiento: AbsolutoSTX $4402 Pág. 0 STX $54 STY. Pasa el contenido del registro Y a una posición de memoria. 3)Intercambiar los contenidos de la memorias 40 y 41. LDX $40 LDY $41 STY $41 LDY $40 BRK Las siguientes instrucciones sirven para pasar valores entre acumulador, reg. X eY. Todas estas instrucciones afectan a los flag N (Negative) y Z (Zero). INC. Incrementa en una unidad el contenido especificado en el operando o en su defecto en el acumulador, guardando siempre el resultado en el mismo. INX. Incrementa en una unidad el contenido del reg. X. INY. Incrementa en una unidad el contenido del reg. Y. DEC. Decrementa en una unidad el contenido de la memoria direccionada o en su defecto en el acumulador, guardando siempre el resultado en el mismo. DEX. Decrementa en una unidad el contenido del reg. X. DEY. Decrementa en una unidad el contenido del reg. Y. AND. Realiza la operación lógica AND a los 8 bits del operando y los 8 bits del acumulador [A AND (M)A]. Se consigue forzar un bit a cero donde se ponga un 0. X 0 Y 0 X AND Y 0 0 1 0 5 1 0 0 1 1 1 4)Forzar a 0 los dos bits más significativos de la dirección de memoria 4205 guardando el resultado en 4206. LDA $4205 AND #&00111111 STA $4206 BRK LDA #&00111111 AND $4205 STA $4206 BRK ORA. Realiza la operación lógica OR entre el acumulador y la memoria direccionada. Posee los mismos direccionamientos que AND que son los de siempre Se consigue forzar un bit a uno donde se sitúe un 1. X 0 Y 0 X ORA Y 0 0 1 1 1 0 1 1 1 1 5)Programa que fuerza a 1 las cuatro cifras menos significativas de la memoria 48 pasando el resultado al registro X. LDA $48 ORA #&00001111 TAX BRK 6 EOR. Efectúa la operación lógica OR exclusiva o XOR entre la memoria y el acumulador. El resultado de la operación lo introduce en el acumulador. Se consigue forzar un bit al cambio donde se ponga un 1. X 0 Y 0 XOR Y 0 0 1 1 1 0 1 1 1 0 El complemento a 1 consiste en cambiar los 0 por 1 y viceversa, una posibilidad es utilizar el operador EOR #&11111111. 6)Calcular el complemento a 1 de la dirección de memoria 55 guardando el resultado en la memoria 56. LDA $55 EOR #&11111111 STA $56 BRK El complemento a 2 se halla sacando el complemento a 1 y el resultado incrementarlo en 1 unidad. 7)Calcular el complemento a 2 de la memoria 55 almacenando el resultado en la memoria 56. LDA $55 EOR #&11111111 INC STA $56 BRK ADC. Suma el contenido de la memoria más el contenido del acumulador y el del flag C [o acarreo (`carri' para los amigos)], depositando el resultado en el acumulador y en el carri. X 0 Y 0 X+Y 0 C=0 0 1 1 C=0 1 0 1 C=0 1 1 0 C=1 CLC. Pone el carri a 0. Su direccionamiento es implícito. 7 8)Sumar el contenido de la memoria 40 el valor 09 hexadecimal, guardando el resultado en la memoria 41. LDA $40 CLC ADC #$09 STA $41 BRK LDA #$09 CLC ADC $40 STA $41 BRK 9)Sumar los contenidos de las memorias 40 y 41 guardando el resultado en la 42. LDA $40 CLC ADC $41 STA $42 BRK 10)Programa que suma las memorias 40, 41 y 42 guardando el resultado en la 43. LDA $40 CLC ADC $41 CLC ADC $42 STA $43 8 BRK 11)Sumar un nº de 16 bits localizado en las memorias 40 y 41 a otro nº de 16 bits localizado en las memorias 42 y 43, almacenar el resultado en las memorias 44 y 45, sabiendo que los bits más significativos se encontrarán en las memorias 41, 43 y 45. LDA $ 40 CLC ADC $42 STA $44 LDA $41 ADC $43 STA $45 BRK 12)Sumar el contenido del reg. X y del reg. Y, almacenando el resultado en la memoria 50. TXA STY $50 CLC ADC $50 STA $50 BRK ASL. Desplaza todos los bits del acumulador o dirección de memoria una posición a la izquierda depositando el bit más significativo en el carri y poniendo a 0 el bit menos significativo. La operación que se consigue es multiplicar por 2 el contenido de la memoria. 10010110 ASL (1) 00101100 13)Multiplica por 8 el contenido de la memoria 57 pasando el resultado a la memoria 58. LDA $57 CLC 9 ASL ASL ASL STA $58 BRK LSR. Desplaza todos los bits del acumulador o memoria direccionada, una posición a la derecha. Depositando el bit de menos peso en el carri y añadiendo un 0 al bit de más peso. La operación que se consigue es dividir por 2 el valor de la memoria. 10010110 LSR 01001011 (0) CMP. Compara el contenido de la memoria direccionada u operando con el contenido del acumulador, para ello realiza la operación A−(M) y no deposita el resultado en ningún sitio, únicamente afecta a los flags N, Z y C. CPX. Compara el contenido del operando o memoria direccionada con el registro X. Afecta a los flags N,Z y C. CPY. Compara el contenido del operando o memoria direccionada con el registro Y. NOP. Retiene en espera el programa durante 2 ciclos de reloj. ·Bifurcación. Las instrucciónes siguientes, sirven para bifurcar el programa y así poder crear bucles y/o condicionamientos. BEQ. Bifurca si el flag Z es igual a 1. Esto significa que la operación anterior ha sido igual a 0. BNE. Bifurca si el flag X es igual a 0. Esto significa que la operación anterior ha sido distinto de 0. JMP. Produce un salto incondicional de la secuencia del programa. Ej: FORMATO 1 LDX # n BUCLE DEX Instrucciones 10 a repetir CPX #0 BNE BUCLE BRK FORMATO 2 LDX # 0 BUCLE INX Instrucciones a repetir CPX # n BNE BUCLE BRK 14) Comarar la dirección de memoria 44 con el vlor 5, si es igual, poner a 0 el registro X y si no ponerlo a FF. LDA $ 44 CMP #$ 05 BEQ IGUAL LDX #$ FF JMP FIN IGUAL LDX #$ 00 FIN BRK LDA $ 44 CMP #$ 05 BNE DISTINTO LDX #$ 00 11 JMP FIN DISTINTO LDX #$ FF FIN BRK 15)Programa que compara la dirección de memoria 40 con la 50. Si son iguales graba el contenido de una de ellas en el registro X, si son distintas graba la 40 en el Reg. X y la 50 en el Reg. Y. LDA $ 40 CMP $ 50 BEQ IGUAL LDX $ 40 LDY $ 50 JMP FIN IGUAL LDX $ 40 FIN BRK BMI. Bifurca si el resultado de la operación anterior es negativo. Es decir, si el flag N es igual a 1. BPL. Bifurca si el resultado de la operación anterior ha sido positivo. Es decir, si el fal N es igual a 0. 16)Comprobar si la memoria 40 es mayor que el valor 09, si lo es grabar en el Reg. X 0. Si no lo es grabar FF. LDA $ 40 CMP #$ 09 BMI NEG LDX LDX #$ FF JMP FIN NEG LDX #$ 00 FIN BRK LDA $ 40 12 LDX #$ FF CMP #$ 09 BMI NEG JMP FIN NEG LDX #$ 00 FIN BRK ·Direccionamiento indexado. Absoluta $ 4205 Dirección de memoria Pag 0 $ 42 Direccionamiento indexado. Reg. X Indice Reg. Y El direccionamiento indexado, consiste en sumar el valor del registro X o Y a una memoria específica. Por ejemplo, si la memoria indexada es $ 4205,X y X en ese momento tiene un valor 2(10, realmente estamos utilizando la memoria $ 4207. De esta manera conseguiremos el resultado de un bucle FOR. 17)Sumar el contenido de las direcciones de memoria comprendidas entre 0100 y 0109, poniendo el resultado en la dirección de memoria 0110. LDA $ 0100 LDX #$ 00 BUCLE CLC ADC $ 0101,X INX CPX $# 09 BNE BUBLE STA $ 0110 13 BRK SUBRUTINA.− Es un programa específico que cumple una función determinada, que se incluye dentro de un programa principal utilizando dos comandos: RTS. Indica el final de la subrutina y hace saltar el programa a donde se quedó antes de entrar en ella JSR. Junto con una etiqueta, hace saltar el programa a la subrutina específica. Ej JSR BUCLE BRK BUCLE RTS 18)Programa que desplaza una posición a la izquierda las memorias, comprendidas entre 0141 y 0165. LDX #$ 00 BUCLE LDA $ 0141 JSR IZQ STA $ 0141,X INX CPX #$ 24 BNE BUCLE BRK IZQ ASL RTS ENSAMBLADOR 1 Acumulador Reg. X Reg. Y 14