Exponsor

CURSO TÉCNICO INSTALADOR DE ENERGÍA SOLAR TÉRMICA

Visita el siguiente enlace: http://enersolartermica.blogspot.com.es/ ¡No pierdas esta magnifica oportunidad de poder formarte en esta profesión con gran demanda de empleo! Ahora por oferta de lanzamiento y por tiempo limitado puedes adquirir este curso por solo 9,95€, cuando su valor de mercado es de 49€.

domingo, 19 de abril de 2009

INSTRUCCIONES DEL MICROPROCESADOR 8086 ( II )

A continuación se presenta el conjunto de instrucciones disponibles dentro de dos de los primeros grandes microprocesadores "abuelos", el microprocesador 8086 y el microprocesador 8088, junto con las descripciones que les fueron dadas originalmente. Es importante señalar que este conjunto de instrucciones está dado en las mnemónicas (abreviaturas de fácil memorización) que fueron dadas por los fabricantes, porque a fin de cuentas todas estas instrucciones en realidad son instrucciones en lenguaje de "unos" y "ceros", y para poder convertir un programa escrito con estas mnemónicas a un programa binario que la máquina pueda correr directamente es necesario utilizar la ayuda de un lenguaje ensamblador (assembler):
aaaASCCI adjust after additionaad
ASCII adjust before divisionaam
ASCII adjust after multiplication
aasASCII adjust after subtraction
adcadd with carryaddadd without
carryandlogical ANDcall targetcall
procedurecbwconvert byte to word
clcclear carry flagcldclear direction flagcliclear interrupt
flagcmccomplement carry flag
cmp destination, sourcecomparecmps source, destinationcompare stringscmpsbcompare string bytescmpswcompare string wordscwdconvert word to doubleworddaadecimal adjust after additiondasdecimal adjust after subtractiondec destinationdecrementdiv sourceunsigned divideesc immediate, sourceescapehithaltidiv sourcesigned integer divideimul sourcesigned integer multiplyin accumulator, portinput from portinc destinationincrementins destination, portinput from port to stringinsbinput from port to string byteinswinput from port to string wordint immediatecall interrupt service routineintointerrupt on overflowiretinterrupt returnjajump if above; (carry flag = 0) and (zero flag = 0)jaejump if above or equal; (carry flag = 0)jbjump if below (carry flag = 1)jbejump if below or equal; (carry flag = 1) or (zero flag = 1)jcjump if carry; (carry flag = 1)jcxzjump if register cx equals 0jejump if equal; (zero flag = 1)jgjump if greater; (sign flag = overflow flag) and (zero flag = 0)jgejump if greater or equal; (sign flag = overflow flag)jljump if less; (sign flag less than or greater than overflow flag)jlejump if less or equal; (sign flag less than or greater than overflow flag) or (zero flag = 1)jnajump if not above (carry flag = 1) or (zero flag = 1)jnaejump if not above or equal (carry flag = 1)jnbjump if not below; (carry flag = 0)jnbejump if not below or equal; (carry flag = 0) and (zero flag = 0)jncjump if not carry; (carry flag = 0)jnejump if not equal; (zero flag = 0)jngjump if not greater; (sign flag less than or greater than overflow flag) or (zero flag = 1)jngejump if not greater or equal; (sign flag less than or greater than overflow flag)jnljump if not less; (sign flag = overflow flag)jnlejump if not less or equal; (sign flag = overflow flag) and (zero flag = 0)jnojump if not overflow; (overflow flag = 0)jnpjump if not parity; (parity flag = 0)jnsjump if not sign; (sign flag = 0)jnzjump if not zero; (zero flag = 0)jojump if overflow; (oveflow flag = 1)jpjump if parity; (parity flag =1)jpejump if parity even; (parity flag = 1)jpojump if parity odd; (parity flag = 0)jsjump if sign; (sign flag = 1)jzjump if zero; (zero flag = 1)jump targetjump unconditionallylahfload (some) flags into register ahlds register, sourceload pointer and register dslea register, sourceload effective addressles register, sourceload pointer and register eslocklock the buslod sourceload stringlodsbload string bytelodswload string wordloop targetloop on register cxloope targetloop on register cx while equalloopz targetloop on register cx while zero flag = 1loopne targetloop on register cx while not equalloopnz targetloop on register cx while zero flag = 0mov destination, sourcemove datamov destination, sourcemove stringmovsbmove string bytemovswmove string wordmul sourceunsigned multiplicationneg destinationtwo's complemente negationnopno operationnot destinationone's complement negationor destination, sourcelogical ORout port, accumulatoroutput to portouts port, sourceoutput from string to portoutsboutput from string byte to portoutswountput from string word to portpop destinationpop from stackpopfpop flagspush sourcepush onto stackpushfpush flagsrcl destination, countrotate through carry-leftrcr destination, countrotate through carry-rightrep string instructionrepeatrepe string instructionrepeat while equalrepz string instructionrepeat while zero flag = 1repne string instructionrepeat while not equalrepnz string instructionrepeat while zero flag = 0ret immediatereturnretf immediatereturn farretn immediatereturn nearrol destination, countrotate leftror destination, countrotate rightsahfstore ah register to flags registersal destination, countshift arithmetic leftsar destination, countshift arithmetic rightsbb destination, sourcesubtract integers with borrowscasb destinationscan stringscaswscan string wordshl destination, countshift leftshr destination, countshift rightstcset carry flagstdset direction flagstiset interrupt-enable flagstos destinationstore stringstosbstore string bytestoswstore string wordsub destination, sourcesubtracttest destination, sourcetest bitswaitwait until not busyxchg destination, sourceexchangexlat sourcetranslate from tablexlatbtranslate from tablexor destination, sourceexclusive ORVarias de estas instrucciones prácticamente delatan la arquitectura del microprocesador. Las instrucciones shl (shift left) y shr (shift right) delatan la presencia de un registro de desplazamiento en ambas vías, que puede ser capaz de ir desplazando una palabra binaria bit-por-bit ya sea hacia la izquierda o hacia la derecha. Por otro lado, las instrucciones pop y push revelan que se puede operar una pila de datos desde del microprocesador.A manera de ejemplo de cómo se usan estas instrucciones para ir forjando un programa elaborado para este microprocesador 8086 de Intel, tenemos el siguiente fragmento escrito en algún lenguaje ensamblador como Turbo Assembler:
...mov ah,0mov al,ahinc al...en donde la primera instrucción mov "carga" el registro AH con el valor de 0 (o mejor dicho, con el byte de cero, "00000000"), con la segunda instrucción mov se copia el valor almacenado en el registro AH al registro AL, y tras esto incrementa en una unidad el contenido del registro AL con la instrucción inc. El resultado final nos deja ambos registros AL y AH "cargados" con el valor 00000000, "limpiando" ambos registros a cero. (La instrucción mov en realidad debería haberse llamado copy, porque el contenido tomado del registro original no es removido de dicho registro.)Aquí tenemos otro ejemplo:
...mov ax,5mov dx,9add ax,dx...
Este pequeño fragmento "carga" el registro AX con el número 5 (o mejor dicho, con el número binario 00000101), tras lo cual "carga" el registro DX con el número 9 (o mejor dicho, con el número binario 00001001), y en la tercera instrucción suma los contenidos en ambos registros dejando el resultado en el registro AX. En castellano, esto ser resumiría como "poner al acumulador en el estado 5 (cargar sus flip-flops con el equivalente binario del número 5), "poner al registro dx en el estado 9", "y sumar el contenido del registro DX al contenido del acumulador dejando el resultado en el acumulador".

No hay comentarios: