Introducci - PowerPoint PPT Presentation

About This Presentation
Title:

Introducci

Description:

Introducci n a NASM M.C.C. Sergio Luis Castillo Valerio Esta presentaci n puede reproducirse libremente siempre que se mantengan estos derechos de autor. – PowerPoint PPT presentation

Number of Views:36
Avg rating:3.0/5.0
Slides: 32
Provided by: sergioc204
Category:

less

Transcript and Presenter's Notes

Title: Introducci


1
Introducción a NASM
M.C.C. Sergio Luis Castillo Valerio Esta
presentación puede reproducirse
libremente siempre que se mantengan estos
derechos de autor.
2
Partes de un programa
  • Todo programa de bajo nivel se compone de tres
    segmentos (o secciones)
  • Datos (opcional) Contiene la definición y los
    valores iniciales de las variables que utiliza
    nuestro programa.
  • Pila (opcional) Reserva memoria para la pila
    (stack)?
  • Código Contiene las instrucciones del programa.
    El segmento de código se subdivide en
    procedimientos. Debe haber por lo menos un
    procedimiento principal.

3
Definición de segmentos
  • Los segmentos se definen con la directiva
    segment.
  • Sintáxis
  • segment nombre tipo
  • Donde nombre es el nombre del segmento. Este
    nombre es definido por el programador.
  • Y tipo puede ser data, stack o code.
  • Por ejemplo
  • segment variables data

4
Definición de segmentos
  • En nuestros programas definiremos los segmentos
    en el orden siguiente
  • segment pila stack
  • segment datos data
  • segment programa code
  • Cada segmento termina donde inicia el siguiente.
  • La etiqueta ..start define el procedimiento
    principal dentro del segmento de código.

5
Definición de variables
  • En el segmento de datos se definen las variables
    de nuestro programa.
  • En ensamblador para definir una variable se
    define
  • Su nombre
  • Su tamaño (byte, palabra, doble palabra, etc.)?
  • Las directivas db, dw, dd, dq y dt se usan para
    definir el tamaño de una variable. y asignarles
    un valor inicial.

DB Define byte DW Define Word DD Define
double word dq Define quad word dt Define ten
bytes.
6
Reservación de espacio para variables
  • En NASM se puede reservar espacio para variables
    sin asignar un valor inicial usando la directiva
    resx, dónde xb,w,d,q,t
  • resb reserva un byte.
  • resw reserva una palabra.
  • resd reserva una doble palabra.
  • resq reserva una cuadrúple palabra.
  • rest reserva 10 bytes.

7
Programa ejemplo
  • Programa que suma los primeros 30 enteros.
  • Pseudocódigo

Suma 0 i 1 Mientras (i 30) haz
sumasumai i i1 fin_mientras fin.
8
Programa ejemplo
  • En ensamblador

AX Suma, BX i segment pila stack Define
segmento de pila resb 256 Reserva 256
bytes segment programa code Define segmento de
código ..start mov ax,0 Suma0 mov bx,1
i 1 mientras1 cmp bx,30 Mientras (bx 30)
haz jg fin_mientras1 add ax,bx
sumasumai inc bx i i 1 jmp
mientras1 fin_mientras1 mov ax,4c00h
fin. int 21h
9
Ejercicio 1
  • Implementa el siguiente pseudocódigo en
    ensamblador

x0 y1 z0 Repite z x y x y y
z Hasta (z gt 1000)?
10
Segmento de datos
  • Cuando se programa en bajo nivel en la PC en modo
    real, nos enfrentamos con algunas características
    del MS-DOS.
  • Una de ellas es el PSP Prefix Segment Program.
  • Cuando el MS-DOS carga un ejecutable de tipo EXE,
    carga a memoria los segmentos de pila, datos y
    código.
  • Inicializa SS y CS para que apunten a sus
    respectivos segmentos.

11
PSP
  • Crea el PSP, que es un bloque de 256 bytes que
    contiene datos e instrucciones que el SO utiliza
    para retomar el control del sistema cuando
    nuestro programa termine su ejecución.
  • Inicializa DS para que apunte al PSP, no a
    nuestro segmento de datos.
  • Por tanto, siempre que se utiliza un segmento de
    datos es necesario inicializar DS a nuestro
    segmento de datos.

12
Inicialización de DS
  • Para esto, cuando utilicemos un segmento de datos
    siempre ejecutaremos las siguientes
    instrucciones
  • MOV AX, Nombre_segmento_datos
  • MOV DS,AX
  • Esto hace que DS apunte a nuestro segmento de
    datos y que podamos accesar los datos que
    definamos en nuestro programa.

13
Ejercicio 2
  • El siguiente algoritmo calcula la raíz cuadrada
    aproximada de un número positivo N. Impleméntalo
    en ensamblador

Lee(N)? Y N Y Y/2 Repite X
Cociente(N/Y)? X X Y X
Cociente(X/2)? Hasta (ABS(X-Y)
1)? Despliega(X)? Fin.
14
(No Transcript)
15
Niveles de Acceso en Lenguaje Ensamblador
  • La programación de entradas-salidas es el área en
    la que el lenguaje ensamblador permite a los
    programadores tener gran flexibilidad y potencia.
  • Un programa en ensamblador puede tener tres
    niveles de acceso
  • Nivel 0 Hardware
  • Nivel 1 Funciones del BIOS
  • Nivel 2 Funciones del Sistema Operativo.

16
Nivel 0 Hardware
  • Se requiere la información técnica de referencia
    del sistema para programar a este nivel.
  • Se accesan directamente las áreas de memoria y
    los registros de E/S de los periféricos a
    programar.
  • Toda la operación de E/S queda bajo la
    responsabilidad del programador.

17
Nivel 1 Funciones del BIOS
  • El BIOS (Basic Input Output System) ofrece una
    serie de funciones básicas de E/S.
  • Se invocan por medio de Interrupciones de
    Software.
  • Se requiere la información de referencia del BIOS
    para poder utilizar estas interrupciones.

18
Interrupciones
  • Interrupciones de hardware y de software
  • Las solicitudes de interrupciones de hardware son
    producidas por algún evento de E/S (opresión de
    una tecla, recepción de un carácter en el puerto
    serie, etc.)?
  • De ser aceptadas por el procesador, detienen la
    ejecución del programa, guardan? el estado del
    procesador y lo hacen saltar? a una rutina de
    servicio? para atender al evento que produjo la
    interrupción.

19
Interrupciones
  • Una rutina de servicio? es un procedimiento que
    ejecuta las instrucciones de E/S necesarias para
    atender al dispositivo donde se produjo el
    evento.
  • Una vez atendido el evento, el procesador
    recupera su estado inicial y continúa la
    ejecución del programa suspendido.

20
Solicitud de Interrupción (IRQ)?
  • Cada dispositivo de E/S tiene asociado un número
    de solicitud de interrupción único (Interrupt
    ReQuest) que lo identifica.
  • Cuando algún evento de E/S produce una solicitud
    de interrupción (IRQ), el procesador identifica
    esa IRQ y determina si la atiende o no.

21
Tabla de Vectores de Interrupción
  • En caso de atender una solicitud de interrupción,
    el procesador utiliza la IRQ como una especie de
    subíndice para buscar en la memoria baja la
    dirección de inicio de la rutina de servicio
    adecuada para el evento.
  • Los primeros 1024 bytes de la memoria RAM
    (Segmento 0000h) están destinados a la Tabla de
    Vectores de Interrupción.

22
Tabla de Vectores de Interrupción
  • La Tabla de Vectores de Interrupción contiene las
    direcciones de inicio de las Rutinas de Servicio
    de los dispositivos de E/S del sistema.
  • Cada entrada de esta Tabla ocupa 4 bytes 2 para
    el segmento y 2 para el desplazamiento.
  • El procesador multiplica por 4 el IRQ y obtiene
    la entrada a la tabla que contiene la dirección
    de inicio de la rutina de servicio a la que debe
    saltar.

23
Tabla de Vectores de Interrupción
  • Por ejemplo, para la interrupción 10h
  • 10h x 4 40h
  • En la celdas 040h a 043h están almacenados el
    Segmento y el Desplazamiento de la dirección de
    inicio de la rutina de servicio para la Int 10h
  • Para Int 11h
  • 11h x 4 44h
  • En la celdas 044h a 047h están almacenados el
    Segmento y el Desplazamiento de la dirección de
    inicio de la rutina de servicio para la Int 11h

24
Interrupciones de BIOS(Basic Input Output
System)?
25
Interrupciones de BIOS
  • Las interrupciones del BIOS son interrupciones de
    software que nos proveen de un conjunto de
    rutinas para el manejo básico de entradas y
    salidas en bajo nivel.
  • Como toda interrupción de software, se invocan
    con la instrucción INT , donde identifica a
    la Interrupción.
  • Aunque el origen es distinto, el procesador
    maneja igual los 2 tipos de interrupciones.

26
Llamada a las rutinas de BIOS
  • Como toda subrutina, la mayoría de las
    interrupciones del BIOS requiere que se le
    pasen? argumentos.
  • Estos argumentos se transfieren por medio de los
    registros.
  • Hay varias rutinas de BIOS multifunción.
  • En estas rutinas multifunción, la función se
    especifica por medio del registro AH.

27
Llamada a las rutinas de BIOS
  • Por tanto, pasar argumentos a estas
    interrupciones equivale a guardar o mover a los
    registros indicados en la definición de la
    interrupción los valores adecuados para cada
    función.
  • Esta información acerca de cada interrupción, la
    función que realizan, sus parámetros de entrada y
    sus datos de salida se encuentran en los
    manuales de referencia de la IBM PC y compatibles.

28
Algunas rutinas de BIOS
  • Algunas interrupciones de BIOS son
  • Int 5h Copia a la impresora el contenido de la
    pantalla en modo texto.
  • Entrada Ninguna.
  • Regresa Nada
  • Int 11h Banderas de BIOS del equipo
  • Entrada Ninguna
  • Regresa AX Palabra de equipo
  • La palabra de equipo es un grupo de bits que
    definen algunas características como número de
    puertos serie y paralelo, número de drives y
    otros.

29
Algunas rutinas de BIOS
  • Int 10h Rutinas de video. Esta es realmente una
    familia de rutinas que tienen que ver con el
    manejo de la tarjeta de video.
  • Por ejemplo
  • Int 10h/0 Fija el modo de video
  • Entrada AH 0, AL No. de modo
  • Regresa Nada
  • Int 10h/0Ch Dibuja un punto en modo gráfico
  • Entrada AH 0Ch, AL Color del punto,
    CX Columna, DX Renglón.
  • Regresa Nada.

30
Algunas rutinas de BIOS
  • Int 10h/6 Desplaza página activa hacia arriba.
  • Entrada AH 6, AL No. de líneas a desplazar
    (0 para página completa), CLFila, Esquina
    Superior Izquierda, CHColumna, Esq. Sup.
    Izquierda, DHFila, Esq. Inferior Derecha,
    DLColumna, Esq. Inf. Derecha, BHAtributo a ser
    usado.
  • Regresa Nada.
  • Esto ejemplos ilustran muy bien que algunas
    funciones requieren más parámetros que otras.

31
Uso de rutinas de BIOS
  • A manera de ejemplo, presentamos el código
    utilizado para limpiar la pantalla utilizando Int
    10h/6.

Mov cx,0000h Fila 0, Col 0, esq. Sup.
Izq. Mov dx,184fh Fila 24, Col 79, esq. Inf.
Der. Mov bh,7 Atributo Normal mov al,0
Página completa. Int 10h
Note que es necesario inicializar los registros
adecuados antes de ejecutar la instrucción Int.
De esta manera aseguramos que se pasen los
argumentos adecuados a la rutina de servicio.
Write a Comment
User Comments (0)
About PowerShow.com