lunes, 25 de noviembre de 2013

Cuestionario.

 1. Qué es el acceso a  dispositivos de almacenamiento

Forma en que se puede leer y escribir datos en un dispositivo auxiliar a la memoria principal.
 
Dispositivo de almacenamiento de acceso directo: Es cualquier tipo de dispositivo de almacenamiento secundario que tiene un tiempo de acceso bajo en proporción a su capacidad.

2. Como se hace el acceso a  disco  usando lenguaje ensamblador
 
Los datos se registran sobre la superficie del disco en una serie de circunferencias concentricas llamadas pistas (track).
 
Varias pistas , una por cada cara del disco (generalmente 2) , componen un cluster. Cada pista esta divida en porciones iguales llamadas sectores. Un sector es la unidad basica del almacenamiento en un disco, el tamaño de un sector se mide en bytes y depende de las caracteristicas del disco.

Un ejemplo de las 3 rutinas son : que permiten lectura y escritura absoluta de sectores, asi como la determinacion del espacio libre disponible en un disco.
 
3. mencione y describa las unidades básicas de adaptador de video

El adaptador de video consta de tres unidades básicas:

1) El controlador de video: 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 ahí la información de estado.

2) El video de BIOS: Actúa como una interfaz con el adaptador de video , contiene rutinas, como para establecer el cursor y desplegar caracteres.

3) El área de despliegue de video: 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 de video dependen de los modos de video que estén usando . Para los adaptadores principales, a continuación están las direcciones del inicio de los segmentos de despliegue de video:

- A000:[0] Utilizada para descripción de fuentes cuando está en modo texto y para gráficos de alta resolución para EGA, MCGA y VGA.

- B000:[0] Modo de texto monocromático para MDA, EGA y VGA.

- B100:[0] Para HCG

-B800:[0] Modos de texto para CGA, MCGA, EGA y VGA y modos gráficos para CGA, EGA, MCGA y VGA.

miércoles, 20 de noviembre de 2013

Acceso a discos en lenguaje ensamblador

Dispositivo de almacenamiento de acceso directo.-cualquier tipo de dispositivo de almacenamiento secundario que tiene un tiempo de acceso
bajo en proporción a su capacidad.
Como se hace el acceso a  disco  usando lenguaje ensamblador.-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 clúster. cada pista esta divida en porciones iguales
llamadas sectores. un sector es la unidad básica del almacenamiento en un disco el tamaño de un sector se mide en bytes y depende
de las características del disco.
un ejemplo de las 3 rutinas son : que permiten lectura y escritura absoluta de sectores, así como la determinación del espacio libre
disponible en un disco.
un ejemplo podria ser.- rutina_absoluteRead: transfiere de un o mas sectores al buffer especificado accesando directamente a los sectores logicos.
en caso de error se enciende el bit de acarreo y Ax con el codigo de error.




4. Programación de dispositivos







 
 




lunes, 11 de noviembre de 2013

Actividad #12

package UnidadIII;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
public class interfaz implements Runnable {
    public static void main(String[] args) {
        String mensaje = "";
        byte opcion = 1;
        System.out.print("Repetir mensaje 100 veces\nEscribe tu mensaje: ");
        mensaje = new Scanner(System.in).next();
        System.out.print("\nDesea ejecutarlo...\n1) Con procedimiento\n2) Sin procedimiento\n: ");
        opcion = new Scanner(System.in).nextByte();
        Proc proc=new Proc();
        new Thread(new interfaz()).start();
        new Thread(proc).start();
        if (opcion == 1) {
            new interfaz().procedimiento(mensaje, 0);
        } else if (opcion == 2) {
            for (int i = 0; i < 100; i++) {
                System.out.println(mensaje);
            }
        } else {
            System.err.println("Opcion no valida!");
        }
        System.out.println("Tiempo: " + proc.paraYDevuelve()+ " milisegundos");
    }
    public void procedimiento(String mensaje, int iteracion) {
        System.out.println(mensaje);
        if (iteracion < 100) procedimiento(mensaje, iteracion + 1);
    }
    @Override public void run() {}
}
class Proc implements Runnable {
    private boolean continua = true;
    private int contador = 0;
    public int paraYDevuelve() {
        continua = false;
        return contador;
    }
    @Override public void run() {
        do {
            try {
                Thread.sleep(1);
            } catch (InterruptedException ex) {
                Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
            }
            contador++;
        } while (continua);
    }
}

Esta imagen nos dice cuanto tiempo tarda en correr con procedimiento

Esta imagen no dice cuanto tiempo tarda en correr sin procedimiento

Actividad #11

La diferencia entre un procedimiento y un macro, es que los procedimientos leen línea por línea el código, y los macros no, los procedimientos usan la sentencia call para ser llamados en caso de que no esten implícitos en el código, y los macros utilizan la sentencia include cuando son externos al programas, tomando un conjunto de instrucciones que ya estan definidas y solo se ejecutan tal y como estan.

PROCEDIMIENTOS
 

SUM2DW_P.ASM
;
; Este programa suma dos variables de tipo palabra doble
; y guarda el resultado en una variable de tipo palabra
; doble. Este programa utiliza un procedimiento para
; efectuar la suma.
;
; El pseudocódigo de este programa es:
;
; DX:AX = dato1
; CX:BX = dato2
;
; suma2dw()
;
; resul = DX:AX
;**********************************************************
;****** CÓDIGO DE INICIO **********************************
ideal
dosseg
model small
stack 256
;****** VARIABLES DEL PROGRAMA ****************************
dataseg
codsal db 0
dato1 dd ?
dato2 dd ?
resul dd ?
;****** CÓDIGO DEL PROGRAMA *******************************
codeseg
inicio:
mov ax, @data ; Inicializa el
mov ds, ax ; segmento de datos
mov ax, [word dato1] ; DX:AX = dato1
mov dx, [word dato1+2]
mov bx, [word dato2] ; CX:BX = dato2
mov cx, [word dato2+2]
; Llama al procedimiento para efectuar la suma
call suma2dw ; suma2dw()
mov [word resul], ax ; resul = DX:AX
mov [word resul+2], dx
salir:
mov ah, 04Ch
mov al, [codsal]
int 21h
;****** PROCEDIMIENTOS ************************************
;**********************************************************
; SUMA2DW
;
; Este procedimiento suma dos variables de tipo
; palabra doble.
;
; Parámetros:
;
; DX:AX = Primer sumando
; CX:BX = Segundo sumando
;
; Regresa:
;
; DX:AX = Suma
;
; El pseudocódigo de este procedimiento es:
;
; DX:AX += CX:BX
;**********************************************************
proc suma2dw
add ax, bx ; DX:AX += CX:BX
adc dx, cx
ret ; Regresa del
; procedimiento
endp suma2dw
;****** CÓDIGO DE TERMINACIÓN *****************************
end inicio
 
;**********************************************************
; SWAPNIBL2.ASM
;
; Este programa intercambia los MSN y LSN de una variable
; de un byte. El resultado queda en la misma variable.
; Este programa utiliza un procedimiento para intercambiar
; los nibles.
;
; El pseudocódigo de este programa es:
;
; AL = dato
; swapnibl()
; dato = AL
;**********************************************************
;****** CÓDIGO DE INICIO **********************************
ideal
dosseg
model small
stack 256
;****** VARIABLES DEL PROGRAMA ****************************
dataseg
codsal db 0
dato db ?
;****** CÓDIGO DEL PROGRAMA *******************************
codeseg
inicio:
mov ax, @data ; Inicializa el
mov ds, ax ; segmento de datos
mov al, [dato] ; AL = dato
; Llama al procedimiento para intercambiar los nibles
call swapnibl ; swapnibl()
mov [dato], al ; dato = AL
salir:
mov ah, 04Ch
mov al, [codsal]
int 21h
;****** PROCEDIMIENTOS ************************************
;**********************************************************
; SWAPNIBL
;
; Este procedimiento intercambia los MSN y LSN de una
; variable de un byte.
;
; Parámetro:
;
; AL = dato
;
; Regresa:
;
; AL = dato con los nibles intercambiados.
;
; El pseudocódigo de este procedimiento es:
;
; CL = 4
; rol al, 4
;**********************************************************
proc swapnibl
push cx ; Preserva CX
mov cl, 4
rol al, cl
pop cx ; Recupera CX
ret
endp swapnibl
;****** CÓDIGO DE TERMINACIÓN *****************************
end inicio
 
 
MACROS
;Programa que muestra un marco desde la coordenada (Fila1,Columna1) hasta la (Fila2,Columna2)
;El programa, utiliza macros. funciona con LOOP. y utiliza la función 02h de la interreucipon 21h
;02:15 p.m. Miercoles, 18 de Octubre de 2006
MARCO MACRO     FILA1, COL1, FILA2, COL2
                LOCAL LINE_TOP
                LOCAL EXIT_TOP
                LOCAL LINE_BOTTOM
                LOCAL EXIT_BOTTOM
                LOCAL LINE_LEFT
                LOCAL EXIT_LEFT
                LOCAL LINE_RIGHT
                LOCAL EXIT_RIGHT
                ;Recorremos desde COL2 hasta COL1 en FILA1
                MOV cl,COL2                     ;El contador decrementará desde COL2
                LINE_TOP:                       ;
                        MOV AH,02h              ;Set cursor position (Int 10/02)
                        MOV DH,fila1    ;Row
                        MOV DL,cl               ;Column
                        MOV BH,0                ;page number: 0 = in graphics modes
                        int 10h                 ;Video (Int 10)
                       
                        MOV AH,02h              ;Write attributes/characters at cursor position (Int 10/09)
                        MOV DL,'+'              ;Character
                        INT 21H                 ;
                       
                        CMP Cl,COL1
                                je EXIT_TOP
                LOOP LINE_TOP ;dec cx;cmp cx,0;jne line_left;
                EXIT_TOP:
               
                ;Recorremos desde COL2 hasta COL1 en FILA2
                MOV cl,col2
                LINE_BOTTOM:
                        MOV AH,02h              ;Set cursor position (Int 10/02)
                        MOV DH,fila2    ;Row
                        MOV DL,cl               ;Column
                        MOV BH,0                ;page number: 0 = in graphics modes
                        int 10h                 ;Video (Int 10)
                       
                        MOV AH,02h              ;Write characters only at cursor position (Int 10/0A)
                        MOV DL,'+'              ;Character
                        INT 21H                
                       
                        CMP Cl,COL1
                                je EXIT_BOTTOM
                LOOP LINE_BOTTOM ;dec cx;cmp cx,0;jne line_left;
                EXIT_BOTTOM:
               
                ;Recorremos desde FILA2 hasta FILA1 en COL1
                MOV cl,FILA2
                LINE_LEFT:
                        MOV AH,02h              ;Set cursor position (Int 10/02)
                        MOV DH,cl               ;Row
                        MOV DL,COL1             ;Column
                        MOV BH,0                ;page number: 0 = in graphics modes
                        int 10h                 ;Video (Int 10)
                       
                        MOV AH,02h              ;Write characters only at cursor position (Int 10/0A)
                        MOV DL,'+'              ;Character
                        INT 21H                
                       
                        CMP Cl,FILA1
                                je EXIT_LEFT
                LOOP LINE_LEFT ;dec cx;cmp cx,0;jne line_left;
                EXIT_LEFT:
               
                ;Recorremos desde FILA2 hasta FILA1 en COL2
                MOV cl,FILA2
                LINE_RIGHT:
                        MOV AH,02h              ;Set cursor position (Int 10/02)
                        MOV DH,cl               ;Row
                        MOV DL,COL2             ;Column
                        MOV BH,0                ;page number: 0 = in graphics modes
                        int 10h                 ;Video (Int 10)
                       
                        MOV AH,02h              ;Write characters only at cursor position (Int 10/0A)
                        MOV DL,'+'              ;Character
                        INT 21H                
                       
                        CMP Cl,FILA1
                                je EXIT_RIGHT
                LOOP LINE_RIGHT ;dec cx;cmp cx,0;jne line_left;
                EXIT_RIGHT:
               
                ;Dibujamos esquinas
                MOV AH,02h              ;Set cursor position (Int 10/02)
                MOV DH,FILA1    ;Row
                MOV DL,COL1             ;Column
                MOV BH,0                ;page number: 0 = in graphics modes
                int 10h                 ;Video (Int 10)
               
                MOV AH,02h              ;Write characters only at cursor position (Int 10/0A)
                MOV DL,'@'              ;Character
                INT 21H                
               
                MOV AH,02h              ;Set cursor position (Int 10/02)
                MOV DH,FILA1    ;Row
                MOV DL,COL2             ;Column
                MOV BH,0                ;page number: 0 = in graphics modes
                int 10h                 ;Video (Int 10)
               
                MOV AH,02h              ;Write characters only at cursor position (Int 10/0A)
                MOV DL,'@'              ;Character
                INT 21H                
               
                MOV AH,02h              ;Set cursor position (Int 10/02)
                MOV DH,FILA2    ;Row
                MOV DL,COL1             ;Column
                MOV BH,0                ;page number: 0 = in graphics modes
                int 10h                 ;Video (Int 10)
               
                MOV AH,02h              ;Write characters only at cursor position (Int 10/0A)
                MOV DL,'@'              ;Character
                INT 21H                
               
                MOV AH,02h              ;Set cursor position (Int 10/02)
                MOV DH,FILA2    ;Row
                MOV DL,COL2             ;Column
                MOV BH,0                ;page number: 0 = in graphics modes
                int 10h                 ;Video (Int 10)
               
                MOV AH,02h              ;Write characters only at cursor position (Int 10/0A)
                MOV DL,'@'              ;Character
                INT 21H                
               
        ENDM

CLS MACRO                                       ;Clear Screen
                MOV AH, 00H                     ;Set video mode
                MOV AL, 03H                     ;Video mode 80x25, 8x8, 16, 4, B800, CGA
                INT 10H                         ;Video (Int 10)
        ENDM

.model small
.stack
.code
.startup

        CLS
        MARCO 1,1,22,78
        MARCO 5,15,15,25
        MARCO 3,3,8,8
        MARCO 3,30,18,70

        ;Enviar cursor a ultima línea
        MOV AH,02h              ;Set cursor position (Int 10/02)
        MOV DX,1700H    ;Row & Col
        MOV BH,0                ;Page number: 0 = in graphics mode
        int 10h                

.exit
end
 
En un disco tenemos un fichero con una serie de MACROS y que se llama: MACROS.ASM:
 
Listado de MACROS.ASM
retorno MACRO
           MOV ah, 4ch
               INT 21h
ENDM
display  MACRO cadena
MOV dx, OFFSET cadena
MOV ah, 09h
INT 21h
ENDM
leer_teclado MACRO
MOV ah, 08h
INT 21h


ENDM
 
En nuestro ordenador estamos realizando nuestro programa:
 
PILA SEGMENT STACK 'STACK'
dw 100h dup (?)
PILA ENDS
DATOS SEGMENT 'DATA'
paso db "MIOOO"
control db 5 dup (?)
men1 db "Clave de acceso:".13,10,"$"
men2 db "Bienvenido","$"
DATOS ENDS
CODIGO SEGMENT 'CODE'
ASSUME CS:  CODIGO, DS: DATOS, SS: PILA
EMPEZAR:
MOV ax, DATOS
MOV ds, ax
INCLUDE A:\ MACROS,ASM              ; Aquí le decimos al programa que incluya las ma­cros del porgrama  que se encuentra en el fichero MACROS:ASM que se encuentra en un disco en la unidad A de nuestro ordenador.
DOS:
MOV si, 0
display men1 ; "display" es una MACRO que tiene parámetro.
MOV cx, 5
UNO:
leer teclado             ; Otra MACRO. Esta macro no tiene parámetros.
MOV control[SI], al
INC si
LOOP  UNO
MOV si, 0
MOV cx, 5
TRES:


MOV al, control[SI]

CMP al, paso[SI]

JNE DOS

INC SI

LOOP TRES

display men2           ; Otra MACRO

retorno                     ; Otra MACRO sin parámetros

CODIGO ENDS