domingo, 3 de noviembre de 2013

Programas unidad II

1. Implementacion de la implementacion if-then. 

Se pretende realizar un programa en lenguaje ensamblador equivalente al sig. código en C: 

#include <iostream.h>

main()

{
               int a[] = {12, 5, 34, 75, 10, 25};
      int n = 6;

              int max, i;
              for (max = i = 0; i < n; i++)
              if (a[i] > max)
              max = a[i];
              cout << max << end1;
              }

Análisis: 


programa: 




2. Implementación de la condición if-then-else. 

Se pretende realizar un programa en lenguaje ensamblador equivalente al siguiente código en C:  

#include <iostream.h>
main()
{
    int a[] = {-12, 5, -34, -75, -10, 25};
    int n = 6;
    int max, i;
    int npos, nneg;
      for (i = npos = nneg = 0; i < n; i++)
         if (a[i] > 0)
             npos++;
        else
             nneg++;
   cout << “+: “ << npos << “; -: “ << nneg << end1;

} 

Análisis: 

 Programa: 






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.