Você está na página 1de 8

2. Programacin. Instrucciones aritmticas.

Suma y resta Los microprocesadores Intel 80x86 disponen de las instrucciones add y sub para realizar sumas y restas respectivamente, estas instrucciones pueden trabajar sobre operandos de longitud byte (8bits),word (16bits), double-word (32bits) y quad-word (64bits). Los operandos pueden ser nmeros con signo o sin signo, o en case de ser un numero c o n s i g n o s t o s s o n a l m a c e n a d o s e n s u f o r m a d e complemento a 2. Se debe observar que estas instrucciones realizan cambios en los bits del registro de banderas, algunas banderas modificadas segn el resultado de la operacin son las banderas SF,ZF, OF, CF, PF y DF. Cada instruccin add tiene la forma: add destino,fuente cuando esta instruccin es ejecutada el valor que se encuentra en fuente es restado del valor que se encuentra en destino, sobrescribiendo el valor que originalmente se encontraba en destino por el nuevo valor resultado de la sustraccin. Multiplicacin y divisin. Para multiplicar en ensamblador es necesario el concurso del registro acumulador "AX", debiendo ser siempre el primer multiplicando (AL para 8 bits y AX para 16). Si multiplicamos dos nmeros de 8 bits, el resultado es un nmero de 16 bits que se guarda en AX, y si multiplicamos dos nmeros de 16 bits, el resultado es otro de 32 bits que se guarda en DX:AX, es decir, la parte alta estara en DX. Como segundo operador se puede usar un registro o una direccin de memoria que deberemos acompaar con su correspondiente "typecast", no vale un operador inmediato. Igualmente, para dividir necesitamos del registro acumulador, que siempre ser el dividendo, el divisor siempre se indica en la orden "DIV". Adems ahora obtenemos el resto que estar en AH si el divisor es de 8 bits y en DX si es de 16. Si, por ejemplo, el divisor es de 16 bits, automticamente adjudica el dividendo al par DX:AX, cuyo cociente estara en AX y el resto en DX. Una caracterstica que diferencia a estas dos operaciones matemticas con el resto es el uso de los operadores IMUL e IDIV en el caso de que estemos trabajando con nmeros con signo. Ejemplo:

Para multiplicar 100x99 metemos el multiplicando en AL=99 y el multiplicador en AH=100 (el multiplicador puede ir en cualquier otro sitio, pero el multiplicando no). Idntico para 100x-99. Pero aqu deberemos usar IMUL, puesto que usamos nmeros con signo. Para dividir 535353 por 1000, puesto que 535353d=82B39h es un nmero de 32 bits, necesitamos meterlo en DX:AX, la parte alta en DX=8 y la parte baja en AX=2B39h, que dividiremos por 1000, que es una palabra. Por tanto, el resultado queda el cociente en AX=535 y el resto en DX=353. Ahora vamos a dividir 535 por 1000. Ya tenemos AX=535d=217h puesto que es el cociente de la anterior divisin, pero ojo! 1000 es una palabra y seguimos teniendo DX=353d=161h, de modo que si dividiramos directamente por 1000, que es una palabra, estaramos dividiendo DX:AX=1610217h por 1000d, por lo que debemos limpiar DX con "XOR DX, DX" para dividir DX:AX=00000217h por 1000d. Por tanto, cociente en AX=0 y resto en DX=535. Para dividir ahora 535 por 100 (que ya es un byte), no nos interesa lo que haya en DX, por lo que no es necesario limpiarlo (limpindolo no adulteramos el resultado pero insertamos una operacin superflua).

Instrucciones Lgicas. La lgica booleana es importante en el diseo de circuitos y tiene un paralelo en la lgica de programacin. Las instrucciones para lgica booleana son AND, OR, XOR, TEST y NOT, que pueden usarse para poner bits en 0 o en 1 y para manejar datos ASCII con propsitos aritmticos. El formato general para las operaciones booleanas es: [etiqueta :] | operacin | {registro/memoria}, {registro/memoria/inmediato}| El primer operando se refiere a un byte o palabra en un registro o memoria y es el nico valor que es cambiado. El segundo operando hace referencia a un registro o a un valor inmediato. La operacin compara los bits de los dos operandos referenciados y de acuerdo con esto establece las banderas CF, OF, PF, SF y ZF. AND. Si ambos bits comparados son 1, establece el resultado en 1. Las dems condiciones dan como resultado 0. OR. Si cualquiera (o ambos) de los bits comparados es 1, el resultado es 1. Si

ambos

bits

estn

en

0,

el

resultado

es

0.

XOR. Si uno de los bits comparados es 0 y el otro 1, el resultado es 1. Si ambos bits comparados son iguales (ambos 0 o ambos 1), el resultado es 0. TEST. Establece las banderas igual que lo hace AND, pero no cambia los bits de los operandos. Las operaciones siguientes AND, OR y XOR ilustran los mismos valores de bits como operandos: AND OR XOR 0101 0101 0101 0011 0011 0011 Resultado: 0001 0111 0110 Es til recordar la siguiente regla: el empleo de AND con bits 0 es 0 y el de OR con bits 1 es 1. La instruccin NOT. La instruccin NOT solo invierte los bits en un byte o palabra en un registro o en memoria; esto es, convierte los ceros en unos y los unos en ceros. El formato general es: | [etiqueta:] | NOT | {registro/memoria} | Por ejemplo si el AL contiene 11000101, la instruccin NOT AL cambia el AL a 00111010 (el resultado es el mismo de XOR AL, 0FFH). Las banderas no son afectadas.

Operaciones bsicas sobre archivos de disco. No lo encuentro D:

Procedimientos y Macros. Procedimientos externos. Este tipo de procedimientos permiten crear bibliotecas de funciones de ensamblador, permitiendo a su vez asemejarse ms a la programacin de alto nivel. Ya que los procedimientos deben estar por completo dentro de un segmento, ENDP define el final de un procedimiento antes que ENDS defina el final de un segmento. La organizacin de un programa en procedimientos proporciona los beneficios siguientes:

1. Reduce la cantidad de cdigo, ya que un procedimiento comn puede ser llamado desde cualquier lugar en el segmento de cdigo. 2. Fortalece la mejor organizacin del programa. 3. Facilita la depuracin del programa, ya que los errores pueden ser aislados con mayor claridad. 4. Ayuda en el mantenimiento progresivo de programas, ya que los procedimientos son identificados de forma rpida para su modificacin. Los procedimientos externos, a diferencia de los internos, se declaran en mdulos o programas separados al programa donde el procedimiento es llamado, en otras palabras, la llamada al procedimiento se encuentra en un programa y el procedimiento en otro. Para poder utilizar procedimientos externos, es necesario que sean declarados como pblicos en el programa donde se encuentran y que sean llamados como externos en el programa donde sern usados. Se debe contar con tres directivas de ensamble: .PUBLIC para declarar los procedimientos como pblicos, .EXTERN para indicar que el procedimiento que se va a usar est fuera del programa y .INCLUDE para enlazar el programa que contiene los procedimientos con el programa que los llama. Con estas capacidades, es fcil crear bibliotecas de procedimientos y macros que puedan ser utilizados constantemente por los dems programas, ahorrando con ello tiempo de programacin al reutilizar cdigo fuente. Procedimientos Internos. Procedimiento o subrutina. Es un grupo de instrucciones que, por lo general, desempean una tarea. Un procedimiento es una seccin de un programa que se puede volver a utilizar y que se almacena en memoria, pero se emplea tan a menudo como se necesite. Esto ahorra espacio en la memoria y facilita el desarrollo de la programacin. La desventaja de usar procedimientos es que la computadora requiere tiempo para ligarse con el procedimiento y regresar desde l. La instruccin CALL liga al procedimiento y la instruccin RET regresa del procedimiento. Ejemplo: SUMS PROC NEAR ADD AX, BX ADD AX, CX ADD AX, DX SUMS ENDP SUMS1 PROC FAR

ADD AX, BX ADD AX, CX ADD AX, DX SUMS ENDP Cuando se comparan estos dos procedimientos, la nica diferencia es el cdigo de operacin de la instruccin para el retorno. Para NEAR el cdigo de operacin es C3H; para FAR es CBH. Cuando un procedimiento debe ser global, se debe definir como FAR. Los que realizan tareas locales se suelen definir como NEAR. Las principales ventajas en el uso de procedimientos son: permiten una codificacin ms limpia y compacta, es decir el cdigo fuente es ms pequeo; tambin permiten el ahorro de memoria, esto es porque un mismo procedimiento puede ser llamado varias veces en el mismo programa y slo requiere memoria una vez. Las partes que componen a un procedimiento son: Declaracin del procedimiento Cdigo del procedimiento Directiva de regreso Terminacin del procedimiento

Macros. Una macro es un grupo de instrucciones que efectan una tarea. Al ser llamada se inserta en el programa como nuevo cdigo que contiene una secuencia de instrucciones. Se utilizan las directivas MACRO y ENDM para delimitar una macrosecuencia. El primer enunciado de una macro es el que contiene el nombre y sus parmetros relacionados con ella. Por ejemplo TRANSF MACRO A,B que define la macro TRANSF. El ltimo enunciado de una macro es la instruccin ENDM que es una lnea por s sola. Es necesario definir la macro antes de utilizarla. Una macro puede llamar a otra. Variable local en una macro. Es aquella que aparece dentro del cuerpo de la macro, pero no est disponible fuera de ella. Para definir una variable local se utiliza la directiva LOCAL. Se puede utilizar para declarar etiquetas de saltos que requieren ser llamados varias veces y evita que marque error al expandir la macro. Ejemplo:

MINIMO MACRO dato1, dato2, resultado LOCAL ya_esta MOV AX,dato1 CMP AX,dato2 ; es dato1 el menor? JB ya_esta ; s MOV AX,dato2 ; no, es dato2 ya_esta: MOV resultado,AX ENDM La etiqueta ya_esta solo aparecer en la definicin de la macro, pero al expandirse ser sustituida por ??0000, ??0001, etc. Parmetros Formales y Parmetros Actuales. Cuando se llama a una macro se le pueden pasar opcionalmente un cierto nmero de parmetros de cierto tipo. A estos parmetros se le denominan parmetros actuales. En la definicin de la macro, dichos parmetros aparecen asociados a ciertos nombres, cuya nica funcin es permitir distinguir unos parmetros de otros e indicar el orden en que son entregados, estos son los parmetros formales. Al expandir la macro los parmetros formales son sustituidos por sus parmetros actuales. Es una buena prctica utilizar PUSH y POP al inicio y al final de las MACROS para mantener los valores de los registros, en caso de ser necesario. Se le llama macro interna a aquella que se declara y se llama dentro del mismo programa. Macros externas. Una macro externa es aquella que es declarada en un archivo externo. Estos archivos tambin son conocidos como bibliotecas de macrosecuencias y pueden ser llamados con la directiva INCLUDE. Existe una directiva que permite que el archivo sea ledo una sola vez en la primera pasada, sta directiva es IF1 ENDIF. En s la definicin de la m acro no consume memoria, por lo que es indiferente declarar muchas macros a ninguna.

Funcionamiento del Puerto Serial. No ENCUENTRO D:

Funcionamiento del Puerto USB. Nop

Programa. En este programa imprimimos las variables que asignamos en este caso DANITZA Y MERARI desplegndolas de colores y despus se vuelve a imprimir en forma contraria MERARI Y DANITZA. jmp inicia

cadena1: db "DANITZA",13,10,"$" cadena2: db "Y",13,10,"$" cadena3: db "MERARI",13,10,"$"

inicia:

mov dx,cadena1 push dx mov ah,9 mov bh,0 mov cx,7 mov bl,4h int 10h int 21h

mov dx,cadena2 push dx mov ah,9 mov bh,0 mov cx,1 mov bl,6h int 10h int 21h

mov dx,cadena3 push dx mov ah,9 mov bh,0 mov cx,6 mov bl,5h int 10h int 21h

mov cx, 3

bucle: pop dx int 21h loop bucle

Bibliografa:
http://www.abreojosensamblador.net/Productos/AOE/html/Pags/Cap06.html

Você também pode gostar