lunes, 28 de octubre de 2013

Tarea 28 de octubre.



SAL:(Desplazamiento aritmético a la izquierda). 
equivalente a SHL (Desplazamiento lógico a la izquierda).El formato es: SAL operando, contador. SHL y SAL realizan la misma operación y son físicamente la misma instrucción.
Copia en cada bit del operando el contenido previo del bit de su derecha. El bit de menor peso se pone a cero. El contenido previo del bit de mayor peso se copia en el flag de acarreo (CF). Es equivalente a multiplicar el operando por dos, tanto para números sin signo como para número en complemento a 2, siempre el resultado no se salga del rango. Si el número de bits a desplazar es 1, se puede especificar directamente (Por ejemplo: SAL AL, 1). Si es mayor que 1, su valor debe cargarse en CL y especificar CL como segundo operando.

Ejemplo:
MOV cl, 2 ; Desplazar 2 bits
SAL al, cl
o SAL al,1

SHR: (Desplazamiento aritmético hacia la derecha).
El formato es: SAR operando, contador. Copia en cada bit del operando el contenido previo del bit de la izquierda. En el bit de mayor peso se almacena un 0. El contenido previo del bit de menor peso se copia en el flag de acarreo (CF). Es equivalente a dividir el operando por dos para números sin signo. Si el número de bits a desplazar es 1, se puede especificar directamente. Si es mayor que 1, su valor debe cargarse en CL y especificar CL como segundo operando.

Ejemplo:
MOV cl, 2 ; Desplazar 2 bits
SHR al, cl
o SHR al,1

SAR: (Desplazamiento aritmético hacia la derecha con extensión de signo). 
El formato es: SAR operando, contador. Copia en cada bit del operando el contenido previo del bit de su izquierda. El bit de mayor peso mantiene su valor anterior. El contenido previo del bit de menor peso se copia en el flag de acarreo (CF). Es equivalente a dividir el operando por dos para números en complemento a 2. Si el número de bits a desplazar es 1, se puede especificar directamente. Si es mayor que 1, su valor debe cargarse en CL y especificar CL como segundo operando.

Ejemplo:
MOV cl, 2 ; Desplazar 2 bits
SAR al, cl
o SAR al,1

ROL:(Rotar a la izquierda).
El formato es: ROL operando, contador. Rota a la izquierda los bits del operando de tal forma que el bits del extremo izquierdo del operando destino para al bit extremo derecho de dicho operando y al mismo tiempo para el bit de acarreo (CF). Si el número a desplazar es 1, se puede especificar directamente (Por ejemplo: ROL AL, 1). Si es mayor que 1, su valor debe cargarse en CL y especificar CL como segundo operando.

Ejemplo:
MOV cl, 2 ; Rotar 2 bits
RCR al, cl
o ROL al,1

ROR: (Rotar a la derecha).
El formato es: ROR operando, contador.
Rota a la derecha los bits del operando de tal forma que el bits del extremo derecho del operando destino para al bit extremo izquierdo de dicho operando y al mismo tiempo para el bit de acarreo (CF). Si el número a desplazar es 1, se puede especificar directamente (Por ejemplo: ROR AL, 1). Si es mayor que 1, su valor debe cargarse en CL y especificar CL como segundo operando.

Ejemplo:
MOV cl, 2 ; Rotar 2 bits
RCR al, cl
o ROR al,1

RCL:(Rotar a la izquierda con acarreo).
El formato es: RCL operando, contador.
Rota a la izquierda los bits del operando junto con la bandera de acarreo, CF, el número de bits especificado en el segundo operando. Si el número a desplazar es 1, se puede especificar directamente (Por ejemplo: RCL AL, 1). Si es mayor que 1, su valor debe cargarse en CL y especificar CL como segundo operando.

Ejemplo:
MOV cl, 3 ; Rotar 3 bits
RCL al, cl
o RCL al,1

RCR: (Rotar a la derecha con acarreo).
El formato es: RCR operando, contador. Rota a la derecha los bits del operando junto con la bandera de acarreo, CF, el número de bits especificado en el segundo operando. Si el número a desplazar es 1, se puede especificar directamente (Por ejemplo: RCR AL, 1). Si es mayor que 1, su valor debe cargarse en CL y especificar CL como segundo operando.

Ejemplo:
MOV cl, 3 ; Rotar 3 bits
RCR al, cl
o RCR al,1

CLC:
Clear CF (Borrar ó poner a cero la bandera de acarreo). 
Sintaxis: CLC.

STC:
Set CF (Activar ó poner a uno la bandera de acarreo). 
Sintaxis: STC.


Programa: 
 Este programa muestra el uso de las instrucciones de rotación y desplazamiento. 

.MODEL 
.DATA
dato1 dw 10 ; variable de tipo entero
.CODE
INICIO: ; Punto de entrada al programa
mov ax,1 ; AX=1
mov bx,10 ; BX=10
shl ax,1 ; ax=ax*2
mov cx,3 ; contador igual a 3
shl ax,cl ; ax=ax*8
shr bx,1 ; bx=bx/2
mov cx,2 ;
shr bx,cl ; bx=bx/4
shl dato1,1 ; dato1=dato1*2
mov ax,1 ; ax=1
rol ax,1 ; rotar ax 1 vez
mov bx,-10 ; bx=-10
sal bx,1 ; bx=bx*2
mov ax,4c00h ; Terminar
int 21h ; Salir al dos
END INICIO

END


Actividad 24 de octubre.





reverse.asm

Programa reverse.asm
 





martes, 22 de octubre de 2013

martes, 15 de octubre de 2013

Programa entrada desde el teclado (saludo.asm)

Escribimos el codigo en el bloc de notas. Observando en las lineas 12 y 14 el comando AH que es el que nos permite dar una entrada con el teclado.  


 Luego lo guardamos con la extension .asm, en mi caso HI.asm


Luego en el cmd ensamblamos y enlazamos el programa. Y observamos como funciona la interacción con el teclado. En las preguntas 


Para finalizar observamos los saltos y movimientos de memoria. 


lunes, 14 de octubre de 2013

Preguntas capitulo 4

4-1. Señale las diferencias entre un compilador y un ensamblador.
 
La diferencia seria que el compilador es usado en lenguajes de alto nivel para traducir el código fuente a lenguaje máquina, y el lenguaje ensamblador es usado por lenguajes de bajo nivel para realizar dicha traducción.


4-2. ¿Qué es una palabra reservada en un lenguaje ensamblador? Dé dos ejemplos.
Ciertas palabras en lenguaje ensamblador están reservadas para sus propósitos propios, y son usadas sólo bajo condiciones especiales. Por categorías, las palabras reservadas 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.
  • Operadores, como FAR y SIZE, que se utilizan en expresiones.
  • Símbolos predefinidos, como @Data y @Model, que regresan información a su programa.

4-3. ¿Cuáles son los dos tipos de identificadores?
 
Nombre, que se refiere a la dirección de un elemento de dato, y Etiqueta, que se refiere a la dirección de una instrucción.
4-4. Determine cuales de los nombres siguientes son válidos:
a) PC_AT: Válido
b) $50: Válido
c) @$_Z: Válido
d) 34B7: No Válido
e) AX: No válido
4-5. ¿Cuáles son las diferencias entre una directiva y una instrucción?
 
La diferencia es que la directiva indica al ensamblador que realice una acción específica, como definir un elemento de dato y las instrucciones, como MOV y ADD, son traducidas por el ensamblador a código objeto.
4-6. ¿Qué comandos hacen que el ensamblador...
a) Imprima un encabezado en la parte superior de una página en el listado de un programa? Comando TITLE.
b) Salte a una nueva página? Comando PAGE.
4-7. ¿Cuál es el objetivo de cada uno de los tres segmentos descritos en este capítulo?
  • Un segmento de pila define el almacén de la pila.
  • Un segmento de datos define los elementos de datos.
  • Un segmento de código proporciona un código ejecutable.
4-8. El formato de la directiva SEGMENT es
nombre SEGMENT alineación combinar 'clase'
Explique el objetivo de
a) Alineación: Indica el límite en el que inicia el segmento.
b) Combinar: Indica si el segmento se combina con otros segmentos cuando son enlazados después de ensamblar.
c) Clase: Es utilizada para agrupar segmentos cuando se enlazan.
4-9.
a) ¿Cuál es el objetivo de un procedimiento? 

Cuando usted 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.
b) ¿Cómo define el inicio y el final de un procedimiento?

La directiva PROC inicia un procedimiento y la directiva ENDP lo finaliza.
c) ¿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.
4-10. Explique que enunciados END particulares tratan la finalización de
a) Un programa: La directiva END finaliza todo el programa.
b) Un procedimiento: La directiva ENDP finaliza un procedimiento.
c) Un segmento: La directiva ENDS finaliza un segmento.
4-11. Establezca las diferencias entre los enunciados que finalizan un ensamblado y los enunciados que finalizan una ejecución.

Los enunciados que finalizan un ensamblado es para terminar todo el proceso de ensamblado, en cambio los que finalizan una ejecución solo terminan un segmento o un procedimiento.
4-12. Dé 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
4-13. Considere la instrucción MOV AX, 4C00H utilizada con INT 21H.
a) ¿Qué hace la instrucción? Después de la transferencia, se hace la petición para la terminación de un programa.
b) ¿Cuál es la finalidad del 4C y el 00? Indicar la dirección de memoria donde queremos mover el valor del registro AX.
4-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?
  • El modelo TINY esta destinado para uso exclusivo de programas .COM, los cuales tienen sus datos, código y pila en un segmento.
  • El modelo SMALL exige que el código quepa en un segmento de 64K y los datos en otro segmento de 64K.
  • El modelo MEDIUM se usaría cuando tengamos más de un segmento de código y un solo segmento de datos.
  • El modelo COMPACT se utilizaría cuando se tenga un segmento de código pero más de 1 segmento de datos.
  • El modelo LARGE se usaría cuando tengamos más de un segmento de código y más de un segmento de datos.
4-15. Dé las longitudes, en bytes, generadas por las siguientes directivas de datos
a) DD: 4 bytes
b) DW: 2 bytes
c) DT: 10 bytes
d) DQ: 8 bytes
e) DB: 1 byte
4-16. Defina una cadena de caracteres con nombre TITLE1 que contenga la constante: RGB Electronics.

TITLE1 DB 'RGB Electronics'
4-17. Defina los valores numéricos siguientes en elementos de datos FIELDA a FIELDE, respectivamente:
a) Un elemento de cuatro bytes con el equivalente hexadecimal del 215 decimal:

FIELDA DD EQU D7H
b) Un elemento de un byte con el equivalente hexadecimal del 35 decimal:

FIELDB DB EQU 25H
c) Un elemento de dos bytes con un valor no definido:

FIELDC DW EQU (?)
d) Un elemento de un byte con el equivalente binario del 25 decimal:

FIELDD DB EQU 00011001
e) Un DW con los valores consecutivos 17, 19, 21, 26 y 31:

FIELDE DW EQU 17
FIELDE 19 EQU DW 
FIELDE 21 EQU DW 
FIELDE 26 EQU DW 
FIELDE 31 EQU DW
4-18. Muestre el código objeto hexadecimal generado por
a) DB '28' = 0001 22 28
b) DB 28 = 0001 1C
4-19. Determine el código objeto hexadecimal ensamblado para
a) DB 28H = 0001 28
b) DW 2845H = 0030 2845
c) DD 28733AH = 004A 3A732800
d) DQ 28733AH = 0062 3A73280000000000

domingo, 13 de octubre de 2013

Programa ejemplo de saltos.


Creamos el codigo fuente en el bloc de notas.

Los guardamos con la extencion .asm para ensambamblar y enlazar el archivo. Lo ejecutamos y aparecera el codigo fuente como se muestra. 


Acto seguido con el debug vemos los movimientos que ocurren en memoria.

con la funcion "T" dentro del debug se muestran los movientos en memoria o saltos que da el programa. Notando los cambios en IP.

Despues de cierto nuemro de T's podemos una interrupcion que da el programa.


martes, 8 de octubre de 2013

Programa en ensamblador

Primero elaboramos el archivo fuente (código fuente) en un bloc de notas. 


Después de crear el archivo, lo guardamos en la carpeta masm que esta ubicada en C:\ con la extensión .asm en mi caso con el nombre hola.asm


Para finalizar lo corremos desde el cmd con las siguientes instrucciones mostradas en la imagen;
El comando masm es para comenzar a ensamblar el archivo fuente y se establezca un objeto ".obj"
El comando link es para enlazar el objeto y crear un ejecutable .exe 
Y el comando type para que se ejecute. 


En este caso el Hola mundo!!!

martes, 1 de octubre de 2013

Capitulo 4

4-1. Señale las diferencias entre un compilador y un ensamblador.
 
La diferencia seria que el compilador es usado en lenguajes de alto nivel para traducir el código fuente a lenguaje máquina, y el lenguaje ensamblador es usado por lenguajes de bajo nivel para realizar dicha traducción.


4-2. ¿Qué es una palabra reservada en un lenguaje ensamblador? Dé dos ejemplos.
 
Ciertas palabras en lenguaje ensamblador están reservadas para sus propósitos propios, y son usadas sólo bajo condiciones especiales. Por categorías, las palabras reservadas 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.
  • Operadores, como FAR y SIZE, que se utilizan en expresiones.
  • Símbolos predefinidos, como @Data y @Model, que regresan información a su programa.

4-3. ¿Cuáles son los dos tipos de identificadores?
 
Nombre, que se refiere a la dirección de un elemento de dato, y Etiqueta, que se refiere a la dirección de una instrucción.
 
4-4. Determine cuales de los nombres siguientes son válidos:
 
a) PC_AT: Válido
 
b) $50: Válido
 
c) @$_Z: Válido
 
d) 34B7: No Válido
 
e) AX: No válido
 
4-5. ¿Cuáles son las diferencias entre una directiva y una instrucción?
 
La diferencia es que la directiva indica al ensamblador que realice una acción específica, como definir un elemento de dato y las instrucciones, como MOV y ADD, son traducidas por el ensamblador a código objeto.
 
4-6. ¿Qué comandos hacen que el ensamblador...
 
a) Imprima un encabezado en la parte superior de una página en el listado de un programa? Comando TITLE.
 
b) Salte a una nueva página? Comando PAGE.
 
4-7. ¿Cuál es el objetivo de cada uno de los tres segmentos descritos en este capítulo?
 
  • Un segmento de pila define el almacén de la pila.
  • Un segmento de datos define los elementos de datos.
  • Un segmento de código proporciona un código ejecutable.
 
4-8. El formato de la directiva SEGMENT es
 
nombre SEGMENT alineación combinar 'clase'
 
Explique el objetivo de
 
a) Alineación: Indica el límite en el que inicia el segmento.
 
b) Combinar: Indica si el segmento se combina con otros segmentos cuando son enlazados después de ensamblar.
 
c) Clase: Es utilizada para agrupar segmentos cuando se enlazan.
 
4-9.
 
a) ¿Cuál es el objetivo de un procedimiento?

Cuando usted 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.
 
b) ¿Cómo define el inicio y el final de un procedimiento?

La directiva PROC inicia un procedimiento y la directiva ENDP lo finaliza.
 
c) ¿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.
 
4-10. Explique que enunciados END particulares tratan la finalización de
 
a) Un programa: La directiva END finaliza todo el programa.
 
b) Un procedimiento: La directiva ENDP finaliza un procedimiento.
 
c) Un segmento: La directiva ENDS finaliza un segmento.
 
4-11. Establezca las diferencias entre los enunciados que finalizan un ensamblado y los enunciados que finalizan una ejecución.

Los enunciados que finalizan un ensamblado es para terminar todo el proceso de ensamblado, en cambio los que finalizan una ejecución solo terminan un segmento o un procedimiento.
 
4-12. Dé 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
 
4-13. Considere la instrucción MOV AX, 4C00H utilizada con INT 21H.
 
a) ¿Qué hace la instrucción? Después de la transferencia, se hace la petición para la terminación de un programa.
 
b) ¿Cuál es la finalidad del 4C y el 00? Indicar la dirección de memoria donde queremos mover el valor del registro AX.
 
4-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?
 
  • El modelo TINY esta destinado para uso exclusivo de programas .COM, los cuales tienen sus datos, código y pila en un segmento.
  • El modelo SMALL exige que el código quepa en un segmento de 64K y los datos en otro segmento de 64K.
  • El modelo MEDIUM se usaría cuando tengamos más de un segmento de código y un solo segmento de datos.
  • El modelo COMPACT se utilizaría cuando se tenga un segmento de código pero más de 1 segmento de datos.
  • El modelo LARGE se usaría cuando tengamos más de un segmento de código y más de un segmento de datos.
 
4-15. Dé las longitudes, en bytes, generadas por las siguientes directivas de datos
 
a) DD: 4 bytes
 
b) DW: 2 bytes
 
c) DT: 10 bytes
 
d) DQ: 8 bytes
 
e) DB: 1 byte
 
4-16. Defina una cadena de caracteres con nombre TITLE1 que contenga la constante: RGB Electronics.

TITLE1 DB 'RGB Electronics'
 
4-17. Defina los valores numéricos siguientes en elementos de datos FIELDA a FIELDE, respectivamente:
 
a) Un elemento de cuatro bytes con el equivalente hexadecimal del 215 decimal:

FIELDA DD EQU D7H
 
b) Un elemento de un byte con el equivalente hexadecimal del 35 decimal:

FIELDB DB EQU 25H
 
c) Un elemento de dos bytes con un valor no definido:

FIELDC DW EQU (?)
 
d) Un elemento de un byte con el equivalente binario del 25 decimal:

FIELDD DB EQU 00011001
 
e) Un DW con los valores consecutivos 17, 19, 21, 26 y 31:

FIELDE DW EQU 17
FIELDE 19 EQU DW
FIELDE 21 EQU DW
FIELDE 26 EQU DW
FIELDE 31 EQU DW
 
4-18. Muestre el código objeto hexadecimal generado por
 
a) DB '28' = 0001 22 28
 
b) DB 28 = 0001 1C
 
4-19. Determine el código objeto hexadecimal ensamblado para
 
a) DB 28H = 0001 28
 
b) DW 2845H = 0030 2845
 
c) DD 28733AH = 004A 3A732800
 
d) DQ 28733AH = 0062 3A73280000000000