Arquitectura de computadoras

Arquitectura de computadoras gy trcdn12_3 1 ACk’a6pR 03, 2010 | 9 pagos SINTAXIS. Nombre de la instrucción Operando 1, Operando 2, Operando 3, Operando 4, El nombre de la instrucción está formada por 2 0 3 letras, los operandos pueden ser registros, constantes o direcciones de memoria. La cantidad de operandos dependerá de la instrucclón.

Por ejemplo: MOV AL, [10001 Esta instrucción indica que se copie el valor de la porción de la memoria que esté en la ubicación 1000 (En hexadecimal) a la parte baja del registro AX (AL). Cuando un operando es un valor de una dirección de memoria, esta dirección se escribe entre orchetes, recordar que el operando 1 es el destino y el operando 2 es el origen.

Y cuando es una constante de enderá del ensamblador, en el c org crear y editar aplicaci es to View nut*ge como hexadecimales n los que las constantes s También se puede to un registro, por ejemplo: MOV AL, [DI] ama que sirve para OS) se interpretarán los se interpretará Oria apuntado por DI está apuntado al valor que está en la memoria que será copiado al registro AL. El nombre MOV viene de la palabra move, que es una palabra del ingles que significa mover. Justamente la instrucción mencionada significa, mover el valor apuntado por DI

También se puede copiar el valor de un registro a otro MOV AL, AL En este caso se copia el valor de BL a AL Igualmente se puede copiar el valor de la parte baja de un registro a la part Swlpe to vlew nexr page parte alta de otro registro MOV CH, DL Así como también operar con las partes altas MOV AH, DH Inclusive se puede copiar el valor de un registro a una dirección de memoria MOV [1000], AL Igualmente apuntada la dirección de memoria a DI MOV [DI], AL Y también con los registros completos (Solamente completos en el procesador 8086) MOV AX, DX También trabajar con los registros completos para todos los rocesadores de 32 bits MOV EBX, EDX En éste caso mueve la totalidad del registro DX a la totalidad del registro BX, en éste caso se está trabajando con los registros en forma extendida (32 bits), pero hay que tener precaución ya que el procesador 8086 no interpretará correctamente ésta instrucción (El procesador 8086 es obsoleto por ésta desventaja y otras más, por ejemplo sólo puede direccionar 1 MB), además el debug no puede interpretar ésta instrucción No se puede realizar lo siguiente porque no se pueden pasar valores en la memoria sin la intervención de un registro, además o se ha especificado el tamaño MOV [1000], [2000] Igualmente no se puede hacer lo siguiente MOV [DI], [1000] Así como también lo siguiente MOV [DI], [SI] Sin embargo lo siguiente es correcto MOV [1000], AX pero no lo siguiente porque no se está especificando el tamaño MOV [SI], I F Lo correcto seria lo siguien Si se quiere transferir un b una doble palabra (32 bits) MOV dword [SI], 1 F Directivas.

Una directiva es una comando incrustado en el código fuente, que le ensamblador reconoce y actúa en base a esta. Las directivas no se llevan a cabo en tiempo de ejecución, mientras que las instrucciones si. Las directivas pueden definir variables, macros y procedimientos. Pueden asignar nombres a los segmentos de memoria y realizar muchas otras tareas de mantenimiento relacionadas con el ensamblador. En masm, las directivas no son sensibles a mayúsculas/minúsculas. Masm reconoce a . data, . DATAy a . Data como equivalentes. Ejemplo: La directiva DWORD indica al ensamblador que debe reservar espacio en el programa para una variable de tipo doble palabra.

La instrucción MOV se lleva a cabo en tiempo de ejecución, copiando el contenido de miVAR al registro EAX; MiVAR DWORD 26 Mov eax,miVAR INSTRUCCIONES ; directiva DWORD instrucción MOV Una instrucción es un enunciado que se vuelve ejecutable cuando se ensambla un programa. El ensamblador traduce instrucciones en bytes de lenguaje maquina, para que la CPU los cargue y los lleve a cabo en tiempo de ejecución, una instruccion contiene cuatro partes básica: *Etiqueta (opcional) *nemónico de instrucción (requerido). *operando(s) (por lo general, son requeridos). *comentario (opcional). Etiqueta: una etiqueta es un identificador que actúa como marcador de posición para nes y los datos. Una etiqueta que se coloca iust como marcador de posición para las instrucciones y los datos.

Una etiqueta que se coloca justo antes de una instrucción, representa la dirección de esa instrucción. De manera similar, una etiqueta que se coloca justa antes de una variable, representa la dirección de esa variable. Etiquetas: de datos: una etiqueta de datos identifica la ubicación de una variable y proporciona una manera conveniente de hace referencia a la variable dentro del código. El siguiente ejemplo define a una variable llamada cuenta: Cuenta DWORD 100 El ensamblador asigna una dirección numérica a cada etiqueta. Es posible definir varios elementos de dartos después de una etiqueta. En el siguiente ejemplo la etiqueta arreglo define la ubicación del primer numero (1024).

Los demás números que le siguen en la memoria van inmediatamente después: Arreglo DWORD 1024,2048 DWORD 4096, 8192 ETIQUETAS DE CÓDIGO: una etiqueta en el área de código de un programa (en donde se encuentran las instrucciones) debe terminar con un carácter de dos puntos En este contexto las etiquetas se utilizan como destlnos de las instrucclones de saltos y de ciclos. por ejemplo la siguiente instrucción JMP(salto) trasfiere el control a la ubicación marcada por la etiqueta llamada destino, con lo cual se crea un ciclo: Destino: Mov ax, bx Jmp destino Una etiqueta de código puede compartir la misma línea con una instrucclón, o pude están en una linea por si sola; LI. mov ax,bx instrucción, o pude están en una línea por si sola; NEMÓNICO DE INSTRUCCIÓN: un nemonico de instrucción es una palabra corta que identifica una instrucción.

En ingles, un nemonico es un dispositivo que ayuda a la memoria. De manera similar los nemónicos de instrucciones en lenguaje ensamblador, como mov, add y sub, proporcionan sugerencias acerca del tipo de operación que realizan: Sub MLII jrnp call mueve (asigna) un valor a otro. suma dos valores. esta un valor de otro. multiplica dos valores. salta a una nueva ubicación. llama a un procedimiento. OPERAN DOS: las instrucciones en lenguaje ensamblador pueden tener de cero a tres operandos, dad ujno de los cuales puede ser un registro, un operando de memoria, una expresión constante o un pueto de E/S. INSTRUCCIONES ARITMÉTICAS Instrucciones INC Y DEC.

Las instrucciones INC (incremento) y DEC (decremento) sumanl y restan 1 de un solo operando, respectivamente. La sintaxis es. INC reg/mem DEC reg/mem A continuación se muestran algunos ejemplos: . data mjpalabra WORD 1000h . code inc mi palabra mov bx,miplabra dec bx Instrucción ADD La instrucción add suma u ;1001h e origen con uno de suma se almacena en el operando de destino. El conjunto de posible operando es el mismo que para la instrucción mov. Instrucción SIJB. La instrucclón sub resta un operando de origen a un operando de destino. El conjunto de posibles operaciones es le mismo que para las instrucciones add y mov la sintaxis es: SUB dest, origen.

Instrucción NEG. La instrucción neg invierte el signo de un numero, convirtiéndolo en su complemento a dos. Se permiten los siguientes operandos: Neg rreg Neg mem (Recuerde que para encontrar el complemento a dos de un umero se invierten todos los bits en el operando de destino y se le suma 1). Instrucciones de multiplicación y división Las instrucciones mul e imul realizan operaciones de multiplicación de enteros con y sin signo, respectivamente, la instrucción div realiza la división de enteros sin signo, e IDIV realiza la división de enteros con signo. Instrucción MUL La instrucción MUL (multiplicación sin signo) viene en tres versiones.

La primera multiplica un operando de 8 bits por AL, la segunda multiplica un operando de 16 bits por AX, la tercera multiplica un operando de 32 bits por EAX El multiplicador y el ultiplicando son del mismo tamaño, y el producto es del doble de su tamaño. Los tres formatos aceptan operando de registro y de memoria, pero no operando inmediatos. Instrucción IMIJL. La instrucción ‘MUL (multiplicación con signo) realiza la multiplicación de enteros con signo, preservando el signo del producto. El conjunto de instrucciones ia-32 soporte tres formatos para esta preservando el signo del producto. El conjunto de instrucciones ia-32 soporte tres formatos para esta instrucción. Un operando, dos operando y tres operando. En el formato operando, el multiplicador y el multiplicando son del mismo tamaño y el roducto es del doble de su tamaño. Formatos de un operando.

Los formatos de un operando almacenan el producto en el acumulador (AX DX:AX O EDX:EAX): La instrucción DIV. La instrucción DIV (división sin signo) realiza la división de enteros son sino de 8 bits, 1 6 bits y 32 bits. El registro individual y operando de memoria es el divisor. Los formatos son: DIV r/m8 DIV r/m15 DIV r,’T132. Divisan de enteros con signo. La división de enteros con signo es casi idéntica a la división sin signo, con una importante diferencia: el dividendo implicado debe tener una extensión completa del singo antes de realizar a división. Primero veremos las instrucciones para la extension del signo. Después las aplicaremos a la instrucción de división de enteros con signo, IDIV La instrucción IDIV.

La instrucción idiv (división con signo) realiza una división de enteros con signo, usando los mismo operando que div. Antes de ejecutar la división de 8 bits, se debe extender por completo el signo del dividendo (AX). El residuo siempre tiene el mismo signo que el dividendo. INSTRUCCIONES DE TRASFERENCIA DE DATOS. Las instrucciones que se encargan de mover datos en relación con la memoria se pueden categorizar por tareas específicas. Existen 5 diferentes categor(as, que son: *las que trasfieren datos d específicas. Existen 5 diferentes categorías, que son: *las que trasfieren datos de un registro a otro o entre la memoria y los registros. *las que preparan registro para accesar a una localidad de memoria. las que manipulan la pila. *las que mueven grandes bloques de datos. *las que interactuan con dispositivos periféricos a través de los puertos. La instrucción de movimiento más común es MOV. Instrucción MOV: La instrucción MOV copia datos de un operando a un operando destino. Es instrucclón, conocida como trasferencia de datos, se tiliza en casi todos los programas. Su formato básico muestra que el primero operando es el destino y el segundo es el origen: MOV destino, origen El contenido del opérando de destino cambia, pero el operando de origen no. El movimiento de datos de derecha a izquierda es similar a la instrucción de asignación en c++ o java.

Destino- origen; (En casi todas las instrucciones en lenguaje ensamblador, el operando izquierdo es el destino y el operando derecho es el origen. ) MOV es bastante flexible en el uso de sus operandos, siempre y cuando se observen las siguientes reglas: *Ambos operandos deben ser del mismo tipo. ambos operandos no pueden ser operandos de memoria. *CS, EIP e IP no pueden ser operandos de destino *un valor inmediato no puede moverse a un registro de segmento. INSTRUCCION MOVZX. La instrucción MOVZX (mover con extensión de ceros) copia el contenido de un operando de origen a un operando de destino, y extiende con ceros el valor hasta 16 0 32 bits.

Esta instruc un operando de destino, y extiende con ceros el valor hasta 16 0 32 bits. Esta instrucción se utiliza solo con enteros sin signo, hay tres variantes: INSTRUCCION MOVSX. La instrucción MOVSX (mover con extensión de signo) copia el ontenido de un operando de origen en un operando de destino, y extiende con signo el valor hasta 16 0 32 bits. Esta instrucción solo se utiliza con enteros con signo. Para extender con signo un operando, se toma el bit más alto del operando más pequeño y e repite (replica) este bit a lo largo de los bits extendidos en el operando de destino. Suponga que el valor de 8 bits 1000111 lb se mueve a un destino de 16 bits: Movsx ax, 1000111 lb Los 8 bits inferiores se copian con están.

El bit superior del origen se copia en cada una de las posiciones de los 8 bits superiores del destino. INSTRUCCIONES LAHF Y SAHF. La instrucción LAHF (cargar banderas de estado en AH) copia el byte inferior del registro EFLAGS a AH. Se copian las siguientes banderas: signo, cero, acarreo auxiliar, paridad y acarreo. Mediante el uso de esta instrucción, podemos guardar fácilmente una copia de las banderas en una variable. La instrucción SAHF (almacenar AH en las banderas de estado) copia AH al byte inferior del registro EFLAGS. Por ejemplo, puede obtener los valores de las banderas que se hayan guardado antes de una variable. INSTRUCCION XCHG. La instrucción XCGH (intercambiar datos) intercambia el contenido de dos operandos.