27 diciembre 2015

AC LAB

https://drive.google.com/open?id=0Bx5rS3UK4eL-RW5kSEg1TEVkamM
https://drive.google.com/open?id=0Bx5rS3UK4eL-RW5kSEg1TEVkamM
https://drive.google.com/open?id=0Bx5rS3UK4eL-RW5kSEg1TEVkamM

17 diciembre 2015

ASSSEMB

https://drive.google.com/file/d/0Bx5rS3UK4eL-Nk9CVlpOSTgydkU/view?usp=sharing


name "Calculadora Asemmbly by (Zerorendan)"
org 100h ; inicio de programa
include 'emu8086.inc' ;Incluye funciones de libreria emu8086
DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS  

jmp inicio

inicio:  

mov bh, 0000_0010b
CALL   pintar
           
             

mov ax, @data
mov ds,ax

mov dx, offset esp;-------->espacios para los mensajes
mov ah,09;----------------->impresion en pantalla
int 21h

mov dx, offset mensaje1;--->titulo del programa
mov ah,09
int 21h

mov dx, offset user;------->creadores del programa
mov ah,09
int 21h

mov dx, offset m0;------->menu principal
mov ah,09
int 21h  
mov dx, offset m1;------->menu principal
mov ah,09
int 21h
mov dx, offset m2;------->menu principal
mov ah,09
int 21h
mov dx, offset m3;------->menu principal
mov ah,09
int 21h
mov dx, offset m4;------->menu principal
mov ah,09
int 21h
mov dx, offset m5;------->menu principal
mov ah,09
int 21h

;=====================================mov ah,01h
int 21h

    cmp al,'0'
    je fin

    cmp al,'1'
    je rect

    cmp al,'2'
    je cuad

    cmp al,'3'
    je tria

    cmp al,'4'
    je trap

    cmp al,'5'
    je sumaplus
       
       
;=====================================   
;*****************************RECT*****************************ini  
rect:  
         
    mov bh, 0111_1100b
    CALL   pintar


    mov dx, offset mensaje2;---> mensaje para pedir el primer numero
    mov ah,09h
    int 21h
    ;-------------------------->rellenado de variables
    call SCAN_NUM;------------->llama a la funcion scan_num q toma el numero del teclado y lo guarda en ax
    mov valor1,cx;------------->carga el numero a la variable
    ;-------------------------->muestra el mensaje user para sentirme grande
    mov dx, offset mensaje3;---> mensaje para pedir el segundo numero
    mov ah,09h
    int 21h
    ;-------------------------->rellenado de variables
    call SCAN_NUM;------------->llama a la funcion scan_num q toma el numero del teclado y lo guarda en ax
    mov valor2,cx;------------->carga el numero a la variable

    mov dx, offset texto_resp;->muestra el resultado
    mov ah,09h
    int 21h;------------------->interrupcion pantalla
    ;-------------------------->suma de las variables
    mov ax,valor1;------------->mueve el valor de la variable a ax
    ;add ax,valor2;------------->suma entre la region ax y la variable
   
    mul valor2;-------------------->ax=ax*bx
    call PRINT_NUM;------------> imprimiendo en pantalla el resultado

    mov ah,00;----------------->espera por una tecla en pantalla
    int 16h

    mov ah,00h;---------------->limpia la pantalla
    mov al,03h
    int 10h

    mov dx,offset beta;-------->muestra el mensaje de salida
    mov ah,09
    int 21h

    jmp inicio
;fin del bloque de suma
;*****************************RECT*****************************fin
 
 
 
;*****************************CUAD*****************************ini
cuad:

    mov bh, 0011_1110b
    CALL   pintar

    mov dx, offset mensaje2
    mov ah,09h
    int 21h
    ;-------------------------->rellenado de variables
    call SCAN_NUM;------------->llama a la funcion scan_num qtoma el numero del teclado y lo guarda en ax
    mov valor1,cx;------------->carga el numero a la variable
    ;-------------------------->muestra el mensaje user para sentirme grande
   ; mov dx, offset mensaje3
   ; mov ah,09h
    ;int 21h
    ;-------------------------->rellenado de variables
   ; call SCAN_NUM
    ;mov valor2,cx

    mov dx, offset texto_resp
    mov ah,09h
    int 21h
    ;-------------------------->resta de variables
    mov ax,valor1
    ;sub ax,valor2
    mul valor1
   
    call PRINT_NUM
   
    mov ah,00
    int 16h

    mov ah,00h;---------------->limpia la pantalla
    mov al,03h
    int 10h

    mov dx,offset beta
    mov ah,09
    int 21h
    jmp inicio
;*****************************CUAD*****************************fin


;*****************************TRIA*****************************ini
tria:

    mov bh, 0001_1110b
    CALL   pintar

    mov dx, offset mensaje2
    mov ah,09h
    int 21h
    ;-------------------------->rellenado de variables
    call SCAN_NUM;------------->llama a la funcion scan_num qtoma el numero del teclado y lo guarda en ax
    mov valor1,cx;------------->carga el numero a la variable
    ;-------------------------->muestra el mensaje user para sentirme grande
    mov dx, offset mensaje3
    mov ah,09h
    int 21h
    ;-------------------------->rellenado de variables
    call SCAN_NUM
    mov valor2,cx

    mov dx, offset texto_resp
    mov ah,09h
    int 21h
    ;-------------------------->multiplicacion en si misma
    mov ax,valor1;------------->mueve la primeria variable al ax
    mov bx,valor2;------------->mueve el siguiente valor al bx porque la multi solo permite un valor
    mul bx;-------------------->ax=ax*bx
     
    mov bx,2
    div bx;
 
    call PRINT_NUM

    mov ah,00
    int 16h

    mov ah,00h;---------------->limpia la pantalla
    mov al,03h
    int 10h

    mov dx,offset beta;-------->mensaje de salir
    mov ah,09
    int 21h


jmp inicio
;*****************************TRIA*****************************fin


 
;*****************************TRAP*****************************ini
trap:

         
    mov bh, 0010_0001b
    CALL   pintar

    mov dx, offset mensaje2
    mov ah,09h
    int 21h
    ;-------------------------->rellenado de variables
    call SCAN_NUM;------------->llama a la funcion scan_num qtoma el numero del teclado y lo guarda en ax
    mov valor1,cx;------------->carga el numero a la variable
    ;-------------------------->muestra el mensaje user para sentirme grande
    mov dx, offset mensaje3
    mov ah,09h
    int 21h
    ;-------------------------->rellenado de variables
    call SCAN_NUM
    mov valor2,cx

    mov dx, offset mensaje4
    mov ah,09h
    int 21h  
   
        call SCAN_NUM
    mov valor3,cx

    mov dx, offset texto_resp
    mov ah,09h
    int 21h
   
 

    mov ax,valor1;------------->mueve el valor de la variable a ax
    add ax,valor2
     
         
    mov bx,valor3;------------->mueve el siguiente valor al bx porque la multi solo permite un valor
    mul bx;-------------------->ax=ax*bx
         
             mov bx,2
    div bx;
   
       
    call PRINT_NUM

    mov ah,00
    int 16h

    mov ah,00h;---------------->limpia la pantalla
    mov al,03h
    int 10h

    mov dx,offset beta
    mov ah,09
    int 21h

jmp inicio
;*****************************TRAP*****************************fin



;*****************************SUMASS*****************************ini
;-------------------------->comienza el bloque de sumaplus
sumaplus:

mov bh, 0010_0001b
CALL   pintar

mov dx, offset texto_sum
mov ah,09h
int 21h
     
mov dx, offset esp
mov ah,09
int 21h
     
mov dx, offset texto_sumS
mov ah,09h
int 21h

mov dx, offset esp
mov ah,09
int 21h


mov ah,01h
int 21h


cmp al,'1'
je sumX

cmp al,'2'
je sumY
 
     


mov ah,00
int 16h

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

jmp inicio:
;--------------------->fin del sistema de sumaplus
;*****************************SUMAPLUS*****************************fin
       
       
;*****************************SUMA N1*****************************ini
sumX:
    mov bh, 0010_0001b
    CALL   pintar    
             
    mov dx, offset texto_sumN
    mov ah,09h
    int 21h
 
             
               
    call SCAN_NUM;------------->llama a la funcion scan_num q toma el numero del teclado y lo guarda en ax
    mov dx, offset texto_sumR1
    mov ah,09h
    int 21h
     
      mov bx,cx; bx=n
      mov ax,bx; ax=n
      add ax,1;  ax=n+1
      mul bx;-------------------->ax=ax*bx =n*(n+1)
      mov bx,2  ; bx=2
      div bx;-------------------->ax=ax/bx =  n*(n+1) /2
      call PRINT_NUM


mov ah,00
int 16h

mov ah,00h;---------------->limpia la pantalla
mov al,03h
int 10h

mov dx,offset beta
mov ah,09
int 21h

jmp sumaplus
;*****************************SUMA N1*****************************fin

;*****************************SUMA N2*****************************ini
sumY:
    mov bh, 0010_0001b
    CALL   pintar    
               
    mov dx, offset texto_sumN
    mov ah,09h
    int 21h
 
    call SCAN_NUM;------------->llama a la funcion scan_num q toma el numero del teclado y lo guarda en ax
   
    mov dx, offset texto_sumR2  ;imprime msg
    mov ah,09h
    int 21h    
   
    mov bx,cx;  bx=n
    mov ax,bx;  ax=n  
    add ax,1;   ax=n+1
    mul bx;     ax*bx =n*(n+1)   =ax

    call PRINT_NUM     ;imprim ax


mov ah,00    ;espera teclado
int 16h

mov ah,00h;---------------->limpia la pantalla
mov al,03h
int 10h

mov dx,offset beta
mov ah,09
int 21h

jmp sumaplus
;*****************************SUMA N2*****************************fin      
       
       
       
       
       
       
             
             
;==========================PINTADO===================================              
             
pintar PROC

mov ah,00;---------------->limpiar pantalla
mov al,03h
int 10h
    ;imprimir aqui  
   
    ;pintar fondo  
    mov ah, 6h ;funcion para scrollear la pantalla un numero de lineas
    mov al, 0h ;cero para borrar la pantalla
    ;mov bh, 0001_1110b ;fondo azul, color de texto amarillo escribe espacios en blanco en el fondo de la pantalla
    mov ch, 0 ;x inicial
    mov cl, 0 ;y inicial
    mov dh, 24 ;x final
    mov dl, 79 ;y final
    int 10h      
    RET                   ; return to caller.
   
pintar ENDP
;==========================PINTADO===================================





;*****************************FIN*****************************ini
fin:;---------------------->fin del programa
    mov dx, offset beta
    mov ah,09
    int 21h

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

    mov ah,00;----pausa para salir
    int 16h

    ret
;*****************************FIN*****************************fin


;------------------------>
mensaje1 db 13,10,' Calcule el Area de sus figuras favoritas $'
user db 13,10,' UNIVERSIDAD NACIONAL SAN AGUSTIN$'
mensaje2 db 13,10,' Digite el primer lado $'
mensaje3 db 13,10,' Digite el segundo lado $'
mensaje4 db 13,10,' Digite el tercer lado $'      


m0 db 13,10,' <0> EXIT $'
m1 db 13,10,' <1> Rectangulo $'  
m2 db 13,10,' <2> Cuadrado $'
m3 db 13,10,' <3> Triangulo $'
m4 db 13,10,' <4> Trapecio $'
m5 db 13,10,' <5> Sumas $'

beta db 13,10,' Saliendo $'
;------------------------>variables
valor1 dw ?
valor2 dw ?
valor3 dw ?
;------------------------>textos de resultados
texto_resp db 13,10,'EL area es: $'

esp db ' ',10,13,'$'                      

;------------------------>textos de SUM  

texto_sumN db 13,10,'Ingrese n:$'
texto_sumR1 db 13,10,'n*(n+1)/2=$'
texto_sumR2 db 13,10,'n*(n+1)=$'
texto_sum db 13,10,'[1]   1+2+3+4...n$'
texto_sumS db 13,10,'[2]   2+4+6+8+...+2n$'