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();
    }

}



lunes, 28 de octubre de 2013

jmp



  • nombra al archivo
  • se inician moviendo en 1 a AX,BX,CX.
  • se suma 1 a AX
  • valor de AX sumado a BX
  • DX * 2
  •  

capitulo 4






1) Señale las diferencias entre un compilador y un ensamblador.

La diferencia radica en que el compilador es usado en lenguajes de alto nivel para traducer el código fuente a lenguaje máquina, y el lenguaje ensamblador es usado por lenguajes de bajo nivel para realizer dicha traducción.





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.



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) 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



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.


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.





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.



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.


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.





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.





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.





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



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.



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.



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





16) Defina una cadena de caracteres con nombre TITLE1 que contenga la constante: RGB Electronics.

TITLE1 DB 'RGB Electronics'











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









18) Muestre el código objeto hexadecimal generado por

a) DB '28' = 0001 22 28

b) DB 28 = 0001 1C



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

jueves, 26 de septiembre de 2013

instruccciones basicas en lenguaje ensamblador

Instrucciones en ensamblador
Mov.-mueve el valor de un registro o un numero hacia otro registro
ejmplo mov Bx,5 ,movAX,bx.
add.-Sumar el valor de un registro a otro registro ADD BX,5
sub.-Rest el valor de un registro o valor especifico a un registro sub ex,2 inc incrementa en 1 el valor del registro inc bx
dec.-Decrementa en 1 el valor del registo dec bx

martes, 17 de septiembre de 2013

      1. LDA #100_____direccionamiento inmediato___________________________

2. MOVE AL,BL_________registro____________________


3. MOVE DX,CX____________registro________________


4. MOVE AX,DATO_____directo_____________________


5. MOVE AX,[100]__inmediato________________________


6. MOVE AX,[BP]___________indirecto________________ DIRECCIONAMIENTO DEREGISTRO INDIRECTO


7. MOVE AX,COUNT[DI]__indirecto con desplazamiento
 
 
       8. MOVE AX[SI]___________________indexado directo__________

Complete los siguientes enunciados
a) La memoria de un computador se compone de unidades de almacenamiento llamadas____bit______


b) _____byte__________se agrupa 8 unidades de almacenamiento


c) La agrupación de 4 bits (inferiores y superiores se les llama_____nibble________


d) ____CPU_______es quien crea y controla el flujo de datos


e) ____bus de datos__________se encarga de transferir datos entre cpu, memoria y periféricos


f) ___bus de control___________se encuentran las diferentes señales encargadas de la sincronización y control del sistema


g)




4. escriba nombre y función de los registros




a) AX ______ Acumulador ___ ___utilizado para operaciones que implican entrada/salida y la mayor parte de la aritmética._____________________________________________


b) BX ___ Registro base ____ __es el único registro de propósito general que puede ser índice para direccionamiento indexado. También es común emplear el BX para cálculos. ______________________________________________


c) CX _____Registro contador (CL:CH)____________ Se utiliza como contador en bucles, en operaciones con cadenas  y en desplazamientos y rotaciones ________________________________________________


d) DX ____Registro de datos (DL:DH)____Se utiliza junto con el registro AX en multiplicaciones y divisiones, en la instrucción CWD y en IN y OUT para direccionamiento indirecto de puertos. _____________ ________________________________________________


e) DS _____Registro del segmento de datos__La dirección inicial de un segmento de datos de programa es almacenada en el registro DS. En términos sencillos, esta dirección, mas un valor de desplazamiento en una instrucción, genera una referencia a la localidad de un byte especifico en el segmento de datos. ______________ ________________________________________________


f) ES ___ Registro del segmento extra____Alguna operaciones con cadenas de caracteres (datos de caracteres) utilizan el registro extra de segmento para manejar el direccionamiento de memoria. En este contexto, el registro ES esta asociado con el registro DI (índice). ______________ ________________________________________________


g) SS ____Registro del segmento de pila____El registro SS permite la colocación en memoria de una pila, para almacenamiento temporal de direcciones y datos.  _____________ ________________________________________________


h) CS ___Registro del segmento de código______ El DOS almacena la dirección inicial del segmento de código de un programa en el registro CS. Esta dirección de segmento, mas un valor de desplazamiento en el registro apuntador de instrucción (IP), indica la dirección de una instrucción que es buscada para su ejecución.____________ ________________________________________________


i) BP ___Registro de apuntadores base______ El BP de 16 bits facilita la referencia de parámetros, los cuales son datos y direcciones transmitidos vía pila. ____________ ________________________________________________


j) SI ___Registro índice fuente_____ El registro índice fuente de 16 bits es requerido por algunas operaciones con cadenas (de caracteres). En este contexto, el SI esta asociado con el registro DS._____________ ________________________________________________


k) DI ____Registro ìndice destino_____ El registro índice destino también es requerido por algunas operaciones con cadenas de caracteres. En este contexto, el DI esta asociado con el registro ES. ____________ ________________________________________________


l) SP ___ Registro apuntador de la pila_____es el que se reserva el procesador para uso propio en instrucciones de manipulado de pila. Por lo general , el programador no debe alterar su contenido._____________ ________________________________________________


m) IP __Registro apuntador de la siguiente instrucción_____contiene el desplazamiento de dirección de la siguiente instrucción que se ejecuta. El IP esta asociado con el registro CS en el sentido de que el IP indica la instrucción actual dentro del segmento de código que se esta ejecutando actualmente. ______________ ________________________________________________


n) F ___ Registro de banderas (8 bits)____sirven para indicar el estado actual de la maquina y el resultado del procesamiento.______________ ________________________________________________