sábado, 30 de noviembre de 2013

Modificación de código.

A continuación la modificación del programa para que pudiera imprimir los caracteres del 0-255 

Primeramente en programa inicical. 
Luego de depurarlo nos dimos cuenta que imprimía lo que conocemos como "basura" o conjunto de caracteres sin algún significado. 

Después de ver el código observe que le faltaban varias sentencias comunes que hemos visto en clases.. Asi  que las agregue como se muestra a continuación. 

Las sentencias eran 
.STACK 256 
.DATA
y sacar el la linea CHAR DB 00,$ del begin. 

Al compilarlo no obtuve errores. 

y se mostraron los caracteres de manera correcta.


lunes, 25 de noviembre de 2013

Respuestas.


1.Qué es el acceso a dispositivos de almacenamiento.

El sistema de almacenamiento en disco constituye el soporte externo de la información. Los datos se registran sobre la superficie del disco en una serie de circunferencias con céntricas llamadas pistas (track). Varias pistas, una por cada cara del disco (generalmente 2), componen un cluster. Cada pista está dividida en porciones iguales llamadas sectores. Un sector es la unidad básica de almacenamiento en disco. El tamaño de un sector se mide en bytes, y depende de las características del disco.


2. Como se hace el acceso a disco usando lenguaje ensamblador.

_AbsoluteRead. Transfiere el contenido de un o más sectores del disco al buffer especificado, accesando directamente a los sectores lógicos. En caso de error, se enciende el bit de acarreo y AX contiene el código del error.

_AbsoluteWrite. Transfiere el contenido del buffer especificado a uno o más sectores de disco, accesando directamente a los sectores lógicos. En caso de error, se enciende el bit de acarreo y AX contiene el código del error.

_FreeDiskSpace. Devuelve en DX:AX el espacio libre en disco (en Kb). En caso de error, se enciende el bit de acarreo.



3. mencione y describa las unidades básicas de adaptador de vídeo.
a) El controlador de vídeo: Esta unidad "Es el caballo de batalla", genera las señales de rastreo del monitor para el modo seleccionado, texto o gráfico. El procesador de la computadora envía instrucciones a los registros del controlador y lee la información del resultado.
b) El vídeo de BIOS: Actúa como una interfaz con el adaptador de viseo, contiene rutinas, como para establecer al cursor y desplegar caracteres.
c) El área de despliegue de vídeo: En memoria contiene la información que el monitor va a mostrar. Las interrupciones que manejan el despliegue en pantalla de forma directa transfieren a esta área sus datos. Las localidades del adaptador del vídeo dependen de los modos de vídeo que de estén usando. para los adaptadores principales, a continuación los inicios de despliegue de vídeo;


A000:[0] EGA, MCGA y VGA.

•B000:[0] MDA, EGA y VGA.

•B100:[0] HCG.

•B800:[0] texto, CGA,MCGA,EGA y VGA y modos graficos CGA, EGA, MCGA y VGA.

viernes, 22 de noviembre de 2013

Acceso a discos en lenguaje ensamblador.

1. Qué es el acceso a dispositivos de almacenamiento
El sistema de almacenamiento en disco constituye el soporte externo de la información. Los datos se registran sobre la superficie del disco en una serie de circunferencias concéntricas llamadas pistas (track). Varias pistas, una por cada cara del disco (generalmente 2), componen un cluster. Cada pista está dividida en porciones iguales llamadas sectores. Un sector es la unidad básica de almacenamiento en disco. El tamaño de un sector se mide en bytes, y depende de las características del disco.

2.Qué es el acceso a dispositivos de almacenamiento
Se presentan 3 rutinas que permiten lectura y escritura absoluta de sectores, así como la determinación del espacio libre disponible en un disco.

_AbsoluteRead. Transfiere el contenido de un o más sectores del disco al buffer especificado, accesando directamente a los sectores lógicos. En caso de error, se enciende el bit de acarreo y AX contiene el código del error.

_AbsoluteWrite. Transfiere el contenido del buffer especificado a uno o más sectores de disco, accesando directamente a los sectores lógicos. En caso de error, se enciende el bit de acarreo y AX contiene el código del error.

_FreeDiskSpace. Devuelve en DX:AX el espacio libre en disco (en Kb). En caso de error, se enciende el bit de acarreo.

3. Busque y ejecute un programa de demuestre en su ejecución el acceso a disco para grabar y leer.

Invocación: 
push <unidad de disco>
push <número de sectores a escribir>
push <primer sector a escribir>
push SEG <buffer>
push OFFSET <buffer>
call _AbsoluteWrite
___________________________________________________________
              PUBLIC _AbsoluteWrite
_AbsoluteWrite   PROC NEAR
                 ARG Buffer:DWORD,Start:WORD,NumSect:WORD,Drive:BYTE= ArgLen
                 push bp ; salvar BP
                 mov bp,sp ; permitir acceso a los argumentos
                 push bx ; salvar registros
                 push cx
                 push dx
                 push ds
                 mov al,Drive ; escritura absoluta a disco
                 mov cx,NumSect
                 mov dx,Start
                 lds bx,Buffer
                 int 26h
                 pop bx
                 pop ds ; recuperar registros
                 pop dx
                 pop cx
                 pop bx
                 pop bp
                 ret ArgLen
_AbsoluteWrite   ENDP


Resumen capitulo 10

Procesamiento avanzado de la pantalla. 





Programa ejemplo.





martes, 12 de noviembre de 2013

Actividad 12

Elaborar un programa que repita 100 veces un mensaje. 

•Sin procedimiento.
•Llamada a procedimiento (ciclo for).
•tiempo de ejecución. 

En mi caso elegí Netbeans porque es el lenguaje que mas domino.

Primer caso, sin procedimiento. 


Observando el tiempo de ejecución. 

Segundo caso, haciendo llamada a procedimiento con un ciclo for.

 Observando el tiempo de ejecución. 

Como conclusión, observamos que el que duro mas tiempo para terminar de ejecutarse donde no utilizamos un procediendo, con un tiempo de 3 segundos. a comparación del de una llamada a procedimiento que duro 1 segundo. 



Actividad 11

Los procedimientos son iguales a las macros pero son más lentas
y necesitan de una instrucción al ser llamadas.

Igual que las macros son conjuntos de instrucciones.

Ejemplos de procedimientos.



Ejemplos de macros. 





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