Sie sind auf Seite 1von 7

MICROPROCESADORES Docente: Calixto Rodrguez V.

ARITMETICA BCD Y ASCII, Y ALGUNAS OTRAS INSTRUCCIONES Multiplicacin de 8 bits En la multiplicacin 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 multiplicacin inmediata. Ej. El siguiente programa ejecuta la multiplicacin de AL por BL y el producto aparece en AX, el cual es transferido a BX. MOV MOV MOV MUL MOV BL, 5H CL, 10H AL, CL BL BX, AX

Multiplicacin 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 divisin, al igual que la multiplicacin se realiza con nmeros de 8 o de 16 bits. Estos nmeros son enteros con sigo (IDIV) o sin signo (DIV). El dividendo siempre ser uno de doble de ancho. O sea, en una divisin de 8 bits siempre se divide un nmero de 16 bits entre uno de 8 bits. Divisin de 8 bits Una divisin 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 despus de la divisin y el AH contiene el residuo Ej. MOV AL, NUM MOV AH, 0 DIV NUM1 MOV COC, AL MOV RES, AH ;Obtiene NUM en AL ;se extiende con ceros en AH, el dividendo debe estar ;contenido en AX y ser de 16 bits. ;divide entre NUM1 de 8 bits. ;guarda el cociente en la localidad de memoria ; previamente declarada como COC ; 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 nmero pequeo 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 nmero de 16 bits.

MICROPROCESADORES Docente: Calixto Rodrguez V. FORMATOS DE DATOS DATOS ASCII Los datos en cdigo ASCII (siglas en ingls de American Standard Code for Information Interchange) se suele utilizar para representar caracteres alfanumricos en la memoria de un sistema microprocesador. El cdigo ASCII es de 7 bits y el octavo bit, que es el mas significativo, se emplea para enviar informacin de paridad en algunos sistemas.

Carcteres no imprimibles Nombre Nulo Inicio de cabecera Inicio de texto Fin de texto Fin de transmisin enquiry acknowledge Campanilla (beep) backspace Tabulador horizontal Salto de lnea Tabulador vertical Salto de pgina Retorno de carro Shift fuera Shift dentro Escape lnea de datos Control dispositivo 1 Control dispositivo 2 Control dispositivo 3 Control dispositivo 4 neg acknowledge Sincronismo Fin bloque transmitido Cancelar Fin medio Sustituto Escape Separador archivos Separador grupos Separador registros Separador unidades Dec Hex Car. Dec Hex 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 00 NUL 01 SOH 02 STX 03 ETX 04 EOT 05 ENQ 06 ACK 07 BEL 08 BS 09 HT 0A LF 0B VT 0C FF 0D CR 0E SO 0F SI 10 DLE 11 DC1 12 DC2 13 DC3 14 DC4 15 NAK 16 SYN 17 ETB 18 CAN 19 EM 1A SUB 1B ESC 1C FS 1D GS 1E RS 1F US 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F

Carcteres imprimibles Car. ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? Dec Hex Car. Dec Hex Car. 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ 20 Espacio

MICROPROCESADORES Docente: Calixto Rodrguez V. DATOS BCD La informacin codificada en binario (BCD) se almacena en forma empacada o no empacada en la memoria. La informacin BCD empacada, almacena dos dgitos BCD por cada byte de memoria; la BCD no empacada almacena un dgito de BCD por cada byte. Con los datos de BCD los cdigos binarios vlidos de 4 bits son 0000 (0) a 1001 (9). Ejemplos. Nmero 23 152 Empacado 0010 0011 0001 0101 0010 Desempacado 00000010 00000011 00000001 00000101 00000010

ARITMETICA PARA BCD Y ASCII El 8086 permite el manejo aritmtico de datos decimales codificados en binario (BCD) o el cdigo americano estndar para intercambio de informacin ASCII (por sus siglas en ingls) ARITMETICA PARA BCD Dos operaciones aritmticas 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 despus de la suma. La instruccin DAA va despus de la instruccin 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 nmero mayor que 9, el indicador AF se pone a 1 y se suma 6 a AL. De igual forma si los cuatro bits ms significativos de AL tras la operacin anterior son un nmero mayor que 9, el indicador CF se pone a 1 y se suma 60H a AL. Ej. Supngase que DX y BX contienen, cada uno, nmeros de 4 dgitos empacados de BCD. El programa debe realizar la operacin siguiente CX = BX + DX, el resultado en CX debe estar codificado en BCD. MOV DX, 1234H MOV BX, 3099H MOV AL, BL ADD AL, DL DAA MOV CL, AL MOV AL, BH ADC AL, DH DAA MOV CH, AL ;carga 1234H en AL ;carga 3099H en BX ; AL=99H ; AL = 99H+34H=CD ; AL = 33, CF=1 ; CL=33 ; AL=30H ;suma con acarreo AL=30H+12H+1H=43H ;queda igual ;resultado de la suma, CX=4333 [CH,CL]

MICROPROCESADORES Docente: Calixto Rodrguez V. En este programa la primera instruccin DAA realiza, segn su descripcin, la siguiente operacin: Verifica el contenido de AL previo a la ejecucin 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, despus de lo cul 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 instruccin DAA no realiza ninguna accin porque en el AL previo (AL=43H) ni el nibble superior ni el nibble inferior no son mayores que 9. ATENCION: La instruccin DAA solo funciona con el registro AL, por esta razn la suma debe ocurrir a razn de 8 bits por vez. Despus 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 nmeros BCD empaquetados, convirtindolo tambin 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 despus CF. Ej. MOV DX, 1234 MOV BX, 3099 MOV AL, BL SUB AL, DL DAS MOV CL, AL MOV AL, BH SBB AL, DH DAS MOV CH, AL ;carga 1234H en AL ;carga 3099H en BX ; AL=99H ; AL = 99H-34H=65H ; no realiza ninguna operacin ; CL=65H ; AL=30H ;resta con prstamo AL=30H-12H=1EH ;AL = 18H (AL=1E-06=18H) ;resultado de la suma, CX=1865H, [CH,CL]

En este programa la primera instruccin DAS no realiza ninguna accin, porque en el AL previo ninguno de los dos nibbles es mayor que 9 ( AL=65H) La segunda instruccin DAS, segn 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, despus de lo cul 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 ms ninguna accin y AL se queda como AL=18h. ARITMETICA PARA ASCII Las instrucciones aritmticas para ASCII funcionan con nmeros codificados en ASCII . El valor de estos nmeros es entre 30H y 39H para los nmeros del 0 al 9.

MICROPROCESADORES Docente: Calixto Rodrguez V. En las operaciones aritmticas con ASCII se utilizan cuatro instrucciones: AAA-Ajuste ASCII despus de la suma. AAD-Ajuste ASCII antes de la divisin. AAM-Ajuste ASCII despus de la multiplicacin. AAS-Ajuste ASCII despus de la resta AAA (ajuste ASCII para la suma) Sintaxis: AAA Convierte el contenido del registro AL en un nmero 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 , adems AL pone sus cuatro bits ms significativos a 0. La suma de dos nmeros de 1 dgito codificados en ASCII no dar por resultado ningn dato til. Por ejemplo, si se suman un 31h y un 39H, el resultado es un 6Ah. Esta suma en ASCII (1+9) producira un resultado ASCII de dos dgitos, equivalente a un 10 decimal, el cual es un 31h y un 30h en cdigo ASCII. Si se ejecuta la instruccin AAA despus de esta suma, el registro AX contendr un 0100H que, aunque no es un cdigo ASCII, se puede convertir si se le suma 3030H, que genera 3130H, el cual en cdigo ASCII es un 10. Ejemplo.MOV AX, 31 ; carga ASCII 1, AX=0031H ADD AL, 39 ; suma ASCII 9, AL=31h + 39h = 6Ah AAA ; ajusta el AL previo y devuelve AX=0100h ADD AX, 3030 ; respuesta en ASCII, AX=3130H, En este programa la instruccin AAA, segn su sintaxis, despus 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 ms 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=0033H ADD AL, 32 ; suma ASCII 2, AL=33h + 32h = 65h AAA ; ajusta el AL previo y devuelve AX=0005h ADD 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

MICROPROCESADORES Docente: Calixto Rodrguez V. Convierte el resultado de la sustraccin de dos operandos BCD no empaquetados para que siga siendo un nmero 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 MOV BX, 0708 MOV AL, BL SUB AL, DL AAS MOV CL, AL MOV AL, BH SBB AL, DH DAS MOV CH, AL ;carga 0109H en AL ;carga 0708H en BX ; AL=08H ; AL = 8H-09H=FFH ;AL=FF-06=F9H, luego AF=1, CF=1, Luego Al pone su nibble ;superior a cero y finalmente se obtiene AL=09 ; CL=09 ; AL=07H ;resta con prstamo AL=07-01-01=05 ;AL=05H, no realiza ninguna operacin ;resultado de la suma, [CH,CL], CX=0509H

AAD (Ajuste ASCII antes de la divisin) 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 instruccin ADD es la nica instruccin de ajuste que va antes de la operacin (divisin). AAD requiere que el registro contenga un nmero BCD no empacado, de dos dgitos (no ASCII) antes de que se ejecute. Despus de ajustar el registro AX con ADD se divide entre un nmero BCD no empacado para generar un resultado de un solo dgito en AL y cualquier residuo quedara en AH. Ej. MOV BL, 9 MOV AX, 0702 AAD DIV BL ; carga dividendo ; carga divisor ; realiza ajuste. AL=07*10+02=72H

AAM (Ajuste ASCIIdespus de la multiplicacin) AH es reemplazado por el resultado de la divisin de AL entre 10, mientras que AL es ocupado por el residuo de la divisin. La instruccin AAM sigue a la instruccin para la multiplicacin , despus de multiplicar dos nmeros de un dgito BCD. Ej. MOV AL, 7 ;carga multiplicando MOV CL ,5 ;carga multiplicador

MICROPROCESADORES Docente: Calixto Rodrguez V. MUL CL AAM ;AX=0305H

Das könnte Ihnen auch gefallen