lunes, 25 de noviembre de 2013

unidades básicas de adaptador de video

  • 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 grafico. el procesador de la computadora envia instrucciones a los registros del controlador y lee ahi la informacion de estado.
  • el video de bios, que actua como una interfaz con el adaptador de video, contiene rutinas, como para establecer el cursor y desplegar caracteres.
  • el area de despliqegue de video en memoria contiene la informacion que el monitor va a mostrar.
las interrupciones que manejan el despliegue en pantalla de forma directa transfieren a esta area sus datos.
las localidades del adaptador de video dependen de los modos de video que se esten usando.
para los adaptadores principales a continuacion estan las direcciones del inicio de los segementos de despliegue
de video:
  • A000:[0] itilizada para descripcion de fuentes cuando esta en modo de texto y para graficos de alta resolucion para EGA,MCGA y VGA.
  • B000:[0] modo de texto monocromatico para MDA, EGA y VGA.
  • B100:[0] para HCG.
  • B800:[0] modos de texto para CGA, MCGA, EGA y VGA y modos graficos para CGA, EGA, MCGA y VGA.
la funcion 00H, de la INT 10H de BIOS, puede designar el modo para el programa que se esta ejecutando actualmente o puede
conmutar entre texto y grafico.
MOV AH,00H ;peticion de designar el modo
MOV AL,03H ;texto o estandar a color, 80 x 25
INT 10H ;llama al bios
este ejemplo establece el modo de video en texto a color estandar en cualquier tipo de monitor a color.
si escribe programas para monitores desconocidos, puede utlizar la INT 10H, funcion 0FH, la cual regresa en AL el modo de video
actual.otro enfoque es usar la INT 11H de bios para determinar el dispositivo conectado al sistema, aunque la informacion enviada es muy primitiva. la operacion regresa
un valor al AX, con los bits 5 y 4 que indican el modo de video:
01:40 x 25, usando un adaptador de color
10:80 x 25, usando un adaptador de color
11:80 x 25, usando un adaptador monocromatico e

jueves, 21 de noviembre de 2013

Acceso a discos en lenguaje ensamblador



Acceso a dispospositivos de almacenamiento

En computadores centrales y algunos minicomputadores, un dispositivo de almacenamiento de acceso directo (direct access storage device o DASD en inglés) es cualquier tipo de dispositivo de almacenamiento secundario que tiene un tiempo de acceso bajo en proporción a su capacidad.

el término fue introducido por IBM para cubrir tres tipos de dispositivos diferentes: discos duros, tambores y células de datos. La funcionalidad de acceso directo, ahora llamada acceso aleatorio, de esos dispositivos era el opuesto al acceso secuencial usado en cintas magnéticas, mucho más lento al acceder a un punto distante en el dispositivo.



Como se hace el acceso a disco usando lenguaje ensamblador


el sistema de almacenamiento en disco constituye el soporte externo d ela informacion.los datos se registran sobre la superficie del disco en una serie de circunferencias concentricas llamadas pistas,varias pistas, una por cada cara del disco, componen un cluster.cada pista esta dividida en porciones iguales llamadas sectores. un sector e sla unidadbasica de almacenamiento en disco.

Ejemplo:

rutina_absoluteRead
push<unidad de disco>
push<numero de sectores a leer>
push<primer sector a leer>
push SEG <buffer>
push OFFSET <buffer>
call_AbsoluteRead


PUBLIC _absolute
PROC NEAR
ARG Buffer:DWORD,Start:WORD,NumSect:WORD,Drive:BYTE=Arglen
push bp
mov bp,sp
push bx
push cx
push dx
push ds

mov al,Drive
mov cx,NumSect
mov dx,Start
lds bx,Buffer
int 26h
popo bx

pop ds
pop dx
pop cx
pop bx
pop bp
ret Arglen
ENDP

viernes, 15 de noviembre de 2013

preguntas interfaz

  1. Mencione la función del siguiente código e identifique si tiene errores o no si los tiene mencione cuales.

.MODEL                               Small
.STACK                                 100h
.DATASEG
LongitudMaxima                             EQU 1000
CadenaAInvertir                             DB LongitudMaxima DUP(?)
CadenaInvertida                             DB LongitudMaxima DUP(?)
.CODESEG
inicio:                                   mov ax,@data
                                               mov ds,ax
                                               mov ah,3Fh
                                               mov bx,0
                                               mov cx,LongitudMaxima
                                               mov dx,OFFSET CadenaAInvertir
                                               int 21h
                                               and ax,ax
                                               jz Salir
                                               mov cx,ax
                                               push cx
                                               mov bx,OFFSET CadenaAInvertir
                                               mov si,OFFSET CadenaInvertida
                                               add si,cx
                                               dec si
Lazo:                                     mov al,[bx]
                                               mov [si],al
                                               inc bx
                                               dec si
                                               loop Lazo
                                               pop cx
                                               mov ah,40h
                                               mov bx,1
                                               mov dx,OFFSET CadenaInvertida
                                               int 21h
Salir:                                     mov ah,4Ch
                                               int 21h
END Inicio
Convierta los siguientes números hexadecimales a binario y realice la suma binaria de ambos.
·         400
·         7D0



Defina que es un proceso, una macro y diga al menos dos diferencias.

lunes, 11 de noviembre de 2013

ejemplos macros y procedimientos ensamblador





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
ENDS EMPEZAR

------------------------------------------------------------------------------------------------------------------------

display MACRO cadena
 PUSH dx
 PUSH ax
 MOV dx, offset cadena
 MOV ax, 09h
 INT 21h
 POP ax
 POP dx

ENDM

programa netbeans repetir 100 veces

package lenguajes;


public class imprimir100 {
    double inicio,totaltiempo,inicio2,totaltiempo2;
    public imprimir100(){

    }
    public void proceso(){
        inicio = System.currentTimeMillis();
        for(int x=1;x<=100;x++){
            System.out.println("hola:"+x);
            totaltiempo= System.currentTimeMillis()-inicio;
            System.out.println("tiempo: "+totaltiempo);
        }
    }
    public void directo(){
        inicio2 = System.currentTimeMillis();
        int i=1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
         System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
         System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
         System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
         System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
         System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
         System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
         System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
         System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
         System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        System.out.println("hola"+i);
        i=i+1;
        totaltiempo2= System.currentTimeMillis()-inicio2;
            System.out.println("tiempo: "+totaltiempo2);
   

     
    }
    public static void main(String[] args) {
        imprimir100 imp=new imprimir100();
        imp.directo();
        imp.proceso();
    }

}