miércoles, 6 de marzo de 2019

El procesador y sus registros internos

Los registros del procesador se emplean para controlar instrucciones en ejecución, manejar direccionamiento de memoria y proporcionar capacidad aritmética. Los registros son direccionables por medio de un nombre. Los bits por convención, se numeran de derecha a izquierda, como en:
            ...  15   14   13   12 11   10   9   8   7   6   5   4   3   2   1   0
Registros de propósito general. 
Los registros de propósito general AX, BX, CX y DX son los caballos de batalla del sistema. Son únicos en el sentido de que se puede direccionarlos como una palabra o como una parte de un byte. El ultimo byte de la izquierda es la parte "alta", y el ultimo byte de la derecha es la parte "baja". Por ejemplo, el registro CX consta de una parte CH (alta) y una parte Cl (baja), y usted puede referirse a cualquier parte por su nombre. 
Registro AX. El registro AX, el acumulador principal, es utilizado para operaciones que implican entrada/salida y la mayor parte de la aritmética. Por ejemplo, las instrucciones para multiplicar, dividir y traducir suponen el uso del AX. También, algunas operaciones generan código más eficiente si se refieren al AX en lugar de a los otros registros. 
Registro BX. El BX es conocido como el registro base ya que 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. 
El CX se utiliza en operaciones de iteración, como un contador que automáticamente se incrementa o decremento de acuerdo con el tipo de instrucción usada.
 Registro DX. El DX es conocido como el registro de datos. Alguna operación de entrada/salida requieren uso, y las operaciones de multiplicación y división con cifras grandes suponen al DX y al AX trabajando juntos. 
Resultado de imagen para registros de proposito general









El concepto de interrupciones 

Una interrupción es una situación especial que suspende la ejecución de un programa de modo que el sistema pueda realizar una acción para tratarla. Tal situación se da, por ejemplo, cuando un periférico requiere la atención del procesador para realizar una operación de E/S.









Proceso de ensamblado y ligado

El proceso de ensamblado es el mismo sin importar el ensamblador que se está utilizando, aunque para las explicaciones se utilizara la sintaxis del ensamblador Turbo Assembler el cual fue desarrollado por Borland y el enlazador Turbo Linker.
Al escribir un programa en lenguaje ensamblador es necesario utilizar uimg6.jpgn editor de texto y guardar el archivo con la extensión asm para que sea reconocida por el ensamblador.
Una vez contando con el programa con extensión asm es necesario acceder con la consola a la ubicación del archivo y escribir “TASM Archivo.asm” siendo Archivo el nombre del archivo creado anteriormente, el nombre del archivo no debe superar los 8 caracteres, debe empezar con letra y no debe contener caracteres especiales.
Si el archivo cumple los requisitos entonces el ensamblador producirá un código objeto, el cual es una traducción a código máquina del programa, en caso de que el ensamblador encuentre un error en el programa lo indicará, así como la línea en la que se encuentra ese error.
Después de que se cree exitosamente el código objeto es necesario utilizar el enlazador, para el cual se escribirá en la consola “Tlink Archivo.obj” siendo Archivo el nombre del programa.
La función del enlazador es verificar si existen llamadas a procedimientos de una librería de enlace, en caso de ser asi copia cualquier procedimiento requerido y lo combina con el código objeto, generando de esta manera un archivo ejecutable con extensión exe.
EJEMPLO
Ejemplo de un programa en ensamblador que previamente ya paso por el proceso de ensamblado y ligado.
Desplegado de mensajes en el monitor

Todos los gráficos y el texto que se muestran en el monitor se escriben en la RAM de visualización de video, para después enviarlos al monitor mediante el controlador de video. El controlador de video es en sí un microprocesador de propósito especial, que libera a la CPU principal del trabajo de controlar el hardware de video.
Un monitor de pantalla de cristal líquido (LCD) digital directo recibe un flujo de bits digitales directamente desde el controlador de video, y no requiere del barrido de trama.
En clases anteriores se tomaron en cuenta la palabra reservada “lea” para poder desplegar mensajes en pantalla, a continuación, se describe cómo funciona.
LEA. - Carga un registro con la dirección de desplazamiento de alguna variable en memoria. Su formato es LEA REG, Variable.

Practica 19 Resta de números Hecho por Yulissa muraira

Código:

;creado por Yulissa Muraira Primero
name 'resta dos numeros'
include 'emu8086.inc'
org 100h

.data
resta db 2 dup (?)

.code
restas proc
   printn ""   ;uso de macro de libreria, un espacio en blanco
   print "Introduce el primer numero: ";usa macro print
   call scan_num     ;Usa procedimiento de scan_num
   mov resta[0],cl  ;guarda el espacio en el arreglo
   printn ""   ;usa macro print
   printn "Introduce el segundo numero: "
   call scan_num     ;
   sub resta[1],cl
   print " "
   xor ax,ax
   add al,resta[0]
   add al, resta[1]
   printn ""
   print "La resta es: "

   call print_num
restas endp

exit:
print " "
printn " "
printn "Presiona enter para salir..."
mov ah,0
int 16h
ret
define_print_string
define_print_num  ;Se uso el procedimiento
define_print_num_uns
define_scan_num  ;porque se uso el proc scan_num
end



ret

Ejecucion

Practica 18 Programa de Ambrocio Isaias Suma de dos números

Codigo
name "suma de dos numeros"
include "emu8086.inc"
org 100h

.data
suma db 2 dup (?)    ;Declaramos un arreglo de tamaño 2
.code
sumas proc
    print " Introduce el primer numero: ";Usos de la macro print de la libreria
    call scan_num     ;uso del procedimiento  Scan_num
    mov suma[0],cl
    printn " "       ;Macro que imprime un string y retorno de carro
    print " Introduce el segundo numero: "  ; macro print
    call scan_num    ;Procedimiento scan_num
    mov suma[1],cl
    xor ax,ax          ;Se usa para limpiar el registro ax
    add al,suma[0]
    add al,suma[1]
    printn " "
    print " La suma es: "
    call print_num    ;Usa un procedimiento de la macro para imprimir un numero en ax
sumas endp
exit:
    print " "
    printn " "
    print "Presiona enter para salir..."
    mov ah,0  ;servicio de pulsación de teclado
    int 16h   ;invoca a servicios de taclado
    ret

define_print_num    ;Viene del procedimiento print_num
define_print_num_uns     ;por si se usa un numero decimal
define_scan_num     ;ES por el uso del procedimiento scan_num
end


Ejecucion

Practica 17 Ingresar un numero y se muestra en pantallas

Codigo

Ejecucion



practica 16 Imprimir hola mover la ubicación con got

Codigo

Ejecucion

Practica 13 hola mundo usando la libreria emmu8086

Codigo
nclude 'emu8086.inc'

org 100h


.code
gotoxy 6,10 ; Usando la macro de la libreria
print ""  ;Macro
Print "Hola mundo"
gotoxy 6,12
printn "Hila mundo 2"
gotoxy 6,14
print "Letrero fin"
gotoxy 19,14
putc 'A'



ret
EJECUCION

Practica 15 libreria emmu8086

Codigo
include 'emu8086.inc'

.data
Suma db 2 dup (?)

Sumas proc
    printn "Ingresar el primer numero: "
    call scan_num
    mov suma[0],cl
    printn ""
    printn "Ingresa el segundo numero: "
    call scan_num
    mov suma[1],cl
    printn ""
 
 
    xor ax,ax
    add al,suma[0]
    add al,suma[1]
    printn ""
    printn "La suma es: "
    call print_num
 
   Sumas endp
exit:

printn

print "Presines enter para salir.." 
mov ah,0
int 16h
ret

  define_print_string
  define_print_num
    define_print_num_uns
    define_scan_num
    end


Ejecucion


Practica registros de banderas (ejemplos)

Ejemplo bandera 1 acarreo

CODIGO
.model small
.stack
.data

.code
     mov al,255
     mov bl,1
     add al,bl


.exit
end

ejecucion

 Ejemplo bandera 2 resta

 CODIGO

.model small
.stack
.data

.code
     mov al,2
     mov bl,2
     sub al,bl


.exit
end

EJECUCION

Ejemplo 3