lunes, 4 de noviembre de 2013

Instrucciones de Desplazamiento, Rotación y Adeudos.
 

Instrucciones de desplazamiento:

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






Instrucciones de rotacion

ROL
Realiza la rotación a la izquierda de los bits del operando, ignorando el bit CF del registro de estado, aunque en CF se almacena el bit que se rota.



Admite los siguientes formatos:

ROL reg, 1; desplaza 1 vez el contenido de reg

ROL mem, 1

ROL reg, CL; desplaza tantas veces el contenido de reg como indique CL.

ROL mem, CL

Afecta a los bit OF, CF del registro de estado.


ROR
Realiza la rotación a la derecha de los bits del operando, ignorando el bit CF del registro de estado, aunque en CF se almacena el bit que se rota.



Admite los siguientes formatos:

ROL reg, 1; desplaza 1 vez el contenido de reg

ROL mem, 1

ROL reg, CL; desplaza tantas veces el contenido de reg como indique CL.

ROL mem, CL

Afecta a los bit OF, CF del registro de estado.


RCL
Realiza la rotación a la izquierda de los bits del operando a través del bit CF (acarreo) del registro de estado.



Admite los siguientes formatos:

RCL reg, 1; desplaza 1 vez el contenido de reg

RCL mem, 1

RCL reg, CL; desplaza tantas veces el contenido de reg como indique CL.

RCL mem, CL

Afecta a los bit OF, CF del registro de estado.

RCR
Realiza la rotación a la derecha de los bits de operando a través del bit CF del registro de estado.



Admite los siguientes formatos:

RCR reg, 1; desplaza 1 vez el contenido de reg

RCR mem, 1

RCR reg, CL; desplaza tantas veces el contenido de reg como indique CL.

RCR mem, CL

Afecta a los bit OF, CF del registro de estado.


CLC/STC
Pone a 0 ó a 1, respectivamente, el bit CF del registro de estado.
 

EJEMPLOS DE PROGRAMAS:
,


 

ACT. 24 DE OCTUBRE

ACTIVIDAD 24 DE OCTUBRE



.

debug!!



PROGRAMA: REVERSE.ASM




.

CAPTURAS




Al final el programa lo que hace es invertir el orden de las cadenas de texto qe se ingresen

domingo, 3 de noviembre de 2013

Preguntas Capitulo 4

Preguntas Capitulo 4

1. Señale las diferencias entre compilador y ensamblador.
La diferencia entre estos es que el compilador lo utiliza un lenguaje de alto nivel para traducir el código fuente a lenguaje maquina (código objeto). Y por otro lado un ensamblador es utilizado por un lenguaje de bajo nivel para realizar la traducción.


2. ¿Qué es una palabra reservada en un lenguaje ensamblador? Dé dos ejemplos.
Palabras reservadas para propósitos propios y se usan bajo condiciones especiales.
Ejemplos por categorías incluyen:
  • Instrucciones, como MOV y ADD, que son operaciones que la computadora puede ejecutar.
  • Directivas, como END o SEGMENT, que se emplean para proporcionar comandos al ensamblador. 
3. ¿Cuáles son los dos tipos de identificadores?
  • Nombre: se refiere a la dirección de un elemento de dato.
  • Etiqueta: se refiere a la dirección de una instrucción.

4. Determine cuáles de los nombres siguientes son válidos:
PC_AT: Valido
$50: Valido
@$_Z: Valido
34B7: No es valido
AX: No es valido

5. ¿Cuáles son las diferencias entre una directiva y una instrucción?
Las instrucciones el ensamblador las traduce a código objeto y las directivas indican al ensamblador que realice una acción específica, como definir un elemento de dato.
La directiva controla la manera en que un programa ensambla y lista.

6. Qué comandos hacen que el ensamblador:
  • Imprima un encabezado en la parte superior de una página en el listado de un programa: TITLE.
  • Salte a una nueva página: PAGE.
7. ¿Cuál es el objetivo de cada uno de los tres segmentos descritos en este capítulo?
Segmento de pila: Contiene datos y direcciones que se necesitan guardar temporalmente para el uso de llamadas de subrutinas. Esta define el almacén de la pila.
Segmento de datos: Cada dato o variable inicializada debe estar dentro de este. Función define los elementos de los datos.
Segmento de código: Proporciona el código ejecutable de cada programa.

8. El formato de la directiva SEGMENT es:
 nombre SEGMENT alineación combinar 'clase'


Explique el objetivo de:
  • Alineación: Nos indica cual es el límite en el cual inicia el segmento.
  • Combinar: Indica si el segmento se combina con otros segmentos esto cuando los segmentos han sido enlazados después de haberlos ensamblados. 
  • Clase: Es utilizada para agrupar segmentos cuando se enlazan.
9. ¿Cuál es el objetivo de un procedimiento?
Solicita la ejecución de un programa, el cargador de programas del DOS utiliza el nombre del procedimiento como el punto de entrada para la primera instrucción a ejecutar.
Un procedimiento en ensamblador es aquel que inicie con la palabra Proc y termine con la palabra ret.

¿Cómo define el inicio y el final de un procedimiento?
Para la definición de procedimientos se emplean las directivas PROC y ENDP.

Cuándo definiría un procedimiento como FAR y cuándo como NEAR?
FAR cuando sea el primer procedimiento, y NEAR para cada procedimiento adicional.

10. Explique que enunciados END particulares tratan la finalización de:
  • Programa: END Fin del modulo fuente, finaliza todo el programa.
  • Procedimiento: ENDP fin de procedimiento 
  • Segmento: ENDS fin de segmento o de estructura.
11. Establezca las diferencias entre los enunciados que finalizan un ensamblado y los enunciados que finalizan una ejecución.
Enunciados que finalizan ensamblado: estos terminan el proceso de ensamblado y los enunciados que finalizan una ejecución solamente finalizan un segmento o estructura.

12. De los nombres STKSEG, DATSEG, y CDSEG a los segmentos de la pila, de los datos y del código, respectivamente, y codifique el ASSUME necesario.


STKSEG SEGMENT PARA STACK 'Stack'
STKSEG ENDS

DATSEG SEGMENT PARA 'Data'
DATSEG ENDS

CDSEG SEGMENT PARA 'Code'
BEGIN PROC FAR
ASSUME SS: STKSEG, DS: DATSEG, CS: CDSEG
MOV AX, DATSEG
MOV DS, AX
INT 21H
BEGIN ENDP
CDSEG ENDS
END BEGIN


13. Considere la instrucción MOV AX, 4C00H utilizada con INT 21H.

  • ¿Qué hace la instrucción? Después de la transferencia, se hace la petición para la terminación de un programa.
  • ¿Cuál es la finalidad del 4C y el 00? Indica la dirección de memoria donde queremos mover el valor del registro AX.
14. Para las directivas simplificadas de segmentos, la directiva .MODEL proporciona los modelos TINY, SMALL, MEDIUM, COMPACT y LARGE.
¿Bajo qué circunstancias se utilizaría cada uno de estos modelos?

  • TINY: esta destinado para uso exclusivo de programas .COM, los cuales tienen sus datos, código y pila en un segmento.
  • SMALL : exige que el código quepa en un segmento de 64K y los datos en otro segmento de 64K.
  • MEDIUM : se usaría cuando tengamos más de un segmento de código y un solo segmento de datos.
  • COMPACT :se utilizaría cuando se tenga un segmento de código pero más de 1 segmento de datos.
  • LARGE se usaría cuando tengamos más de un segmento de código y más de un segmento de datos.
15. Da las longitudes, en bytes, generadas por las siguientes directivas de datos:
  • DD: 4 bytes
  • DW: 2 bytes
  • DT: 10 bytes
  • DQ: 8 bytes
  • DB: 1 byte
16. Defina una cadena de caracteres con nombre TITLE1 que contenga la constante: RGB Electronics.
TITLE1 DB 'RGB Electronics'

17. Muestre el código objeto hexadecimal generado por:
  • DB '28' = 0001 22 28
  • DB 28 = 0001 1C
18. Determine el código objeto hexadecimal ensamblado para:
  • DB 28H = 0001 28
  • DW 2845H = 0030 2845
  • DD 28733AH = 004A 3A732800
  • DQ 28733AH = 0062 3A73280000000000

miércoles, 30 de octubre de 2013

analizar loop y jmp

LOOP


.
1. Se define con la instrucción PAGE el numero máximo de lineas para una página.
2. Con TITLE definimos el titulo que le daremos
3. Definimos el modelo de memoria, en este caso SMALL
4.Indicamos inicia el código
5.Nuestro codigo que vamos a generar iniciara con un desplazamiento de direccion 100
6.Entramos a iniciar nuestro proceso  PROC NEAR
7.Inicializamos AX, Transfiere 01 a AX
8.Transfiere a BX 01
9.Transfiere a DX 01
10. Transfiere a CX 01;Iniciar.
11.Una etiqueta la cual representa el numero de iteraciones.
12. Sumar 01 a AX
13.Sumas AX a BX
14.SHL Multiplicar por dos a DX
15.Decrementar CX (Iterar si este es diferente de cero)
16.Transferir 4c00h a AX
17.Interrupción 21, salida a dos
18. fin del begin
19. Fin del programa




JMP
.

1. Define el número máximo de líneas para listar en una página.
2. Define el titulo del programa.
3: Define el modelo de memoria.
4: Inicia el código.
5: Inicia la generación de código a partir del desplazamiento de dirección 100.
6: Comienza el proceso.
7: Mueve 01 al registro AX.
8: Mueve 01 al registro BX.
9: Mueve 01 al registro CX.
10: Nombre de la etiqueta indicando el número de iteraciones.
11: Suma 1 al registro AX.
13: Suma el valor de AX al registro BX.
14: Multiplica por dos a DX.
15: Salta a la etiqueta A20, realizando una especie de ciclo.
18: Termina el proceso.
19: Termina el programa.


Entrada desde teclado

Entrada desde teclado








.
Captura cmd

Debug


primer programa en ensamblador

PRIMER PROGRAMA ENSAMBLADOR