miércoles, 27 de febrero de 2019

Unidad No.1- Programas utilizando la documentacion emu8086.inc

Programa No.1: Hola Mundo con print string


Ejecución del programa:


 

Código del programa:
include 'emu8086.inc'
org 100h

.code
printn " " 
printn "hola mundo"


ret

Programa No.2: Hola mundo con gotoxy 


Ejecución del programa:




Código del programa:

include 'emu8086.inc'
org 100h

.code
gotoxy 5,5
printn "hola mundo"


ret

Programa No.3: Hola mundo con putc


Ejecución del programa:




Código del programa:

include 'emu8086.inc'
org 100h

.code
gotoxy 5,5
printn "hola mundo" 
putc 'A'


ret

Programa No. 4: Hola mundo con cursoron


Ejecución del programa:



Código del programa:

include 'emu8086.inc'
org 100h   

.code
gotoxy 5,5
print "hola mundo"
cursoron
call scan_num

define_scan_num

ret

Programa No.5: Hola mundo final


Ejecución del programa:





Código del programa:

name 'hola mundo'
include 'emu8086.inc'

org 100h

.code
gotoxy 5,5
printn "hola mundo"

gotoxy 5,6
printn "hola mundo 2"

gotoxy 5,7
print "dame un numero:"
call scan_num

define_scan_num
putc "A"


ret

Programa No.6: Ejemplo de print_string


Ejecución del programa:



Código del programa:

include 'emu8086.inc'

org 100h

.code    
Cursoroff      ;apaga el cursor
call scan_num  ;pide un numero

define_scan_num  ;define la funcion 
gotoxy 2,5 
putc 'A'   ;imprime un solo caracter
gotoxy 5,7    ;define en donde se ira a la pantalla
print 'dame un numero'
call scan_num   
mov ax,cx 
gotoxy 5,7 
call print_num                   
   
define_print_num 
define_print_num_uns
end
ret

Programa No.7: Hola mundo(pagina de internet)


Ejecución del programa:



Código del programa:

include emu8086.inc

ORG    100h

PRINT 'Hello World!'

GOTOXY 10, 5

PUTC 65           ; 65 - is an ASCII code for 'A'
PUTC 'B'

RET               ; return to operating system.
END               ; directive to stop the compiler.


Programa No.8: Pide tu nombre desde teclado y muestra un mensaje en consola saludandote(pagina de internet) 


Ejecución del programa:



Código del programa:

; demonstrate get_string and print_string
;----------------------------------------
include 'emu8086.inc'
ORG    100h

LEA    SI, msg1       ; set up pointer (SI) to msg
                      ; to ask for the number
CALL   print_string   ; print message that SI points to

LEA    DI, buffer     ; set up pointer (DI) to input buffer
MOV    DX, bufSize    ; set size of buffer
CALL   get_string     ; get name & put in buffer

LEA    SI, newln      ; point at CR/LF / Hello message 
CALL   print_string   ; print message that SI points to

RET                   ; return to operating system.

; data
msg1   DB "Enter your name: ", 0  
newln  DB 13, 10
       DB "Hello, "
buffer DB 20 DUP (0)  ; input buffer for get_string   
bufSize = $-buffer    ; calculates size of buffer

DEFINE_GET_STRING
DEFINE_PRINT_STRING
END                   ; directive to stop the compiler.

Programa No.9: Pide un numero desde teclado y lo muestra en la consola(pagina de internet)

Link del programa: https://drive.google.com/open?id=1E9LDLX1w-SfaVNI0BpHz_CKtrp27CwVx

Ejecución del programa:



Código del programa:

; demonstrate scan_num, print_num, pthis
;----------------------------------------
include 'emu8086.inc'
ORG    100h

LEA    SI, msg1       ; ask for the number
CALL   print_string   ;
CALL   scan_num       ; get number in CX.

MOV    AX, CX         ; copy the number to AX.

; print the following string:
CALL   pthis
DB  13, 10, 'You have entered: ', 0

CALL   print_num      ; print number in AX.

RET                   ; return to operating system.

; data
msg1   DB  'Enter the number: ', 0

; macros to define procs
DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS  ; required for print_num.
DEFINE_PTHIS

END                   ; directive to stop the compiler.

Programa No.10: Suma de dos numeros(ambrocio)


Ejecución del programa:



Código:


; You may customize this and other start-up templates; 
; The location of this template is c:\emu8086\inc\0_com_template.txt

org 100h

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

.data
suma db 2 dup (?) ;manera de declarar un arreglo de 2 lugares 
.code
sumas proc
    print " Introduce el primer numero: " ;macro de la lib
    call scan_num ;llamada a un procedimiento para pedir un num
    mov suma[0],cl ;mueve el valor de cl a la posicion 0 del array   
    printn " " ;macro que imprime un espacio 
    print " Introduce el segundo numero: " ;macro que imprime un letrero
    call scan_num ;llamada a un procedimiento para pedir num
    mov suma[1],cl ;;mueve el valor de cl a la posicion 1 del array   
    xor ax,ax ;xor nemonico que limpia registros
    add al,suma[0] ;valor de suma pos 0 
    add al,suma[1] ;valor de suma pos 1
    printn " " ;macro de la libreria pone un espacio y retorno de carro
    print " La suma es: " ;macro que imprime un letrero 
    call print_num ;llamada a un procedimiento para imprimir un num del reg 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_string ;no se uso
define_print_num ;es del print_num
define_print_num_uns ;conversion a decimal del scan_num
define_scan_num ;procedimiento del scan_num
end

ret

Programa No.11: Mayor o menor de edad(ambrocio)



Ejecución:





Programa No.12: Aprobado o reprobado(ambrocio)


Ejecución:














martes, 26 de febrero de 2019

Unidad No.1-Programas del video "registro de banderas en ensamblador 8086"


Registro de banderas.- Es un registro de 16 bits, de los cuales nueve sirven para indicar el estado actual de la maquina y el resultado del procesamiento

Programa No.1: 


Ejecución del programa:




Código:

org 100h

.model small
.stack
.data

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


.exit
end

Nota: La extension maxima del registro al es 255 y al intentar sumarle uno se acciona la bandera indicando que existe un acarreo de 1

Programa No.2:


Ejecución del programa:




Código:

org 100h


.model small
.stack
.data

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

.exit
end

Nota: Al intentar restar 2 - 2 y dar como resultado el numero cero se acciona la bandera ZF indicando que el resultado fue un cero

Programa No.3 


Ejecución del programa:




Código:

org 100h

org 100h

.model small
.stack
.data

.code
     
     
     mov al,1
     mov bl,4
     sub al,bl

.exit
end

ret

Nota: Al intentar restar dos numeros en el cual el segundo numero es mayor que el primero se acciona la bandera SF, indicando que el resultado es un numero negativo

Programa No.4:


Ejecución del programa:




Código:

org 100h



.model small
.stack
.data

.code
    
     
     mov al,100
     mov bl,50
     add al,bl

.exit
end

ret

Nota: Se acciona la bandera 0F debido a que el resultado se encuentra fuera del rango de los 8 bits, es decir, no esta entre los valores -128 a 127

















Unidad No.1- Examen-Cuestionario

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

1.4- 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.





1.7- 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.



1.8- 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.





jueves, 21 de febrero de 2019

Unidad No.1-Documentación de emu8086 inc

emu8086.inc define las siguientes macros :

PUTC char - macro con 1 parámetro, imprime un carácter ASCII en la posición actual del cursor.

GOTOXY col, fila - macro con 2 parámetros, establece la posición del cursor.

PRINT string - macro con 1 parámetro, imprime una cadena.

PRINTN string - macro con 1 parámetro, imprime una cadena. Lo mismo que PRINT pero agrega automáticamente "retorno de carro" al final de la cadena.

CURSOROFF - apaga el cursor de texto.

CURSORON - enciende el cursor de texto.

Para usar cualquiera de las macros anteriores, simplemente escriba su nombre en algún lugar de su código y, si es necesario, los parámetros


emu8086.inc también define los siguientes procedimientos :

PRINT_STRING : procedimiento para imprimir una cadena terminada en nulo en la posición actual del cursor, recibe la dirección de la cadena en el registro DS: SI . Para usarlo declare: DEFINE_PRINT_STRING antes de la directiva END .

PTHIS : procedimiento para imprimir una cadena terminada en nulo en la posición actual del cursor (igual que PRINT_STRING), pero recibe la dirección de la cadena desde la Pila. La cadena TERMINADA A CERO debe definirse justo después de la instrucción CALL. Por ejemplo: 

CALL PTHIS 
db 'Hello World!', 0

Para usarlo declare: DEFINE_PTHIS antes de la directiva END .

GET_STRING : procedimiento para obtener una cadena terminada en nulo de un usuario, la cadena recibida se escribe en el búfer en DS: DI , el tamaño del búfer debe estar en DX . El procedimiento detiene la entrada cuando se presiona 'Enter'. Para usarlo declare: DEFINE_GET_STRING antes de la directiva END .

CLEAR_SCREEN : procedimiento para borrar la pantalla (que se realiza al desplazar la ventana completa de la pantalla) y establecer la posición del cursor en la parte superior. Para usarlo declare: DEFINE_CLEAR_SCREEN antes de la directiva END .

SCAN_NUM : procedimiento que obtiene el número FIRMADO de varios dígitos del teclado y almacena el resultado en el registro CX . Para usarlo declare: DEFINE_SCAN_NUM antes de la directiva END .

PRINT_NUM : procedimiento que imprime un número firmado en el registro AX . Para usarlo declare: DEFINE_PRINT_NUM y DEFINE_PRINT_NUM_UNS antes de la directiva END .

PRINT_NUM_UNS : procedimiento que imprime un número sin firma en el registro AX . Para usarlo declare: DEFINE_PRINT_NUM_UNS antes de la directiva END .

Para utilizar cualquiera de los procedimientos anteriores, primero debe declarar la función en la parte inferior de su archivo (pero antes de END ), y luego usar la instrucción CALL seguida de un nombre de procedimiento.

Unidad No.-1 Hola mundo utilizando libreria emu8086.inc

Link del archivo: https://drive.google.com/open?id=1w2kTHxaDS0G7pYAqkwItVZ4WVaEse9EC

Ejecución del programa:


Código:

name 'hola mundo'
include 'emu8086.inc'

org 100h

   
.code  
print " "
print "hola mundo" 


ret




miércoles, 20 de febrero de 2019

Unidad No.1-Programa que suma dos numeros utilizando la libreria emu8086.inc


Ejecución del programa:




Código:

;creado por Ivan Alejandro Gutierrez
name 'suma dos numeros'
include 'emu8086.inc'
org 100h        

.data
suma db 2 dup (?)

.code
sumas proc
    print " "
    print "Introduce el primer numero: "
    call scan_num
    mov suma[0],cl
    print " "
    print "Introduce el segundo numero: "
    call scan_num
    mov suma[1],cl
    print " "
    xor ax,ax
    add al,suma[0]
    add al, suma[1]
    print " "
    print "La suma es: "
    call print_num
sumas endp

exit:
  print " "
  print " "
  print "Presiona enter para salir..."
  mov ah,0
  int 16h
  ret
define_print_string
define_print_num
define_print_num_uns
define_scan_num
end
                        
                        

ret





martes, 19 de febrero de 2019

Unidad No.1- Programa que divide dos numeros

Link del archivo: https://drive.google.com/open?id=1xxA4a9cYvTWIyFoYfNHj7cNHlTubU9V9

Ejecución del programa:


Código:

org 100h

mov ax,9
mov bx,9
div bx

ret


Unidad No.-1 Programa que verifica si una persona es mayor de edad o no


Ejecución del programa:



Código:

org 100h

.model samll
.stack 64 ;segmento de pila

.data   
diez db 10;variable para poder imprimir dos caracteres(se multiplica por el primer valor para sacar decimales)
num1 db 0 ;variable para edad
mens db 'Ingrese la edad: $'
mens1 db 'Eres mayor de edad $'
mens2 db 'Eres menor de edad $'

.code
  inicio proc Far
    mov ax, @data ;direccionamiento del segmento datos
    mov ds, ax ;los datos se mueven al registro ax
    ;poner el primer letrero
    mov ah,09
    lea dx, mens
    int 21h   
    
    mov ah,01
    int 21h
    sub al,30h;convertir a valor 
    mul diez;se multiplica el numero ingresado
    mov num1,al
    
    mov ah,01
    int 21h
    sub al,30h
    add num1,al;se suma a las decenas obtenidas
    mov al,num1
    
    cmp al,18
    jge mayor ;je seria en caso de que sea mayor
    jmp menor
    
    mayor:
     mov ah,09
     lea dx,mens1
     int 21h 
     jmp fin  
     
    menor:
     mov ah,09
     lea dx,mens2
     int 21h
     jmp fin 
     
    fin:
     mov ax, 4c00h  
    
    inicio endp
    
   


ret