martes, 26 de febrero de 2019

PRÁCTICA #14: PROGRAMAS BIBLIOTECA DE FUNCIONES: EMU8086


Enlace:
Biblioteca de funciones comunes: emu8086.inc

Ejemplo #1.

Código emu8086:


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.

Corrida en pantalla:


Ejemplo  #2.

Código emu8086:
    ; 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.
Corrida en pantalla:


Ejemplo #3.

Código emu8086:

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

Corrida en pantalla:


PRÁCTICA #13: MACROS EMU8086



Código emu8086:

include 'emu8086.inc'


org 100h

.code
gotoxy 6,10 ;usando la macro de la libreria, agrega el cursor en esas pocisiones
print ""           ;macro que imprime una cadena
print "Hola mundo"   
gotoxy 6,12
printn "Hola mundo 2"  
print "Letrero fin" 

gotoxy 6,14  
putc 'A' 
print 'Dame un numero'
call scan_num 
define_scan_num

ret

Resultado corrida en pantalla:





lunes, 25 de febrero de 2019

VIDEO: REGISTROS DE BANDERAS


REFERENCIA VÍDEO: https://www.youtube.com/watch?v=4puXc5S2WOg

REGISTRO DE BANDERAS.

Es un registro de 16 Bits, de los cuales nueve sirven para indicar el estado actual de la máquina y el resultado del procesamiento.

Ejemplo Bandera #1 :

Código.

.MODEL SMALL
.STACK
.DATA

.CODE  
    MOV AL, 255
    MOV BL, 1
    ADD AL,BL

.EXIT 


END

Corrida en pantalla.





Ejemplo Bandera #2:

Código.

.MODEL SMALL
.STACK
.DATA

.CODE  
    MOV AL, 255
    MOV BL, 1
    SUB AL,BL

.EXIT 

END

Corrida en pantalla.


Ejemplo Bandera #3:

Código.

.MODEL SMALL
.STACK
.DATA

.CODE  
    MOV AL, 100
    MOV BL, 50
    ADD AL,BL

.EXIT 

END

Corrida en pantalla.





miércoles, 20 de febrero de 2019

PRÁCTICA #12 VÍDEO ENSAMBLADOR: SUMA DE DOS NÚMEROS

Para hacer uso cualquiera de las funciones de Emu8086.inc es necesario ingresar la siguiente linea de código al iniciar el programa en donde se vaya a implementar:

include 'emu8086.inc'

Emu8086.inc define los siguientes macros:
  • PUTC char: Imprime un solo caracter
  • GOTOXY col, row: Coloca el cursor en las coordenadas solicitadas
  • PRINT string: Imprime una cadena
  • PRINTN string: Imprime una cadena y tras imprimirla hace un salto de linea.

CÓDIGO EMU8086 "SUMA DE DOS NÚMEROS"

Referencia: Vídeo Suma de Dos Números

name "Suma dos numeros"
include "emu8086.inc"
org 100h

.data
suma db 2 dup (?)  ;Creamos un arreglo llamado suma de 2 espacios de tipo byte

.code
Sumas proc      ;Se crea un proceso de sumas y se piden los numeros
    printn " "
    print "Introduce el primer numero ==>" ;etiqueta para pedir el primer dato
    call scan_num  ;obtiene el dato que fue ingresado
    mov suma[0],cl   ;guarda el valor en cl,y lo manda al arreglo
    printn " "    ;agrega un salto de linea
    print "Introduce el segundo numero ==>" ;etiqueta para pedir el segundo dato
    call scan_num   ;
    mov suma[1],cl
    printn " "
    xor ax,ax     ;se limpia el registro ax
    add al,suma[0] ;se manda la suma al registro al
    add al,suma[1] ;se manda para poder imprimir
    printn " "
    print "La suma es: "
    call print_num ;imprime el valor de la suma
Sumas endp 

exit:       ;funcion para salir del programa
    printn " "
    printn " "
    print "Presiona enter para salir..";etiqueta con instruccion para salir del programa
    mov ah,0   
    int 16h
    ret 
    
   define_print_string   ;apartado de definicion de comandos emu8086.inc
   define_print_num
   define_print_num_uns
   define_scan_num           
   end

Muestra en pantalla de código en EMU8086:



Corrida en pantalla:





martes, 19 de febrero de 2019

PRÁCTICA #11 COMPARACIÓN EDAD

org 100h

.MODEL SMALL
.STACK 64 ;SEGMENTO DE PILA

.DATA
DIEZ DB 10 ;VARIABLE
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
        MOV DS,AX
       
        ;SE COLOCA EL PRIMER LETRERO
        MOV AH,09
        LEA DX, MENS
        INT 21H
       
        MOV AH,01
        INT 21H
        SUB AL,30H;CONVERTIR VALOR
        MUL DIEZ ; SE MULTIPLICA EL NUMERO INGRESADO POR
        MOV NUM1,AL
       
        MOV AH,01
        INT 21H
        SUB AL,30H 
        ADD NUM1,AL ;SE SUMA A LAS DECENAS
        MOV AL,NUM1
       
        CMP AL,18
        JGE MAYOR; EN CASO DE QUE SEA SI SE CUMPLE
        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




CORRIDA EN PANTALLA:







PRACTICA #10 DIVISIÓN

CÓDIGO EMU8086

org 100h

mov ax,10
mov bx,2
div bx

ret