9
MICROPROCESADORES Docente: Calixto Rodríguez V. ARITMETICA BCD Y ASCII, Y ALGUNAS OTRAS INSTRUCCIONES Multiplicación de 8 bits En la multiplicación de 8 bits el multiplicando deberá siempre estar en AL y el multiplicador en cualquier registro o localidad de memoria de 8 bits. NO se permite la multiplicación inmediata. Ej. El siguiente programa ejecuta la multiplicación de AL por BL y el producto aparece en AX, el cual es transferido a BX. MOV BL, 5H MOV CL, 10H MOV AL, CL MUL BL MOV BX, AX Multiplicación de 16 bits Es semejante al de 8 bits, la diferencia está en que el multiplicando se debe cargar en AX en vez de AL, y el producto se aparece en DX-AX, parte alta y parte baja respectivamente (en lugar de AX solamente). La división, al igual que la multiplicación se realiza con números de 8 o de 16 bits. Estos números son enteros con sigo (IDIV) o sin signo (DIV). El dividendo siempre será uno de doble de ancho. O sea, en una división de 8 bits siempre se divide un número de 16 bits entre uno de 8 bits. División de 8 bits Una división de 8 bits utiliza el registro AX para almacenar el dividendo, el divisor se coloca en cualquier registro o memoria de 8 bits. El cociente aparecerá en AL después de la división y el AH contiene el residuo Ej. MOV AL, NUM ;Obtiene NUM en AL MOV AH, 0 ;se extiende con ceros en AH, el dividendo debe estar ;contenido en AX y ser de 16 bits. DIV NUM1 ;divide entre NUM1 de 8 bits.

Aritmética BCD y ASCII

  • Upload
    calixrv

  • View
    239

  • Download
    5

Embed Size (px)

Citation preview

Page 1: Aritmética BCD y ASCII

MICROPROCESADORES Docente: Calixto Rodríguez V.

ARITMETICA BCD Y ASCII, Y ALGUNAS OTRAS INSTRUCCIONES

Multiplicación de 8 bits En la multiplicación de 8 bits el multiplicando deberá siempre estar en AL y el multiplicador en cualquier registro o localidad de memoria de 8 bits.NO se permite la multiplicación inmediata.Ej. El siguiente programa ejecuta la multiplicación de AL por BL y el producto aparece en AX, el cual es transferido a BX.

MOV BL, 5HMOV CL, 10HMOV AL, CLMUL BLMOV BX, AX

Multiplicación de 16 bits Es semejante al de 8 bits, la diferencia está en que el multiplicando se debe cargar en AX en vez de AL, y el producto se aparece en DX-AX, parte alta y parte baja respectivamente (en lugar de AX solamente).

La división, al igual que la multiplicación se realiza con números de 8 o de 16 bits. Estos números son enteros con sigo (IDIV) o sin signo (DIV). El dividendo siempre será uno de doble de ancho. O sea, en una división de 8 bits siempre se divide un número de 16 bits entre uno de 8 bits.

División de 8 bits Una división de 8 bits utiliza el registro AX para almacenar el dividendo, el divisor se coloca en cualquier registro o memoria de 8 bits. El cociente aparecerá en AL después de la división y el AH contiene el residuo

Ej. MOV AL, NUM ;Obtiene NUM en ALMOV AH, 0 ;se extiende con ceros en AH, el dividendo debe estar

;contenido en AX y ser de 16 bits.DIV NUM1 ;divide entre NUM1 de 8 bits.MOV COC, AL ;guarda el cociente en la localidad de memoria

; previamente declarada como COCMOV RES, AH ; guarda el residuo en la localidad de memoria

; previamente declarada como RES.

Tenga en cuenta que EN ESTE EJEMPLO, a pesar de que el dividendo es un número pequeño que puede ser contenido solo en AL, y está dado de esa forma, sin embargo es necesario que el dividendo sea de 16 bits y esté contenido en AX, por eso se rellena AH con ceros para completar el número de 16 bits.

Page 2: Aritmética BCD y ASCII

MICROPROCESADORES Docente: Calixto Rodríguez V.

FORMATOS DE DATOS

DATOS ASCII

Los datos en código ASCII (siglas en inglés de American Standard Code for Information Interchange) se suele utilizar para representar caracteres alfanuméricos en la memoria de un sistema microprocesador. El código ASCII es de 7 bits y el octavo bit, que es el mas significativo, se emplea para enviar información de paridad en algunos sistemas.

Carácteres no imprimibles

 

Carácteres imprimibles

Nombre Dec

 Hex Car

.Dec

 Hex  Car.

 

Dec

 Hex Car

.

 

Dec

 Hex Car

.

Nulo 0 00 NUL 32 20 Espacio

64 40 @  96 60 ` 

Inicio de cabecera 1 01 SOH 33 21 !  65 41 A  97 61 a 

Inicio de texto 2 02 STX 34 22 "  66 42 B  98 62 b 

Fin de texto 3 03 ETX 35 23 #  67 43 C  99 63 c 

Fin de transmisión 4 04 EOT 36 24 $  68 44 D  100 64 d 

enquiry 5 05 ENQ 37 25 %  69 45 E  101 65 e 

acknowledge 6 06 ACK 38 26 &  70 46 F  102 66 f 

Campanilla (beep) 7 07 BEL 39 27 '  71 47 G  103 67 g 

backspace 8 08 BS 40 28 (  72 48 H  104 68 h 

Tabulador horizontal 9 09 HT 41 29 )  73 49 I  105 69 i 

Salto de línea 10 0A LF 42 2A *  74 4A J  106 6A j 

Tabulador vertical 11 0B VT 43 2B +  75 4B K  107 6B k 

Salto de página 12 0C FF 44 2C ,  76 4C L  108 6C l 

Retorno de carro 13 0D CR 45 2D -  77 4D M  109 6D m 

Shift fuera 14 0E SO 46 2E .  78 4E N  110 6E n 

Shift dentro 15 0F SI 47 2F /  79 4F O  111 6F o 

Escape línea de datos 16 10 DLE 48 30 0  80 50 P  112 70 p 

Control dispositivo 1 17 11 DC1 49 31 1  81 51 Q  113 71 q 

Control dispositivo 2 18 12 DC2 50 32 2  82 52 R  114 72 r 

Control dispositivo 3 19 13 DC3 51 33 3  83 53 S  115 73 s 

Control dispositivo 4 20 14 DC4 52 34 4  84 54 T  116 74 t 

neg acknowledge 21 15 NAK 53 35 5  85 55 U  117 75 u 

Sincronismo 22 16 SYN 54 36 6  86 56 V  118 76 v 

Fin bloque transmitido

23 17 ETB 55 37 7  87 57 W  119 77 w 

Cancelar 24 18 CAN 56 38 8  88 58 X  120 78 x 

Fin medio 25 19 EM 57 39 9  89 59 Y  121 79 y 

Sustituto 26 1A SUB 58 3A :  90 5A Z  122 7A z 

Escape 27 1B ESC 59 3B ;  91 5B [  123 7B { 

Separador archivos 28 1C FS 60 3C <  92 5C \  124 7C | 

Separador grupos 29 1D GS 61 3D =  93 5D ]  125 7D } 

Separador registros 30 1E RS 62 3E >  94 5E ^  126 7E ~ 

Separador unidades 31 1F US 63 3F ?  95

Page 3: Aritmética BCD y ASCII

MICROPROCESADORES Docente: Calixto Rodríguez V.

DATOS BCD

La información codificada en binario (BCD) se almacena en forma empacada o no empacada en la memoria. La información BCD empacada, almacena dos dígitos BCD por cada byte de memoria; la BCD no empacada almacena un dígito de BCD por cada byte. Con los datos de BCD los códigos binarios válidos de 4 bits son 0000 (0) a 1001 (9).Ejemplos.

Número Empacado Desempacado23 0010 0011 00000010 00000011152 0001 0101 0010 00000001 00000101 00000010

ARITMETICA PARA BCD Y ASCII

El 8086 permite el manejo aritmético de datos decimales codificados en binario (BCD) o el código americano estándar para intercambio de información ASCII (por sus siglas en inglés)

ARITMETICA PARA BCD

Dos operaciones aritméticas se pueden realizar con datos BCD: suma y resta.El set de instrucciones contiene dos instrucciones que sirven para corregir el resultado de la suma o la resta, de tal modo que siga siendo un BCD.

DAA Ajuste decimal después de la suma. La instrucción DAA va después de la instrucción ADD o ADC para ajustar el resultado de tal modo que sea BCD.

Sintaxis: convierte el contenido del registro AL en un par de valores BCD: si los cuatro bits menos significativos de AL son un número mayor que 9, el indicador AF se pone a 1 y se suma 6 a AL. De igual forma si los cuatro bits más significativos de AL tras la operación anterior son un número mayor que 9, el indicador CF se pone a 1 y se suma 60H a AL.

Ej. Supóngase que DX y BX contienen, cada uno, números de 4 dígitos empacados de BCD. El programa debe realizar la operación siguiente CX = BX + DX, el resultado en CX debe estar codificado en BCD.

MOV DX, 1234H ;carga 1234H en ALMOV BX, 3099H ;carga 3099H en BXMOV AL, BL ; AL=99HADD AL, DL ; AL = 99H+34H=CDDAA ; AL = 33, CF=1MOV CL, AL ; CL=33MOV AL, BH ; AL=30HADC AL, DH ;suma con acarreo AL=30H+12H+1H=43HDAA ;queda igualMOV CH, AL ;resultado de la suma, CX=4333 [CH,CL]

Page 4: Aritmética BCD y ASCII

MICROPROCESADORES Docente: Calixto Rodríguez V.

En este programa la primera instrucción DAA realiza, según su descripción, la siguiente operación: Verifica el contenido de AL previo a la ejecución de la primera DAA, y al encontrar que su nibble inferior es mayor que 9, (es decir AL=CD, D>9), le suma 6 a AL y obtiene AL = CD+06 = D3, después de lo cuál verifica nuevamente el contenido del nuevo AL y al encontrar que el nibble superior es mayor que 9 (AL=D3, y el nibble superior D>9), le suma 60H a este nuevo AL y obtiene AL = D3 + 60 = 33(en realidad esta suma da 133H, pero AL puede contener solo un byte, o sea solo 33H, y el uno de la izquierda será reflejado como acarreo, CF = 1).

La segunda instrucción DAA no realiza ninguna acción porque en el AL previo (AL=43H) ni el nibble superior ni el nibble inferior no son mayores que 9.

ATENCION: La instrucción DAA solo funciona con el registro AL, por esta razón la suma debe ocurrir a razón de 8 bits por vez. Después de sumar los registros AL y DL se ajusta el resultado antes de almacenarlo en CL. Luego se suman los registros AL y DH con acarreo y se vuelve a ajustar el resultado antes de almacenarlo en CH.

DAS Ajuste decimal para la resta Corrige el resultado en AL de la resta de dos números BCD empaquetados, convirtiéndolo también en un valor BCD empaquetado. Si el nibble inferior tiene un valor mayor que 9 o AF es 1, a AL se le resta 6, AF se pone a 1. Si el nibble superior es mayor que 9 o CF es 1, entonces se resta 60H a AL y se activa después CF.

Ej.MOV DX, 1234 ;carga 1234H en ALMOV BX, 3099 ;carga 3099H en BXMOV AL, BL ; AL=99HSUB AL, DL ; AL = 99H-34H=65HDAS ; no realiza ninguna operaciónMOV CL, AL ; CL=65HMOV AL, BH ; AL=30HSBB AL, DH ;resta con préstamo AL=30H-12H=1EHDAS ;AL = 18H (AL=1E-06=18H)MOV CH, AL ;resultado de la suma, CX=1865H, [CH,CL]

En este programa la primera instrucción DAS no realiza ninguna acción, porque en el AL previo ninguno de los dos nibbles es mayor que 9 ( AL=65H)

La segunda instrucción DAS, según su sintaxis, verifica el contenido del AL previo ( AL = 1E), y al encontrar que su nibble inferior es mayor que 9, (es decir E>9), le resta 6 a AL y obtiene AL = 1Eh-06h=18h, después de lo cuál verifica nuevamente el contenido del nuevo AL y al encontrar que el nibble superior no es mayor que 9 (el nuevo AL=18, y el nibble superior 1 no es mayor que 9) entonces no realiza más ninguna acción y AL se queda como AL=18h.

ARITMETICA PARA ASCII

Page 5: Aritmética BCD y ASCII

MICROPROCESADORES Docente: Calixto Rodríguez V.

Las instrucciones aritméticas para ASCII funcionan con números codificados en ASCII . El valor de estos números es entre 30H y 39H para los números del 0 al 9.En las operaciones aritméticas con ASCII se utilizan cuatro instrucciones:AAA-Ajuste ASCII después de la suma.AAD-Ajuste ASCII antes de la división.AAM-Ajuste ASCII después de la multiplicación.AAS-Ajuste ASCII después de la resta

AAA (ajuste ASCII para la suma)

          Sintaxis: AAA      Convierte el contenido del registro AL en un número BCD no empaquetado. Si los cuatro bits menos significativos de AL son mayores que 9 o si el indicador AF está a 1, se suma 6 a AL, 1 a AH, AF se pone a 1, CF se iguala a AF , además  AL pone sus cuatro bits más significativos a 0.

   La suma de dos números de 1 dígito  codificados en ASCII  no dará por resultado ningún dato útil. Por ejemplo, si se suman un 31h y un 39H, el resultado es un 6Ah. Esta suma en ASCII (1+9) produciría un resultado ASCII de dos dígitos, equivalente a un 10 decimal, el cual es un 31h y un 30h en código ASCII. Si se ejecuta la instrucción AAA después de esta suma, el registro AX contendrá un 0100H que, aunque no es un código ASCII, se puede convertir si se le suma 3030H, que genera 3130H, el cual en código ASCII es un 10.

Ejemplo.-

MOV AX, 31 ; carga ASCII 1, AX=0031HADD AL, 39 ; suma ASCII 9, AL=31h + 39h = 6AhAAA ; ajusta el AL previo y devuelve AX=0100hADD AX, 3030 ; respuesta en ASCII, AX=3130H,

En este programa la instrucción AAA, según su sintaxis, después de verificar que el nibble menos significativo de AL es mayor que 9, le suma 6 a AL y obtiene AL=6A+06=70, le suma 1 a AH que era cero, o sea AH=00+01=01H y finalmente pone los cuatro bits más significativos de AL a cero, AL=00h, quedando AX=0100h. Para obtener la respuesta en ASCII, a este resultado se le suma 3030H.

Otro ejemplo

MOV AX, 33 ; carga ASCII 3, AX=0033HADD AL, 32 ; suma ASCII 2, AL=33h + 32h = 65hAAA ; ajusta el AL previo y devuelve AX=0005hADD AX, 3030 ; respuesta en ASCII, AX=3035H

En este caso el nibble menos significativo de AL no es mayor que 9 y no se realiza la primera parte de la sintaxis de AAA, solamente se pone el nible mas significativo de AL a 0, quedando AL=05, en total AX=0005H

AAS (ajuste ASCII para la resta)

          Sintaxis: AAS

Page 6: Aritmética BCD y ASCII

MICROPROCESADORES Docente: Calixto Rodríguez V.

               Convierte el resultado de la sustracción de dos operandos BCD no empaquetados para que siga siendo un número BCD no empaquetado. Si el nibble  inferior de AL tiene un valor mayor que 9, de AL se resta 6, se decrementa AH, AF se pone a 1 y CF se iguala a AF. El resultado se guarda en AL con los bits de 4 a 7 puestos a 0.

MOV DX, 0109 ;carga 0109H en ALMOV BX, 0708 ;carga 0708H en BXMOV AL, BL ; AL=08HSUB AL, DL ; AL = 8H-09H=FFHAAS ;AL=FF-06=F9H, luego AF=1, CF=1, Luego Al pone su nibble

;superior a cero y finalmente se obtiene AL=09MOV CL, AL ; CL=09MOV AL, BH ; AL=07HSBB AL, DH ;resta con préstamo AL=07-01-01=05DAS ;AL=05H, no realiza ninguna operaciónMOV CH, AL ;resultado de la suma, [CH,CL], CX=0509H

AAD (Ajuste ASCII antes de la división)

Sintaxis: AH es multiplicado por 10 y sumado a AL. El resultado de las operaciones anteriores se coloca en AL, y AH se hace igual a cero.

Comments: La instrucción ADD es la única instrucción de ajuste que va antes de la operación (división). AAD requiere que el registro contenga un número BCD no empacado, de dos dígitos (no ASCII) antes de que se ejecute. Después de ajustar el registro AX con ADD se divide entre un número BCD no empacado para generar un resultado de un solo dígito en AL y cualquier residuo quedaría en AH.

Ej.

MOV BL, 9 ; carga dividendoMOV AX, 0702 ; carga divisorAAD ; realiza ajuste. AL=07*10+02=72HDIV BL

AAM (Ajuste ASCIIdespués de la multiplicación)

AH es reemplazado por el resultado de la división de AL entre 10, mientras que AL es ocupado por el residuo de la división.

La instrucción AAM sigue a la instrucción para la multiplicación , después de multiplicar dos números de un dígito BCD.

Ej.

MOV AL, 7 ;carga multiplicandoMOV CL ,5 ;carga multiplicadorMUL CL

Page 7: Aritmética BCD y ASCII

MICROPROCESADORES Docente: Calixto Rodríguez V.

AAM ;AX=0305H