miércoles, 15 de abril de 2020

2.7 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.

2.8 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.

STOC:
Esta instrucción permite guardar un carácter de una cadena.

STOW:
Esta instrucción es utilizada para guardar una palabra de una cadena.

2.9 Instrucciones aritméticas.


Dentro de ensamblador se pueden llevar a cabo las 4 instrucciones aritméticas básicas, cada una de ellas cuenta con su propia función:

Instrucción de Suma ADD:

Suma los operandos que se le dan y guarda el resultado en el primer operando.

Ejemplo
·         ADD al, bl: Suma los valores guardados en los registros al y bl, almacenando el resultado en al.

Instrucción de Resta SUB:

Resta el primer operando al segundo y almacena el resultado en el primero.

Ejemplo:
·         SUB al, bl: Resta el valor de AL al de BL y almacena el resultado en AL.

Instrucción de multiplicación MUL:

Multiplica el contenido del acumulador por el operando, a diferencia de los métodos anteriores, solo es necesario indicar el valor por el que se multiplicará, ya que el resultado siempre es almacenado en el registro AX.

Ejemplo:
·         MUL DX: Multiplica el valor del registro acumulador (AX) por el de DX.

Instrucción de división DIV:

Divide un numero contenido en el acumulador entre el operando fuente, el cociente se guarda en AL o AX y el resto en AH o DX según el operando sea byte o palabra respectivamente. Es necesario que DX o AH sean cero antes de la operación por lo que es necesario utilizar el ajuste de división antes del la instrucción DIV.

Ejemplo:
·         AAM: Ajuste ASCII para la división.

·         DIV  bl: Instrucción que divide los valores en ax y bl.

2.10 Manipulación de la pila.


La pila es un grupo de localidades de memoria que se reservan para contar con un espacio de almacenamiento temporal cuando el programa se está ejecutando.

La pila es una estructura de datos del tipo LIFO (Last In First Out), esto quiere decir que el último dato que es introducido en ella es el primero que saldrá al sacar datos de la pila.





Para la manipulación de la pila ensamblador cuenta con dos instrucciones específicas, las cuales son las siguientes:

Push:
Esta instrucción permite almacenar el contenido del operando dentro de la última posición de la pila.

Ejemplo:
Push ax    El valor contenido en ax es almacenado en el último espacio de la pila.

Pop:
Esta instrucción toma el último dato almacenado en la pila y lo carga al operando.

Ejemplo:
Pop bx       
El valor contenido en el último espacio de la pila se almacena en el registro
El siguiente ejemplo muestra como implementar la instrucción XCHG por medio de las instrucciones Push y Pop. Recuerde que la instrucción XCHG intercambia el contenido de sus dos operandos. 

.COMMENT
Programa: PushPop.ASM
Descripción: Este programa demuestra el uso de las instrucciones para el manejo de la pila, implementando la instrucción XCHG con Push y Pop
MODEL tiny
.CODE
Inicio: ;Punto de entrada al programa
Mov AX,5 ;AX=5
Mov BX,10 ;BX=10
Push AX ;Pila=5
Mov AX,BX ;AX=10
Pop BX ;BX=5
Mov AX,4C00h ;Terminar programa y salir al DOS
Int 21h ;
END Inicio
END

2.11 Obtención de cadena con representación decimal.


En este modo, los datos son proporcionados directamente como parte de la instrucción.

Ejemplo:

Mov AX,34h ;
Copia en AX el número 34h hexadecimal Mov CX,10 ;
Copia en CX el número 10 en decimal
.COMMENT
Programa: PushPop.ASM
Descripción: Este programa demuestra el uso de las instrucciones para el manejo de la pila, implementando la instrucción XCHG con Push y Pop
MODEL tiny
.CODE

Inicio: ;Punto de entrada al programa

Mov AX,5 ;AX=5
Mov BX,10 ;BX=10
Push AX ;Pila=5
Mov AX,BX ;AX=10
Pop BX ;BX=5
Mov AX,4C00h ;Terminar programa y salir al DOS
Int 21h ;
END Inicio
END


2.12 Instrucciones lógicas.


Ensamblador cuenta con un grupo de cuatro instrucciones lógicas a nivel de bit, las cuales con excepción de la primera requieren de dos operandos, estas son las siguientes:



NOT:
La instrucción NOT o negación requiere un solo operando y su función es cambiar el estado de los bits del mismo, es decir, cambiar los ceros por unos y los unos por ceros.

Ejemplo:
NOT ax  Se aplica la negación al valor del registro ax.

AND:
Esta instrucción también conocida como producto lógico requiere de dos operandos y su valor será igual a uno cuando los bits que se comparen ambos sean uno.

Ejemplo:
AND ax,bx  Se aplica el producto lógico a los valores de ax y bx.

OR:
La instrucción OR también conocida como suma lógica requiere de dos operandos y su valor será uno si alguno de los bits que compara es uno.

Ejemplo:
OR ax,bx Se aplica la suma lógica a los valores de ax y bx.

XOR:
La instrucción XOR o suma lógica exclusiva requiere dos operandos, los cuales se comparan y el resultado obtenido es uno cuando uno de los bits es uno y el otro cero.

Ejemplo:

XOR ax,bx  Se aplica la instrucción XOR a los valores de ax y bx.

2.13 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.

·         SHR (Shift Right = desplazamiento a la derecha) 

 La instrucción shr funciona de la misma forma que shl, pero desplazando los bits a la derecha en lugar de a la izquierda.

·         SAR (Shift Arithmetic Right = desplazamiento aritmético a la derecha)
 
Esta instrucción desplaza los bits del operando destino a la derecha tantos bits como indique el operando fuente. Esta forma de funcionamiento es similar a la de la instrucción shr; sin embargo, ambas instrucciones se diferencian en que sar, en vez introducir ceros por la izquierda del operando, replica el bit de mayor peso (bit de signo) en cada desplazamiento.