Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad

Lenguajes de interfaz Unidad 2 apuntes, Diapositivas de Interfaz entre Informática y Economía

Ajustes. Al guardar un valor dentro de un registro de memoria, este se almacena como un valor en ASCII, por lo que si se realiza una operación aritmética con los valores almacenados el resultado que devolverá el programa no será el de la operación, sino el del valor ASCII que se encuentra en la ubicación que describe el resultado de dicha operación aritmética. Para poder conseguir el resultado de la operación y poder desplegarlo es necesario utilizar unos métodos que posee el lenguaje ensamblad

Tipo: Diapositivas

2019/2020

Subido el 02/06/2020

lizbeth-moreno-3
lizbeth-moreno-3 🇲🇽

1 documento

1 / 10

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Ajustes.
Al guardar un valor dentro de un registro de memoria, este se almacena como un valor en ASCII, por
lo que si se realiza una operación aritmética con los valores almacenados el resultado que devolverá
el programa no será el de la operación, sino el del valor ASCII que se encuentra en la ubicación que
describe el resultado de dicha operación aritmética. Para poder conseguir el resultado de la
operación y poder desplegarlo es necesario utilizar unos métodos que posee el lenguaje
ensamblador llamados ajustes, los cuales son los siguientes:
Ajuste de Suma AAA (ASCII Adjust After Addition)
Esta instrucción convierte el contenido del registro AL a un número decimal codificado en binario o
BCD por sus siglas en inglés, lo que hace es que en caso de que los cuatro bits de AL contengan un
valor mayor a 9, se sume 6 a este valor y se sume 1 a AH.
Ejemplo:
ADD al,bl -> Instrucción que suma los valores contenidos en al y bl.
AAA -> Ajuste ASCII para la suma.
Ajuste de Resta AAS (ASCII Adjust After Substraction)
Esta instrucción convierte el resultado de una substracción a un numero BCD, para esto si el valor
de AL es mayor que 9, se le restan 6 y se hace un decremento a AH, el resultado se guarda en AL con
los bits 4 a 7 puestos a 0.
Ejemplo:
SUB al,bl -> Instrucción que resta los valores contenidos en al y bl.
AAS -> Ajuste ASCII para la resta.
Ajuste de Multiplicación AAM (ASCII Adjust After Multiplication)
Corrige el resultado en AX del producto de dos números convirtiéndolo en un valor BCD, el cual sitúa
el cociente AL/10 en AH y el resto en AL.
Ejemplo:
MUL bl -> Instrucción que multiplica los valores en ax y bl.
AAM -> Ajuste ASCII para la multiplicación.
pf3
pf4
pf5
pf8
pf9
pfa

Vista previa parcial del texto

¡Descarga Lenguajes de interfaz Unidad 2 apuntes y más Diapositivas en PDF de Interfaz entre Informática y Economía solo en Docsity!

Ajustes. Al guardar un valor dentro de un registro de memoria, este se almacena como un valor en ASCII, por lo que si se realiza una operación aritmética con los valores almacenados el resultado que devolverá el programa no será el de la operación, sino el del valor ASCII que se encuentra en la ubicación que describe el resultado de dicha operación aritmética. Para poder conseguir el resultado de la operación y poder desplegarlo es necesario utilizar unos métodos que posee el lenguaje ensamblador llamados ajustes, los cuales son los siguientes: Ajuste de Suma AAA (ASCII Adjust After Addition) Esta instrucción convierte el contenido del registro AL a un número decimal codificado en binario o BCD por sus siglas en inglés, lo que hace es que en caso de que los cuatro bits de AL contengan un valor mayor a 9, se sume 6 a este valor y se sume 1 a AH. Ejemplo: ADD al,bl - > Instrucción que suma los valores contenidos en al y bl. AAA - > Ajuste ASCII para la suma. Ajuste de Resta AAS (ASCII Adjust After Substraction) Esta instrucción convierte el resultado de una substracción a un numero BCD, para esto si el valor de AL es mayor que 9, se le restan 6 y se hace un decremento a AH, el resultado se guarda en AL con los bits 4 a 7 puestos a 0. Ejemplo: SUB al,bl - > Instrucción que resta los valores contenidos en al y bl. AAS - > Ajuste ASCII para la resta. Ajuste de Multiplicación AAM (ASCII Adjust After Multiplication) Corrige el resultado en AX del producto de dos números convirtiéndolo en un valor BCD, el cual sitúa el cociente AL/10 en AH y el resto en AL. Ejemplo: MUL bl - > Instrucción que multiplica los valores en ax y bl. AAM - > Ajuste ASCII para la multiplicación.

Ajuste de División AAD (ASCII Adjust After Division) Convierte dos números BCD contenidos en AH y AL en un dividendo de un byte que queda en AL, después de esto AH queda como cero. Esto es necesario para poder realizar una división, por lo que se utiliza esta instrucción antes de la operación dividir a diferencia de los demás ajustes. Ejemplo: AAM - > Ajuste ASCII para la división. DIV bl - > Instrucción que divide los valores en ax y bl. Ciclos numéricos. Como en cualquier otro lenguaje de programación, hay ocasiones en las que es necesario hacer que el programa no siga una secuencia lineal, sino que repita varias veces una misma instrucción o bloque de instrucciones antes de continuar con el resto del programa, es para esto que se utilizan los ciclos. Existen 5 tipos de ciclos predefinidos en ensamblador, aunque también se pueden crear ciclos personalizados por medio de instrucciones de salto las cuales se verán en la sección 2.6 de este manual. Los ciclos predefinidos de ensamblador son los siguientes: LOOP: Esta función decrementa el valor del registro contador CX, si el valor contenido en CX es cero ejecuta la siguiente instrucción, en caso contrario transfiere el control a la ubicación definida por la etiqueta utilizada al momento de declarar el ciclo. Ejemplo:

  • mov cx,25 : Número de veces que se repetirá el ciclo, en este caso 25.
  • ciclo: Etiqueta que se utilizará como referencia para el ciclo loop.
  • int 21h: Instrucción contenida dentro del ciclo (puede contener más de una instrucción).
  • loop: Ciclo loop que transferirá el control a la línea de la etiqueta ciclo en caso de que CX no sea cero. LOOPE: Esta función decrementa el valor del registro contador CX, si el valor contenido en CX es cero y ZF es diferente de uno ejecuta la siguiente instrucción, en caso contrario transfiere el control a la ubicación definida por la etiqueta utilizada al momento de declarar el ciclo.

Captura básica de cadenas. Dentro del lenguaje ensamblador no existe el tipo de dato cadena (string en otros lenguajes), por lo que para utilizarla es necesario tratar a las cadenas como un conjunto de caracteres reservados bajo el nombre de una sola variable. El lenguaje ensamblador cuenta con instrucciones que por su naturaleza sirven para el manejo de cadenas, estas son: MOVSB: Mueve un byte desde una localidad de memoria hasta otra. MOVSW: Mueve una palabra desde una localidad de memoria hasta otra. LODSB: Carga en la parte baja del registro acumulador (AL) el valor de la localidad de memoria determinada por DS:SI. LODSW: Carga en el registro acumulador (AX) el valor de la localidad de memoria determinada por DS:SI. Ejemplo:

Comparación y prueba. La comparación y prueba son instrucciones especiales con las que cuenta el microprocesador, estas son CMP y TEST respectivamente. Comparación (CMP): Esta instrucción compara los dos valores que se le den como parámetros y modifica las banderas de signo (SF), de cero (ZF) y de acarreo (CF) según sea necesario. Ejemplo: CMP ah,10h: Compara el valor almacenado en el registro ah con el valor 10 hexadecimal. Prueba (TEST): Verifica que los valores que se le introduzcan como parámetros sean iguales relizando la operación lógica AND, no almacena ningún resultado pero modifica banderas según sea necesario. Saltos. Los saltos son instrucciones que permiten al programador cambiar el orden de ejecución del programa según sea necesario, dentro de ensamblador existen dos tipos de salto principales: condicionales e incondicionales. Saltos Incondicionales: Los saltos incondicionales se utilizan mediante la instrucción JMP, la cual transfiere el control a la línea especificada después de la palabra JMP, la cual puede ser un valor directo o una etiqueta. También se puede contar como un salto incondicional la instrucción CALL, la cual llama una procedimiento y al terminarla devuelve el control a la línea siguiente de donde se inicio la llamada a procedimiento, pero eso se ve con más detalle en la sección 3.1. Ejemplo:

  • Salto: Etiqueta a la que se hará referencia para el salto incondicional.
  • JMP Salto: Instrucción que indica que el flujo del programa continuara desde la ubicación de la etiqueta Salto. Saltos Condicionales: Los saltos condicionales transfieren el control del programa a la ubicación que se les dé como parámetro si al hacer una comparación se cumple la condición establecida en el salto, los saltos condicionales son los siguientes: JA (Jump if Above): Salta cuando el valor es superior, su condición es equivalente al salto JNBE (Jump if Not Below or Equal).

Ciclos condicionales. Dentro de la programación existen ocasiones en la que es necesario ejecutar una misma instrucción un cierto número de veces, el cual no siempre es conocido por el programador o puede cambiar durante la ejecución del programa, para lo que existen los ciclos condicionales, los cuales una vez se cumpla la condición que tienen establecida, dejaran de ejecutarse como ciclo y permitirán que el programa continúe con su flujo normal. En ensamblador no existen de forma predefinida estos ciclos, pero pueden crearse haciendo uso de los saltos incondicionales, generando ciclos que se repetirán hasta que se cumpla la condición definida por el programador. Ejemplo:

  • mov al, 0: Asigna el valor cero al registro al.
  • ciclo: Etiqueta a la que se hará referencia para el ciclo condicional.
  • INC al: Aumenta en 1 el valor del registro al.
  • CMP al, bl : Comparación entre el valor almacenado en al y el almacenado en bl.
  • JL ciclo: Instrucción que indica que el flujo del programa continuara desde la ubicación de la etiqueta ciclo si el valor de al es menor al de bl. Incremento y decremento. En ensamblador existen dos instrucciones que cumplen con el propósito de aumentar o reducir el valor contenido dentro de un registro. INC: Incrementa en uno el valor contenido dentro del registro que se le dé como parámetro. INC al: Aumenta en 1 el valor del registro al. DEC: Reduce en uno el valor contenido dentro del registro que se le dé como parámetro. DEC al: Reduce en 1 el valor del registro al. Captura de cadenas con formato. El capturar cadenas con formato permite el movimiento, comparación o búsqueda rápida entre bloques de datos, las instrucciones son las siguientes: MOVC: Esta instrucción permite transferir un carácter de una cadena.

MOVW:

Esta instrucción permite transferir una palabra de una cadena. CMPC: Este comando es utilizado para comparar un carácter de una cadena. CMPW: Esta instrucción es utilizada para comparar una palabra de una cadena. SCAC: Esta instrucción permite buscar un carácter de una cadena. SCAW: Esta instrucción se utiliza para buscar una palabra de una cadena. LODC: Esta instrucción permite cargar un carácter de una cadena. LODW: Esta instrucción es utilizada para cargar una palabra de una cadena. Desplazamiento y rotación. Las instrucciones de desplazamiento son cuatro: shl, shr, sar y sal; y su objetivo es desplazar los bits de un operando un determinado número de posiciones a la izquierda o a la derecha. La estructura de los operandos manejados por estas instrucciones y su significado es idéntico para las cuatro instrucciones.

  • SHL (Shift Left = desplazamiento a la izquierda) Se desplazan a la izquierda los bits del operando destino tantas posiciones como indique el operando fuente. El desplazamiento de una posición se realiza de la siguiente forma: el bit de mayor peso del operando se desplaza al bit CF del registro de estado, el resto de los bits se desplazan una posición hacia la izquierda, y la posición de menor peso se rellena con un 0
  • SAL (Shift Arithmetic Left = desplazamiento aritmético a la izquierda) El objetivo de un desplazamiento aritmético a la izquierda es multiplicar un operando, interpretado con signo, por una potencia de 2. Para llevar a cabo este tipo de desplazamiento, hay que desplazar los bits del operando hacia la izquierda introduciendo ceros por su derecha. Nota: En realidad, este tipo de desplazamiento es idéntico al llevado a cabo por la instrucción shl; por tanto, sal y shl son de hecho la misma instrucción y se codifican con el mismo código máquina.

Operaciones básicas sobre archivos. Un archivo está identificado por un nombre y contiene datos en formato binario. En lenguajes de alto nivel existen funciones especializadas que permiten el manejo de archivos de forma directa, con instrucciones como crear, leer o escribir archivo. En ensamblador el manipular un archivo es más complejo pero también es posible. Hay dos formas diferentes de utilizar archivos en ensamblador, la primera y más antigua es mediante bloques de control de archivo o FCB por sus siglas en inglés. La segunda es mediante handles o canales de comunicación. FCB (File Control Block): Permite tener un gran número de archivos abiertos y crear volúmenes en dispositivos de almacenamiento. El manejo de archivos con FCB utiliza el servicio 0FH de la instrucción 21h para abrir un archivo. Ejemplo: mov ah, 0FH → Servicio para abrir un archivo. mov dx, OFFSET Archivo → Se carga la dirección del archivo a dx, ‘Archivo’ es una variable que contiene la dirección del archivo al que se desea acceder. Int 21h → Se llama la interrupción 21h, la cual ejecutara el servicio 0FH.