lunes, 21 de mayo de 2018

Conclusión  del equipo #1:

Puertos paralelos 
Un puerto paralelo es una interfaz entre un ordenador y un periférico. El puerto paralelo transmite la información byte por byte, es decir que los 8 bits de datos que forman un byte viajan juntos. 
Un ejemplo de puerto paralelo es el puerto de la impresora.

Los Puertos paralelos se pueden encontrar en:

-Interconstruidos en los motherboards actuales.
-En tarjetas controladoras multipuerto. 
-En tarjetas sencillas de puerto paralelo (actualmente descontinuadas). 
-Interconstruido en tarjetas de vídeo MDA, HGC o CGA (actualmente discontinuados).

El Registro de Estado (Status) El registro de estado indica la situación actual de la impresora conectada al puerto, en especial la ocurrencia de posibles errores, de acuerdo con los niveles de tensión que tengan las líneas ACK, BSY, PAP y OF/ON , lo que permite controlar el comportamiento de la impresora.

Tipos
Ante IEEE 1284, los puertos paralelos podrían ser divididos en cuatro tipos:

-Unidireccional (4 bits).
-Bidireccional (8 bits).
-Puerto paralelo extendido (EPP).
-Puerto paralelo con capacidades extendidas (ECP)

Resultado de imagen para Puertos paralelos


Conclusión  del equipo #2:
Puerto  USB

Un puerto USB permite conectar hasta 127 dispositivos. Actualmente es un estándar en toda computadora. Incluso se incluyen al menos dos puertos USB 1.1, o puertos USB 2.0 en los más modernos.

Un puerto USB es una entrada o acceso para que el usuario pueda compartir información almacenada en diferentes dispositivos como una cámara de fotos, un pendrive, entre otros, con un computador.


Los puertos USB están diseñados para transmitir energía eléctrica al dispositivo que se encuentra conectado, de esta manera no se necesita de un cable adicional para conectarse a una toma de corriente.

El USB puede conectar los periféricos como ratones,teclados,escáneres,cámaras digitales,teléfonos móviles,reproductores multimedia,impresoras,discos durosexternos,tarjetas de sonido, sistemas deadquisición de datosy componentes de red. Paradispositivos multimedia como escáneres y cámaras digitales, el USB se ha convertido en el método estándar de conexión.
Resultado de imagen para puerto usb



jueves, 17 de mayo de 2018

Programas de macros 

Ordenamiento de vector con macros (Ricardo Castillo)

.model small                       ;MODELO DEL PROGRAMA
include 'emu8086.inc '             ;SE INCLUYE LA LIBRERIA EMU 8086
include 'macros.txt'          ;SE MANDA A LLAMAR LA MACROS QUE ES EXTERNA
                                   ;SE DEFINE EL STACK
.stack 100h

                                   ;SE DEFINE EL SEGMENTO DE DATOS
.data                              ;SE DECLARAN DOS VECTORES DE 8 POSICIONES Y SE INICIAN EN 0
  vector1 dw 8 dup(0)
  vector2 dw 8 dup(0)              ;SE DEFINEN LOS TAMANYOS DE LOS VECTORES
  tama    dw 1 dup(16)
  tama2   dw 1 dup(16)

.code
 
  ;==================INICIO=====================================================  
 
  lea si,vector1  ; movemos el registro de la primera posicion del vector1 a si
  mov ax,@data    ; Colocamos la direccion de segmento de datos
  mov ds,ax
  printn "   "
  printn " Valores del Primer Vector"
 
  llenado vector1, vector2, tama ;SE MANDA A LLAMAR UNA MACRO Y RECIBE 3 ARGUMENTOS
 
  ordenamiento vector2, tama     ;SE MANDA A LLAMAR OTRA MACRO
 
  printn " "
  print "  Vector original: "
  mov si, 0
 
  imprimir1:
    print " "
    mov ax, vector1[si]
    call print_num   
    add si, 2
    cmp si, tama2
    jb imprimir1 
    printn " "
    print "  Vector menor a mayor: "
    mov si,0
    jmp imprimir2
   
  imprimir2:
    print " "
    mov ax, vector2[si]
    call print_num   
    add si, 2
    cmp si, tama2
    jb imprimir2            
    mov si, 0
    jmp pila              
 
  pila: 
   mov ax, vector2[si]
   push ax
   add si,2
   cmp si, 16
   jb pila
   mov si,0
   printn ' '
   print '  Vector mayor a menor: '
   jmp imprimir3

 imprimir3:
   print ' '
   pop ax
   call print_num
   add si,2  
   cmp si,16
   jb imprimir3
   jmp salir

 salir:
    printn " "
    printn " "
    print " Aplasta tecla para terminar...   "
    mov ah, 0h
    int 16h
    mov ax, 4c00h
    int 21h
 
DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
DEFINE_PTHIS       

END 
       

Dentro del archivo de texto:


ordenamiento macro vect2, tama    ;METODO BURBUJA
    inicioreg: ;INICIALIZA EL SOURCE INDEX EN 0
      mov si, 0 ;SE INICIALIZAN LOS REGISTROS EN 0
      xor ax,ax
      xor bx,bx
      xor cx,cx
      sub tama,2
      jmp ciclo1
   
    ciclo1:  ;SE COMPARA NUESTRO PRIMER CONTADOR CX SI ES MENOR QUE EL TAMAÑO DEL VECTOR -2
      mov si, 0;-2 PORQUE CON ESTO LOS CICLOS HACEN EXACTAMENTE LAS MISMAS COMPARACIONES PARA QUE EL VECTOR QUEDE ORDENADO
      mov dx, tama
      sub dx, cx
      cmp cx, tama
      jl ciclo2
      jmp fin
     
    ciclo2: ;SE COMPARA CON EL TAMAÑO DEL VECTOR -2 Y MENOS CX
      cmp si, dx ;UNA VEZ QUE ENTRA EL CICLO 2 YA ESTARÁN ORDENADOS
      jl condicion ;TODOS LOS VALORES, SE COMPARA UNO A UNO HASTA QUE
      add cx,2  ;MANDE EL MÁS GRANDE AL FINAL
      jmp ciclo1 ;
     
    condicion: ;SE COMPARAN LOS VALORES
      mov ax, vect2[si]
      cmp vect2[si+2], ax
      jl ordenamiento
      add si, 2 
      jmp ciclo2
     
    ordenamiento:
      mov ax, vect2[si+2]
      mov bx, vect2[si]
      mov vect2[si+2], bx
      mov vect2[si],ax
      add si, 2
      jmp ciclo2

    fin:   
endm


llenado macro vec1,vect2, tama ;PIDE CADA UNO DE LOS VALORES DE NUESTROS VECTORES POR TECLADO
  llenado1:                    ;RECIBE 3 ARGUMENTOS 
    printn " "                 ;SE IMPRIME SALTO DE LINEA 
    print "     >"            
    call scan_num              ;SE LEE EL NUMERO
    mov ax, cx                 ;SE MUEVE A AX
    mov [vector1 + si],ax      ;SE MUEVE AL VECTOR
    mov [vector2 + si],ax     
    add si,2
    cmp si,tama               ;SE COMPARA EL SOURCE INDEX CON EL TAMAÑO
    jne llenado1        
endm



Multiplicación con macros (Jonathan Guzmán)
 .model small
.stack

.data        ;definición de datos(variables), donde se almacenara información
.code
   chr1  db ? ;primer digito
   chr2  db ? ;segundo digito
   chr3  db ? ;multiplo
   chr4  db ?
   r1    db ? ;resultado 1
   r2    db ? ;resultado 2
   r3    db ?
   r4    db ?
   ac    db 0 ;acarreo
   ac1   db 0
.startup
   ;cls
   operacion macro a, b, c, d ;creacion de macro operacion con 4 parametros
   mov al,a  ;unidad del segundo numero
   mov bl,b  ;unidad del primer numero
   mul bl       ;multiplicar
   mov ah,0     ;limpiamos ah0
   aam          ;separamos de hex a dec
   mov ac1,ah   ;decenas del primera multiplicacion
   mov r4,al    ;unidades del primera multiplicacion
            
   mov al,a  ;unidades del segundo numero
   mov bl,d  ;decentas del primer numero
   mul bl       ;multiplicar
   mov r3,al    ;movemos el resultado de la operacion a r3
   mov bl,ac1   ;movemos el acarreo a bl
   add r3,bl    ;sumamos resultado mas acarreo
   mov ah,00h   ;limpiamos ah por residuos
   mov al,r3    ;movemos el resultado de la suma a al
   aam          ;separamos  de hex a dec
   mov r3,al    ;guardamos unidades en r3
   mov ac1,ah   ;guardamos decenas en ac1
     
  
   mov al,c    ;al = chr3
   mov bl,b    ;bl = chr2
   mul bl         ;AL = chr3*chr2 (BL*AL)
   mov Ah,0h      ;
   AAM            ;ASCII Adjusment
   mov ac,AH      ;ac = AH (Acarreo)
   mov r2,AL      ;r2 = AL       (Unidad del resultado)

   mov al,c    ;AL = chr3
   mov bl,d    ;BL = chr1
   mul bl         ;AL = chr1*chr3 (BL*AL)
   mov r1,al      ;r1 = AL       (Decena del resultado)
   mov bl,ac      ;BL = Acarreo anterior
   add r1,bl      ;r1 = r1+ac (r1 + Acarreo)
   mov ah,00h     ;
   mov al,r1      ;AL = r1 (Asignaci?n para el ajust)
   AAM            ;ASCII Adjustment
   mov r1,al      ;r1 = AL
   mov ac,ah      ;ac = AH (Acarreo para la Centena del resultado)
   endm
  
   ;suma final
   ;R4 resulta ser las unidades de mul y no se toma en cuenta ya que se pasa entero
  
   suma macro respuesta3,respuesta2,respuesta1,acomulador ;creacion de macro suma con 4 parametros
   mov ax,0000h   ;limpiamos ax
  
   mov al,respuesta3      ;movemos el segundo resultado de la primera mult a al
   mov bl,respuesta2      ;movemos primer resultado de la segunda mult a bl
   add al,bl      ;sumamos
   mov ah,00h     ;limpiamos ah
   aam            ;separamos hex a dec
   mov respuesta3,al      ;r3 guarda las decenas del resultado final
   mov respuesta2,ah      ;r2 se utiliza como nuevo acarreo
  
   mov ax,0000h   ;''''
  
   mov al,acomulador     ;movemos el acarreo de la primera mult a al
   mov bl,respuesta1      ;movemos segundo resultado de la segunda mult a bl
   add al,respuesta2      ;sumamos el nuevo  acarreo de la suma anterior  a al
   add al,bl      ;sumamos al a bl
   mov ah,00h     ;limpiamos el registro ah
   aam            ;separamos de hex a dec
   mov respuesta1,al      ;r1 guarda las centenas
   mov respuesta2,ah      ;ah se sigue utilizando como acarreo
  
   mov al,respuesta2      ;movemos el acarreo a al
   mov bl,ac      ;movemos ac a bl
   add al,bl      ;sumamos al a bl
   ;aam            ;separamos hex a dec
   mov ac,al      ;mov al a ac como nuestro acarreo final
   endm
  
   mov ah,00h     ;Function(Set video mode)
   mov al,03      ;Mode 80x25 8x8 16
   int 10h        ;Interruption Video

   mov ah,01h     ;Function(character read) Guarda en AL
   int 21h        ;Interruption DOS functions
   sub al,30h     ;ajustamos valores
   mov chr1,al    ;[chr1].chr2 * chr3 = ac.r1.r2

   mov ah,01h     ;Function(character read) Guarda en AL
   int 21h        ;Interruption DOS functions
   sub al,30h     ;Ajustamos valores
   mov chr2,al    ;chr1.[chr2] * chr3 = ac.r1.r2

   mov ah,02h     ;Function(character to send to standard output)
   mov dl,'*'     ;Character to show
   int 21h

   mov ah,01h     ;Function(Read character) Guarda en AL
   int 21h        ;Interruption DOS Functions
   sub al,30h     ;Transform(0dec = 30hex)
   mov chr3,al    ;chr1.chr2 * [chr3] = ac.r1.r2
  
   mov ah,01h     ;Function(Read character) Guarda en AL
   int 21h        ;Interruption DOS Functions
   sub al,30h     ;Transform(0dec = 30hex)
   mov chr4,al    ;chr1.chr2 * [chr3] = ac.r1.r2

   mov ah,02h     ;Character to send to standar output
   mov dl,'='     ;
   int 21h        ;Interruption DOS functions
  
   ;Realizamos operaci?n
   operacion chr4,chr2,chr3,chr1 ;llamada al macro con parametros
   suma r3,r2,r1,ac1 ;llamada al macro con parametros

   mov ah,02h 
   mov dl,ac
   add dl,30h
   int 21h        ;Mostramos ac (millar)

   mov ah,02H
   mov dl,r1
   add dl,30h
   int 21h        ;Mostramos r1 (centena)

   mov ah,02H
   mov dl,r3
   add dl,30h
   int 21h        ;Mostramos r3 (decena)
  
   mov ah,02H
   mov dl,r4
   add dl,30h
   int 21h        ;unidad       

.exit
end

RESTA con Macros

restas macro p, s
    mov al, p
    sub al, s
    add al, 30h
    mov resta, al
    mov ah, 09
    lea dx, msj3
    int 21h
    mov ah, 02
    mov dl, resta
    int 21h
    mov ah, 4ch
    int 21h
endm
 

.model small
.stack 64
.data

    n1 db 0
    n2 db 0
    resta db 0
    msj  db "Dame el primer valor: $"
    msj2 db 10,13, "Dame el segundo valor $"
    msj3 db 10,13, "resta = $"
 
.code

 mov ax, @data
 mov ds, ax
 mov ah, 09
 lea dx, msj
 int 21h

 mov ah, 01
 int 21h
 sub al, 30h
 mov n1, al

 mov ah, 09
 lea dx, msj2
 int 21h
 mov ah, 01
 int 21h
 sub al, 30h
mov n2, al

restas n1, n2
 
ret

linea de texto con Macro (Melissa)
inicio macro   ;declaramos la macro, le damos el nombre de inicio
    mov ax,data   ;Cargamos el segmento de datos.
    mov ds,ax
    mov dx,ax
endm

.model small

.stack 64

.data

    msj db "Este es mi primer macro",10,13,"$"

.code

inicio  ;Llamamos al macro, lo unico que hace es cargar msj del segmento de datos.
    mov ah,09h
    lea dx,msj ;puede ser mov dx,offset msj
    int 21h ;interrupcion
    mov ax,4c00h ;Sale del programa
    int 21h  ;interrupcion
end



Buenos días o Buenas tardes (Edgar Mendez)
FIN MACRO 
    MOV AH, 4CH  ;TERMINACION DEL PROGRAMA
    INT 21H       
ENDM

;---------------------------------------------------

PILA SEGMENT PARA STACK "STACK"
    DB 200 DUP (0)                     ;ESPACIO DE LAS INSTRUCCIONES
PILA ENDS
;---------------------------------------------------

DATOS SEGMENT PARA "DATA" ;DATOS A INGRESAR
    VA DB "DESPUES DE MEDIO DIA (Y/N): ","$" ;SELECCION DE INICIO DEL PROGRAMA
    VD DB 13,10," BUENOS DIAS","$"           ;MENSAJES MOSTRADOS EN PANTALLA                
    VT DB 13,10," BUENAS TARDES","$"         ;MENSAJES MOSTRADOS EN PANTALLA
DATOS ENDS
;---------------------------------------------------

CODIGO SEGMENT PARA "CODE"
    EMPIEZA PROC FAR
    ASSUME CS: CODIGO, DS: DATOS, SS: PILA

        MOV AX, DATOS   ;MANDAR LLAMAR A DATOS
        MOV DS, AX

        MOV AH, 0FH
        INT 10H
        MOV AH, 00H
        INT 10H 

        MOV DX,OFFSET VA   ;IMPRIMIR MENSAJE "DESPUES DE MEDIO DIA"
        MOV AH,9
        INT 21H

    CALL PREGUNTA

    EMPIEZA ENDP

    PREGUNTA PROC NEAR     ;Inicia el 
    
        MOV AH, 01H   ;ESPERA UNA ACCION
        INT 21H

        CMP AL, "Y"   ;Asignar una accion a una tecla
        JZ TARDES

        CMP AL, "N"   ;Asignar una accion a una tecla
        JZ DIAS

        CMP AL, "y"   ;Asignar una accion a una tecla
        JZ TARDES

        CMP AL, "n"   ;Asignar una accion a una tecla
        JZ DIAS   


TARDES: 

    MOV DX, OFFSET VT   ;IMPRIMIR MENSAJE "BUENOS TARDES"
    MOV AH, 09
    INT 21H

FIN

DIAS:

    MOV DX, OFFSET VD   ;IMPRIMIR MENSAJE "BUENOS DIAS"
    MOV AH, 09
    INT 21H 


FIN

RET
PREGUNTA ENDP   ;FIN DE PREGUNTA PROC

CODIGO ENDS
END EMPIEZA     ;FIN DEL PROGRAMA



Macros Edad (Alma García)

.model small ;modelo de memoria

.stack 64 ;segmento de pila


mmayor macro: ;declaracion de macro mmayor

    MOV DX,OFFSET mens2;se lee la variable mens2

    MOV AH,9

    INT 21H;interupcion del DOS

    endm;fin del macro


mmenor macro: ;declaracion de macro mmenor

    MOV DX,OFFSET mens3se lee la variable mens3

    MOV AH,9;trabaja con la interrupcion

    INT 21H;interrupcion del DOS

    endm;fin del macro


finn macro:;declaracion de macro fin

    mov ah,4ch;sentencia para terminar el programa

    int 21h;interrupcion del DOS

    endm;fin del macro

;============================empieza segmento datos
.data


num1 db 0 ;variable para almacenar la edad

diez db 10 ;variable para poder imprimir 2 caracteres(se multiplica por el primer numero ingresado,para ser decenas)

    mens db "ingresa tu edad ","$" ;mensaje inicial

    mens2 db 13,10,"Eres mayor de edad","$" ;mensaje para mayor de edad

    mens3 db 13,10,"Eres menor de edad","$" ;mensaje par amenor de edad
;===================================================termina segmento datos

;=================inicia segmento codigo
.code

inicio proc far

    mov ax,@data;direccionamos el segmento de datos

    mov ds,ax ;los datos se mueven a ax

    mov ah,09;trabaja con la interrupcion

    lea dx, mens;se lee la variable mens

    int 21h ;interrupcion del DOS



    mov ah,01;;espera la entrada del teclado

    int 21h ;interrupcion de DOS

    
    sub al,30h;se le restan 30 para convertir a numero

    mul diez;se multiplica el numero ingresado para convertirlo a decenas

    mov num1,al;el resultado se mueve al registro al 

    mov ah,01;se espera entrada del teclado

    int 21h;interrupcion del DOS



    sub al,30h;se tranforma a numero el segundo digito ingresado

    add num1,al ;se suma a las decenas obtenidas

    mov al,num1;se mueva a al el resultado de la suma


    cmp al,18;se compara si el contenidos de al es 18

    jge mayor;en caso de ser mayor se salta al proceso mayor

;=========== de no cumplirse(sea menor a 18)el programa continua a este segmento

    mov ah,09 ;trabaja con la interrupcion

    lea dx,mens3;se lee la variable mens3

    int 21h;interrupcion del DOS

    jmp fin;y salta a proceso fin

;====================procesos

mayor:;se declara el proceso mayor

mmayor;el proceso llama al MACRO mmayor



fin:;se declara el proceso fin

finn;el prceso llama al MACRO finn


inicio endp ;se termina a inicio




Macro imprimir (Uriel Vega)

imprime macro numero  ;Nuestra macro se llama imprimir, nuestro parámetro es numero
  mov ah,02h
  mov dl,numero  ;Indica que mueva al registro DL lo que pasamos como parámetro.
  add dl,30h  ;suma 30h para imprimir el número real.
  int 21h
endm

.model small
.stack 64
.data
  num db 0  ;declaramos nuestra variable.
.code
  mov cx,9
inicio:
  mov num,cl
  imprime num ;Llamamos al macro con el valor de nuestra variable.
loop inicio ;repite ciclo

  mov ah,04ch ;Finaliza el programa.
  int 21h
end

Macro (Emmanuel Orta)

bucle1 macro tama,x,y

    mov CX, tama

BUCLE:

    MOV DX, SI
    ADD DX, x
    MOV DH, y

coloca ;este es el macro para colocar en la posicion la letra

;se guarda letra por letra
    MOV AL, [SI+OFFSET TITULO]

;guarda color por color
    MOV BL, [SI+OFFSET COLORES]

color ;este es el macro que selecciona un color
    INC SI
    LOOPNZ BUCLE
endm

color macro ;macro que selecciona el color
    MOV AH, 9
    INT BIOS
endm

coloca macro;macro que selecciona una posicion
    MOV AH, 2
    INT BIOS
endm

.STACK 64

.MODEL SMALL

CR EQU 13
LF EQU 10
BIOS EQU 10H
DOS EQU 21H
TEXTO EQU 3
FIN EQU 4C00H

.DATA

;ponemos el texto que querramos mostrar
TITULO DB 'Agnax & Alizz Y pedrito ? '
;aqui va la lista de los colores
;del texto

colores DB 50H

DB 5fH
DB 50H
DB 5fH
DB 50H
DB 00H
DB 0f0H
DB 00h
DB 20H
DB 20H
DB 20H
DB 20H
DB 20H
DB 00H
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH
DB 0fH

.CODE

;esta zona es para poner el texto
COLO PROC FAR

    MOV AX, @DATA
    MOV DS, AX

;Aquí se pone el macro del bucle
bucle1 25,30,12
    MOV AH, 8
    INT DOS

coloca ;este es el macro para colocar en la posicion la letra
    MOV AX, FIN
    INT DOS
    COLO ENDP
    RET

Macro Resta (Marco Escobedo)

restas macro p, s
mov al, p
sub al, s
add al, 30h
mov resta, al
mov ah, 09
lea dx, msj3
int 21h
mov ah, 02
mov dl, resta
int 21h
mov ah, 4ch
int 21h
endm

.model small
.stack 64
.data

n1 db 0
n2 db 0
resta db 0
msj db "Dame el primer valor: $"
msj2 db 10,13, "Dame el segundo valor $"
msj3 db 10,13, "resta = $"

.code

mov ax, @data
mov ds, ax
mov ah, 09
lea dx, msj
int 21h

mov ah, 01
int 21h
sub al, 30h
mov n1, al

mov ah, 09
lea dx, msj2
int 21h
mov ah, 01
int 21h
sub al, 30h
mov n2, al

restas n1, n2

ret









Ejemplo de  MI  Macro  Programa  que despliega un mensaje  utilizando   una macro

inicio macro   ;declaramos la macro, le damos el nombre de inicio
  mov ax,data   ;Cargamos el segmento de datos.
  mov ds,ax
  mov dx,ax
endm

.model small
.stack 64
.data
  msj db 'Mensaje utilizando un macro', 10,13,'$'  ;mensaje
.code
  inicio  ;Llamamos al macro, lo unico que hace es cargar msj del segmento de datos.
  mov ah,09h
  lea dx,msj ;puede ser mov dx,offset msj
  int 21h
  mov ax,4c00h ;Sale del programa
  int 21h
end






jueves, 12 de abril de 2018

Programa que coloca un caracter en la posicion dada de acuerdo a parámetros ingresados por teclado


TITLE Cadena que solicita una cadena y una posicion para mostrarla

gotoxy macro fila,col ;macro gotoxy  y parametros  de fila,col
    mov ah,02h   ;  colocacion cursor en pantalla
    mov dh,fila  ;coordenada x para colocacion de cursor dh
    mov dl,col   ;coordenada y para colocacion de cursor dl
    mov bh,0h   ; posiciona en coordenadas pedidas
    int 10h      ;interrupcion de video
endm   ;termina  macro

pantalla macro que  ;declaracion de macro pantalla parametro que
     mov ah,02h       ;complemento interrupcion 21h
     mov dl,que   ;que es el caracter capturado
     int 21h      ;interrupcion DOS
endm  ;termina  macro

imprime macro eztryng  ;macro con parametro eztryng
     mov dx,offset eztryng  ;coloca mensajes
     mov ah,9               ;imprime  variables
     int 21h                ;interrupcion DOS
endm                   ;termina  macro

.data    ;variables
   mensaje DB "INGRESE UN CARACTER: ",13,10,"$"
   mensaje2 DB "INGRESE X del 0 al 9: ",13,10,"$"
   mensaje3 DB "INGRESE Y del 0 al 9: ",13,10,"$"
    caracter DB 40   ; variable para capturar cadena
    varx DB ?        ; variable para capturar coordenada x
    vary DB ?        ; variable para capturar coordenada y
vtext db 100 dup('$')

.code

startup:
    mov ax,@data  ;asignacion de datos ax
    mov ds,ax     ;asignacion de datos al segmento de datos

imprime mensaje ;llama macro imprime con el parametro 'mensaje'
   mov si,00h      ;limpia el apuntador SI
  
 leer:          ;declaracion de metodo leer   
    mov ax,0000    ;limpia ax
    mov ah,01h     ;complemento para interrupcion 21h captura
    int 21h        ;interrupcion DOS
    mov caracter[si],al ;guarda el dato capturado en variable caracter
    inc si         ;incrementa apuntador si
    cmp al,0dh     ;compara si la ultima tecla presionada fue enter
   ja coordenadas ;si cumple brinca a coordenadas
   jb leer        ;sino cumple vuelve a ejecutar leer

coordenadas:    ;declaracion de metodo coordenadas
     mov dx,offset caracter ;coloca en dx el caracter ingresado
     mov ah,0ah             ;complemento de interrupcion 21h lee cadena de texto por teclado
     int 21h                ;interrupcion DOS
    imprime caracter       ;llama macro imprime con parametro caracter
 imprime mensaje2       ;llama macro imprime con parametro mensaje2
     mov ah,01h             ;complemento de interrupcion 21h Eco de un caracter
     int 21h                ;interrupcion DOS
     sub al,30h             ;resta 30h para convertir al valor numerico
     mov bl,al              ;mueve al a bl
     mov varx,al            ;guarda al en varx (coordenada x)
imprime mensaje3       ;coordenadas y ( se repite para coordenada y)
      mov ah,01h
      int 21h
      sub al,30h
      mov bl,al
      mov vary,al          
      mov ax,0003h           ;complemento interrupcion 10h modo texto
      int 10h                ;interupccion de video

gotoxy vary,varx       ;llama macro gotxy con los parametros vary y varx como columna y fila
pantalla caracter[0]   ;llama a macro pantalla para mostrar primer caracter


      mov ah,01h             ;complemento de interrupcion 21h Eco de un caracter
      int 21h                ;interrupcion DOS
      mov ax,4c00h           ;funcion de fin
      int 21h                ;interrupcion DOS
end startup            ;fin de funcion principal

martes, 20 de marzo de 2018

Programa que realice la multiplicación de dos valores ingresados por el teclado




Codigo:

.model small      ;se define el modelo de memoria
.stack            ;se define el tamano de la pila

datos segment      ;se define las variables

    nombre db, 13,10, "Multiplicacion de dos numeros ingresados por teclado",13,10,13,10,'$' ;nombre del programa

    mensaje1 db "Ingrese el primer numero:",13,10,'$'           ;primer numero de la multiplicacion
    mensaje2 db "Ingrese el segundo numero:",13,10,'$'          ;segundo numero de la multiplicacion 
    mensaje3 db "El resultado de la multiplicacion es: ",'$'    ;resultado en pantalla
    
suma db 0

n1 db 0
n2 db 0
byteh db 0
bytel db 0
salto db " ",13,10,'$'      ;salto de fila

datos ends

codigo segment              ;comienzo de codigo
    
   assume cs:codigo, ds: datos

inicio proc far

 mov ax,datos   ;direccionamiento
 mov ds,ax      ;aqui es donde se guarda

;Limpiar Pantalla

mov ah, 00
mov al, 03h
int 10h

;Inicializacion de resgistros en 0

mov ah,02h
mov dl,00
int 10h

mov ah, 09h      ;lee el mensaje
lea dx,nombre
int 21h

;Instrucciones para la realizacion de la multiplicacion.

     mov ah,09h
     lea dx,mensaje1   ;mensaje de solicitud del primer numero
     int 21h
     
     mov ah,01h      ;lee los caracteres del teclado
     int 21h
     
     ;Conversion del numero.
     
     sub al,30h       ;hace la conversion ascii
     mov n1,al        ; se pasaa la variable n1
     int 21h
     
     mov ah,09h       ;impresion de caracteres
     lea dx, salto    ;saltar de fila
     int 21h
     
     mov ah,09h
     lea dx, mensaje2   ;mensaje del segundo numero
     int 21h
     
     mov ah,01h         ;leer y mostrar numero digitado
     int 21h
     
     sub al,30h          ;conversion ASCII
     mov n2,al           ;se pasa ala variable n2
     int 21h
     
     ;Operacion de sumas sucesivas
     
     mov cl,n2
     
     sumar:
     
      mov al,n1          ;movemos el registro al a el valor del numero 1
      add al,suma        ;sumamos a al el valor de la suma
      mov suma,al        ;movemos a suma el valor del resultado
                                 loop sumar
      
      mov ah, 09h         ;impresion de caracteres
      lea dx, mensaje3    ;impresion del mensaje 3
      int 21h
      
      mov al,suma
      aam                 ;corrige el resultado de la multiplicacion de datos ASCII en el registro ax
      mov bytel,al
      mov byteh,ah
      
      mov ah,02h
      
      mov dl,byteh
      add dl,30h
      int 21h
      
      mov dl,bytel
      add dl,30h
      int 21h 
     
      mov ah,09h            ;ipresion de caracteres
      lea dx,salto          ;salto de fila
      int 21h
      
      salir:                 ;retorna el mando al DOS
      
      mov ax, 4c00h
      int 21h
      
  inicio endp

  end inicio
Verificación de texto en una cadena



Código:


org 100h
mov si, 0

comienzo:
mov al,msg2[0]
cmp msg[si],"$"
jz final
cmp msg[si], al
jne seguir
mov di, 1

comprobar:
mov al, msg2[di]
mov bx, di
cmp msg[si+bx], al
jne seguir

inc di
cmp msg2[di],"$"
jz resultado

                     loop comprobar

                     seguir:
                     inc si
                     loop comienzo 

                    resultado:
                    mov dx, offset msg3
                    mov ah, 9
                    int 21h     

                    final:
ret
msg db "tecnologico$"
msg2 db "tec$"
msg3 db "si se encuentran$"


Programa  que multiplica 2 números  en EMU8086


Codigo:

.model small ;Modelo de memoria
.stack

.data  ;Definicion de datos(variables), donde se almacenara informacion
.code 
   ;Variables del primer numero ingresado
   unidades_n1      db ?
   decenas_n1       db ?
  
   ;Variables del segundo numero ingresado
   unidades_n2      db ?
   decenas_n2       db ?
  
   ;Variables temporales para los resultados de la primera multiplicacion
   res_temp_dec_n1  db ?
   res_temp_cen_n1  db ?
  
   ;Variables temporales paara los resultados de la segunda multiplicacion
   res_temp_dec_n2  db ?
   res_temp_cen_n2  db ?
  
   ;Variables para los resultados
   res_unidades     db ?
   res_decenas      db ?
   res_centenas     db ?
   res_uni_millar   db ?
  
   ;Variable de acarreo en multiplicacion
   acarreo_mul      db 0
  
   ;Variable de acarreo en suma
   acarreo_suma     db 0
  
.startup
   ;cls
   mov ah,00h         ;Function(Set video mode)
   mov al,03          ;Mode 80x25 8x8 16
   int 10h            ;Interruption Video

   mov ah,01h         ;Function(character read)
   int 21h            ;Interruption DOS functions
   sub al,30h         ;ajustamos valores
   mov decenas_n1,al  ;[chr1].chr2 * chr3 = ac.r1.r2

   mov ah,01h         ;Function(character read)
   int 21h            ;Interruption DOS functions
   sub al,30h         ;Ajustamos valores
   mov unidades_n1,al ;chr1.[chr2] * chr3 = ac.r1.r2

   mov ah,02h         ;Function(character to send to standard output)
   mov dl,'*'         ;Character to show
   int 21h

   mov ah,01h         ;Function(Read character)
   int 21h            ;Interruption DOS Functions
   sub al,30h         ;Transform(0dec = 30hex)
   mov decenas_n2,al  ;chr1.chr2 * [chr3] = ac.r1.r2
  
   mov ah,01h         ;Function(Read character)
   int 21h            ;Interruption DOS Functions
   sub al,30h         ;Transform(0dec = 30hex)
   mov unidades_n2,al
  
   mov ah,02h         ;Character to send to standar output
   mov dl,'='         ;
   int 21h            ;Interruption DOS functions

   ;Realizamos las operaciones
  
   ;Primera multiplicacion  ; Explicacion utilizando la multiplicacion de 99*99 ->(n1*n2)
   mov al,unidades_n1       ; al=9
   mov bl,unidades_n2       ; bl=9
   mul bl                   ; 9*9=81 -> (al=81)
   mov ah,00h               ;
   AAM                      ; Separa el registro ax en su parte alta y baja
   mov acarreo_mul,ah       ; acarreo_mul = 8
   mov res_unidades,al      ; res_unidades= 1 -> Reultado de unidades
  
   ;Segunda multiplicacion
   mov al,decenas_n1        ; al=9
   mov bl,unidades_n2       ; bl=9
   mul bl                   ; 9*9=81 -> (al=81)
   mov res_temp_dec_n1,al   ; res_temp_dec_n1= 81
   mov bl,acarreo_mul       ; bl= 8
   add res_temp_dec_n1,bl   ; res_temp_dec_n1= 81+8= 89
   mov ah,00h               ;
   mov al,res_temp_dec_n1   ; al= 89
   AAM                      ; Separa el registro ax en su parte alta y baja
   mov res_temp_cen_n1,ah   ; res_temp_cen_n1= 8 
   mov res_temp_dec_n1,al   ; res_temp_dec_n1= 9    
   
   ;Tercera multiplicacion  ; Resultado actual = 000>1
   mov al,unidades_n1       ; al= 9
   mov bl,decenas_n2        ; bl= 9
   mul bl                   ; 9*9=81 -> (al=81)
   mov ah,00h               ;
   AAM                      ; Separa el registro ax en su parte alta y baja
   mov acarreo_mul,ah       ; acarreo_mul= 8
   mov res_temp_dec_n2,al   ; res_temp_dec_n2= 1
                            ;
   mov bl, res_temp_dec_n1  ; bl= 9
   add res_temp_dec_n2,bl   ; res_temp_dec_n2= 1+9= 10
   mov ah,00h               ;
   mov al, res_temp_dec_n2  ; al = 10
   AAM                      ; Separa el registro ax en su parte alta y baja
   mov acarreo_suma, ah     ; acarreo_suma = 1
   mov res_decenas,al       ; res_decenas  = 0 -> Reultado de decenas
  
   ;Tercera multiplicacion  ; Resultado actual = 00>01
   mov al,decenas_n1        ; al= 9
   mov bl,decenas_n2        ; bl= 9
   mul bl                   ; 9*9=81 -> (al=81)
   mov res_temp_cen_n2,al   ; res_temp_cen_n2= 81
   mov bl,acarreo_mul       ; bl= 8
   add res_temp_cen_n2,bl   ; res_temp_cen_n2= 89
   mov ah,00h               ;
   mov al,res_temp_cen_n2   ; al= 89
   AAM                      ; Separa el registro ax en su parte alta y baja
   mov res_uni_millar,ah    ; res_uni_millar = 8
   mov res_temp_cen_n2,al   ; res_temp_cen_n2= 9
                            ;
   mov bl, res_temp_cen_n1  ; bl= 8
   add res_temp_cen_n2, bl  ; res_temp_cen_n2= 17
   mov bl, acarreo_suma     ; bl= 1
   add res_temp_cen_n2,bl   ; res_temp_cen_n2= 17+1= 18
   mov ah,00h               ;
   mov al,res_temp_cen_n2   ; al= 18
   AAM                      ;
   mov acarreo_suma,ah      ; acarreo_suma= 1
   mov res_centenas,al      ; res_centenas= 8 -> Resultado de centenas
  
                            ; Resultado actual= 0>801
   mov bl, acarreo_suma     ; bl= 1
   add res_uni_millar, bl   ; res_uni_millar= 8+1= 9 -> Resultado de unidades de millar
                            ; Reultado actual 9801

   ;Mostramos resultados
   mov ah,02h
   mov dl,res_uni_millar
   add dl,30h
   int 21h
  
   mov ah,02h
   mov dl,res_centenas
   add dl,30h
   int 21h      

   mov ah,02H
   mov dl,res_decenas
   add dl,30h
   int 21h       

   mov ah,02H
   mov dl,res_unidades
   add dl,30h
   int 21h      
.exit
end

Conclusión   del equipo #1: Puertos paralelos  Un puerto paralelo es una interfaz entre un ordenador y un periférico. El puerto paralelo ...