jueves, 17 de mayo de 2018

Macro Potencia de un numero

name "potencia"

include "emu8086.inc"
include "macroos.txt"

.model small

data segment
    base  dw ?
    exp   dw ?
    resul dw ?
ends

code segment

call basic

basic proc
    call start
    call objetive
    call capture
    potencia_num
    call printer
    call salir
    ret
basic endp

start proc
    mov ax,data
    mov ds,ax
    mov es,ax
    ret
start endp

objetive proc
 
    printn " "
    printn " "
    printn " Potencia de un Numero "
    ret
objetive endp

capture proc
 
    printn " "
    printn " "
    printn " Dame tu numero  ===>  "
    call scan_num
    mov base,cx
 
    printn " "
    printn " "
    print " dame el exponente ==>  "
    call scan_num
    mov exp,cx
    ret
capture endp

printer proc
 
    printn " "
    printn " "
    print "   Resultado ==>   "
    call print_num
    ret
printer endp

salir proc
 
    printn " "
    printn " "
    print " presione una tecla para continuar..."
    mov ah,1
    int 21h
    mov ax,4c00h
    int 21h
    ret
salir endp

define_scan_num
define_print_string
define_print_num
define_print_num_uns
define_pthis

ends

----------------ESTA PARTE VA EN UN BLOC DE NOTAS--------------------------------------------------
POTENCIA_NUM    MACRO

  mov ax,1
  mov bx,base
  mov cx,exp
  ciclo:
       mul bx
       loop ciclo
  mov resul,ax

ENDM
--------------------------------------------------------------------------------------------------------------------------

 *detalle, por alguna razon despues de que le doy el numero el primer digito se elimina pero al dar el exponente el resultado es del numero que diste, en este caso era un 12

miércoles, 25 de abril de 2018

MacroLoop

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

sábado, 14 de abril de 2018

menu



pila segment stack "stack" ;segmento de pila
    db 100h dup (?) ;a partir de la direccion de 100 de la pila
pila ends

datos segment
    titulo db 13,10," Menu de opciones ",13,10 ,"$"
    mensaje db 13,10,"Presionar 1 color Cyan,letras negras",13,10, "$"
    mensaje2 db 13,10,"Presionar 2 color rojo,letras azules",13,10,"$"
    mensaje3 db 13,10,"presionar cualquier tecla para salir",13,10,"$"
    mensaje4 db 13,10,"Hola mundo en Negro",13,10,"$"
    mensaje5 db 13,10,"Hola mundo en azul",13,10,"$"
   
datos ends

codigo segment ;segmento de codigo
assume cs:codigo, ss:pila, ds:datos

  inicio:
           ;...........................................preparar pantalla
           mov ah,0
               mov al,3h ;modo texto
               int 10h ;interrupcion de video 
             
               mov ax,0600h ;limpiar pantalla
               mov bh,5fh ;0 color de fondo negro, f color de letra blanco
               mov cx,0000h
               mov dx,784fh
               int 10h
             
               mov ah,02h       
               mov bh,00       
               mov dh,00       
               mov dl,00
               int 10h
             
               ;..............................................mostrar mensajes
           mov ax,datos
           mov ds,ax
             
           lea dx,titulo
           mov ah,9h
           int 21h
             
           lea dx,mensaje
           mov ah,9h
           int 21h
         
           lea dx,mensaje2
           mov ah,9h
           int 21h
         
           lea dx,mensaje3
           mov ah,9h
           int 21h
         
            ;.........................................captura de teclas
                mov ah,08 ;pausa y captura de datos 05 espera que el usuario presione una tecla
                int 21h
               
                cmp al,49 ;ascii 49= numero1
                je llamarAzul ;salto condicional jump equals opcion 1 saltar si es igual ala opcion 1
               
                cmp al,50 ;ascii 50= numero 2 compara lo que tiene el registro ah con el ascii 50 en el reg ah
                je llamarMorado
               
                jmp fin  ;si no escoge ni enter ni 2, sale del programa
               
         fin:  ;saca el mensaje por pantalla
       
              mov ax,4c00h
              int 21h
             
              llamarAzul:
    CALL AZULPROC
llamarMorado:
    CALL MORADOPROC
;........................................................................
AZULPROC PROC NEAR
   
mov ah,0
              mov al,3h ;modo texto
              int 10h  ;interrupcion de video
             
              mov ax,0600h ;limpiar pantalla
              mov bh,30h ;0 color de fondo negro, f color de letra blanco
              mov cx,0000h
              mov dx,184fh
              int 10h
             
              mov ah,02h
              mov bh,00
              mov dh,00
              mov dl,00
              int 10h 
             
         
             
;;;;;;//////////////
              mov ah,06h   
              mov bh,1fh     
              mov cx,0000h
              mov dx,184fh   
              int 10h 
             
               ;mensaje
           mov ax,datos
           mov ds,ax
             
           lea dx,mensaje4
           mov ah,9h
           int 21h
 
 
 
              mov ax,4c00h
              int 21h
             
RET

AZULPROC ENDP

;----------------------------------
MORADOPROC PROC NEAR
           mov ah,06h   
           mov bh,41h     
           mov cx,0000h   
           mov dx,184fh   
           int 10h
         
           ;mensaje
           mov ax,datos
           mov ds,ax
             
           lea dx,mensaje5
           mov ah,9h
           int 21h   
         
           mov ax,4c00h   
           int 21h
         
           
RET

MORADOPROC ENDP

codigo ends
end inicio

ciclo

.model small
.stack 64
.data  ;en data se declaran variables y cadenas a usar en el programa
mensaje db 0ah, 0dh,"Letrero cinco veces","$" ;declaramos una cadena
.code
inicio:
     mov cx,10 ;numero de veces a repetir el ciclo
veces:
     mov ax,@data
     mov ds,ax
     mov dx,offset mensaje ;lee la cadena desde nuestro segmento de datos
     mov ah,09h
   int 21h
loop veces ;se repite desde nuestra etiqueta ciclo

   mov ah,04ch ;Al terminar finaliza el programa
   int 21h
   end inicio

registro CF

;desbordamiento del registro CF con suma
ORG 100h

;mov al,254
;mov bl,1
;add al,bl

; desbordamiento del registro CF con multiplicacion
mov al,254
mov bl,2
mul al
ret

;desbordamiento del registro CF con division
;mov al,254
;mov bl,2
;div bl
;ret

Loop Potencia

org 100h



.model small

.stack 64

.data



mensaje db 10,13 ,"Dame un numero",10,13,"$"

mensaje2 db 10,13 ,"Dame un la potencia",10,13,"$"

n1 db 0

n2 db 0

n3 db 0

.code



inicio:     ;funcion inicio



 mov ax,@data ;Movemos el segmento data a ax

 mov ds,ax ; Movemos lo que esta en ax a ds

 mov dx,offset mensaje ;Imprimimos el primer mensaje parte 1

 mov ah, 09h ;Imprimimos el primer mensaje parte 2

 int 21h ;Imprimimos el primer mensaje parte 3



 mov ah,01     ;pausa y espera a que el usuario presione una tecla

 int 21h        ;interrupción para capturar

 sub al,30h   ;lo que el usuario presiono se guarda en al y se le resta 30h para convertirlo a un numero

 mov n1,al ;Movemos lo que esta en al a la variable n1

 mov n3,al  ;Movemos lo que esta en al a la variable n3



 mov ah, 09h ;imprimimos el mensaje 2 parte 1

 mov dx,offset mensaje2  ;imprimimos el mensaje 2 parte 2

 int 21h  ;imprimimos el mensaje 2 parte 3

 mov ah,01     ;pausa y espera a que el usuario presione una tecla

 int 21h           ;interrupcion para capturar

 sub al,30h     ;lo que el usuario presiono se guarda en al y se le resta 30h para convertirlo a un numero

 mov n2,al     ;Guardamos lo que el usuario preciono el n2





 mov cl,al ; movemos lo que esta en al a cl para decirle al ciclo cuantas vueltas va a dar

 sub cl,1 ;le restamos 1 para que no de una vuelta de mas





call ciclo ;llamada a ciclo



ciclo:  ;Funcion

 call ciclo1 ;llamada el procediemto 1



ciclo1 proc near : ;procedimiento ciclo

  mov al,n1 ;potencia parte 1

  mov bh,n3 ;potencia parte 2

  mul bh ;potencia parte 3



  mov n1,al



  loop ciclo1 ;loop a la funcion ciclo





  mov ax,4c00h ;fin parte 1

  int 21h; fin parte 2



fin: ;funcion fin

 mov ax,4c00h      ;funcion que termina el programa

 int 21h

end inicio

loop seleccionar mensaje





pila segment stack 'stack'
    db 100h dup (?)
pila ends

datos segment             ;texto e instrucciones.
 av db 13,10,' Presione 1 o 2 ',13,10,'$'
    msj db 13,10,' Lenguaje ensamblador ',13,10,'$'
    m db 13,10,' Lenguaje de Interfaz ',13,10,'$'
datos ends


codigo segment ;segmento de codigo
    assume cs:codigo, ss:pila, ds:datos

    inicio:
  
        mov ax, datos
        mov ds, ax
      
        lea dx,av
        mov ah,9h
        int 21h
      
        mov ah,08   ;pausa y captura datos 08 espera que el usuario presione una tecla
        int 21h
      
        cmp al,49      ;verifica si presiono 1
        je pOpcion

        cmp al,50      ;verifica si presiono 2
        je sOpcion    
      
         jmp fin           ;finaliza en caso de no recibir respuesta de enter o 2

    fin:  
       mov ax,4c00h
       int 21h
                        
    pOpcion:
        CALL PO
      
    sOpcion:
        CALL SO

      
    PO PROC NEAR
        mov ah, 9h
        lea dx, msj
        mov cx, 12
  print_LOOP:
          int 21h
          loop print_LOOP
          mov ax,4c00h
          int 21h
          RET
    PO ENDP


  SO PROC NEAR
        mov ah, 9h
       lea dx, m
       mov cx, 12
  pLOOP:
       int 21h
       loop pLOOP   
       mov ax,4c00h
       int 21h                             
       RET
   SO ENDP


codigo ends
end inicio

lOOPZ



; uso del LOOPZ, REPETICION BASADA EN
;COMPARACION SI ES IGUAL A 0

; INTERRUPCION PARA LEER DEL TECLADO ES LA INT16H

; CUANDO USAMOS LA INT16H , EL PARAMETROA USAR ES AH = 0
; Y EL CARACTER LEIDO QUEDARA EN AL= CARACTER LEIDO


.model small
.stack 64

.data         
;mensaje1 db "instrucciones de repeticion

.code 


inicio:

   
    mov al,'>' ; caracter inicial
    mov cx,10 ;numero de veces a repetir el ciclo
leer_car:
   
     mov ah,0EH ;FUNCION PARA IMPRIMIR EL CARACTER AL
     int 10h    ;llama al BIOS
   
     mov ah,08     ;pausa y espera a que el usuario precione una tecla
     int 21h ;interrupcion para capturar

     
     cmp al,'S'; el caracter leeido la int 16h lo guarda en al
   
loopz leer_car ;toma en cuenta la comparacion del cmp si se cumple continua

 
    ; coloco el fin de la linea para que baje una linea y lo baje
    mov ah,0EH ; FUNCION DEL BIOS PARA IMPRIMIR CARACTER
    mov al,10
    int 10h
 
    MOV AL,13
    INT 10H
 
 
 
  mov ah,04ch ;Al terminar finaliza el programa.
  int 21h
 end inicio

mensaje con loop



.model small
.stack 64

.data
mensaje db "Ingresa el numero de veces que se repetira el mensaje (1-9)",13,10,'$'
repetir db 13,10,"Repitiendo el ciclo $"

.code
inicio proc far
   
    mov ax, @data
    mov ds, ax
   
    mov ah, 09
    lea dx, mensaje
    int 21h

    mov ah, 01
    int 21h
    sub al, 30h
   
    mov cl, al
   
    ciclo:
        mov ah, 09
        lea dx, repetir
        int 21h
    loop ciclo

    mov ax,4c00h
    int 21h
inicio endp
end

colores


BIOS EQU 10H
DOS EQU 21H
FIN EQU 4C00H

.DATA
    TITULO DB 'Princess Moon '
    COLORES DB 5BH
    DB 5FH
    DB 5BH
    DB 5FH
    DB 5BH
    DB 5BH
    DB 0F0H
    DB 00H
    DB 09CH
    DB 09FH
    DB 09CH
    DB 09FH
    DB 09CH
    DB 00H
    ;DB 0CH
   
.CODE
    INICIO PROC NEAR:
    MOV AX, @DATA
    MOV DS, AX
    ;Esta parte de aqui no es necesaria
    INT BIOS
   
    MOV CX, 15
       
        BUCLE:
            ;Ponemos esto para no agarrar basura
            MOV DX,SI
            ADD DX,35 ;columna
            MOV DH, 12 ;renglon
            CALL COLOCA
            MOV AL, [SI+OFFSET TITULO]
            MOV BL, [SI+OFFSET COLORES]
            CALL COLOR
            INC SI
        LOOPNZ BUCLE
       
        MOV AH, 0
        INT DOS
        CALL COLOCA
        MOV AX, FIN
        INT DOS
   
    COLOR PROC
    MOV AH, 9
    INT BIOS
    RET
        
    COLOCA PROC
    MOV AH,2
    INT BIOS
    RET

END INICIO

domingo, 25 de febrero de 2018

tres mensajes con fondo de color



CR EQU 13
LF EQU 0Ah
IMPRIMIR EQU 9
FIN EQU 4C00H
DOS EQU 21H

DATOS SEGMENT
    MENSAJE DB CR,LF,'SARAHI CRUZ MEDINA', CR, LF, '$'
    

    MENSAJE2 DB CR,LF,'LUZ EDITH PEREZ SOTO', CR, LF, '$'
    

    MENSAJE3 DB CR,LF,'VALERIA ESMERALDA VARGAS REQUENA', CR, LF, '$'
DATOS ENDS
    
PILA SEGMENT STACK 
    DB 64 DUP ("PILA")
PILA ENDS 

CODIGO SEGMENT 
    HM PROC FAR
    ASSUME CS: CODIGO, DS:DATOS, SS:PILA
              MOV ah,06H ;MANEJA SCROLL
              mov bh,2fh ;2 color verde fondo y f letras blanco, ver liga de colores BIOS
              mov cx,0000h;ESQUINA SUPERIOR IZQ
              mov dx,999fh;esquina inf derecha
              int 10h ;modo de video,cosas de pantalla
              mov ah,02h ;posicionar el cursor
              mov bh,00h ;pone el modo de vi
              mov dx,0000h
              int 10h
   
    ;EMPIEZA LOS LETREROS
    MOV AX,DATOS
    MOV DS,AX  
    
    LEA DX,MENSAJE
    MOV AH,9
    INT 21H
    
    lea dx,MENSAJE2
    MOV AH,9
    INT 21H
    
    LEA DX,MENSAJE3
    MOV AH,9
    INT 21H
    
    MOV AX,4C00H
    INT 21H
    
   
   
    
    HM ENDP
CODIGO ENDS 
END HM






limpia pantalla


FIN EQU 4C00H
DOS EQU 21H
MONITOR EQU 10H

PILA SEGMENT STACK 
    DW 100 DUP("0")
PILA ENDS



codigo segment
    CLS PROC FAR
        ASSUME CS:CODIGO, SS:PILA
        CALL LIMPIA_PANTALLA
        MOV AX,FIN ;SE USA PARA FINALIZAR UN PROGRAMA
        INT DOS ;SE DEBE INCLUOR LA INT 21H
    CLS ENDP
    
    
    LIMPIA_PANTALLA PROC NEAR
        MOV AX,0600H ;ah 06(es un recorrido),al 00(pantalla completa)
        MOV BH,30H ;FONDO BLANCO(7),SOBRE AZUL(1)
        MOV CX,000H;ES LA ESQUINA SUPERIOR IZQUIERDA REGLON:COLUMNA
        MOV DX,484FH;ES LA ESQUINA SUPERIOR DERECHA RENGLON:COLUMNA
        INT 10H
        RET
    LIMPIA_PANTALLA ENDP
   
   
codigo ENDS
END CLS


holamundo(turboassambler)


CR EQU 13
LF EQU 0Ah

DATOS SEGMENT
    MENSAJE DB CR,LF,'Hola mundo este programa fue compilado por Vale Vargas',CR,LF,'$'
DATOS ENDS

PILA SEGMENT STACK
    DB 64 DUP("PILA")
PILA ENDS

CODIGO SEGMENT
    HM PROC FAR
    ASSUME CS: CODIGO,DS:DATOS,SS:PILA
    
    MOV AX,DATOS
    MOV DS,AX
    LEA DX,MENSAJE
    
    MOV AH,9
    INT 21H
    
    MOV AX,4C00H
    INT 21H
    
    HM ENDP
    
CODIGO ENDS
END HM

cambiar color de pantalla








pila segment stack "stack" ;segmento de pila
    db 100h dup (?) ;a partir de la direccion de 100 de la pila
pila ends

datos segment
    titulo db 13,10," cambiar fondo de pantalla ",13,10 ,"$"
    mensaje db "presione ENTER si quiere que la pantalla azul.Siquiere morado presione 2",13,10,"para salir presione cualquier tecla",13,10,"$"  
    
datos ends

codigo segment ;segmento de codigo
    assume cs:codigo, ss:pila, ds:datos
    
    inicio:
           ;...........................................preparar pantalla
           mov ah,0
               mov al,3h ;modo texto
               int 10h ;interrupcion de video  
               
               mov ax,0600h ;limpiar pantalla
               mov bh,0fh ;0 color de fondo negro, f color de letra blanco
               mov cx,0000h
               mov dx,784fh
               int 10h
               
               mov ah,02h         
               mov bh,00         
               mov dh,00         
               mov dl,00
               int 10h
               
             ;..............................................mostrar mensajes
           mov ax,datos
           mov ds,ax
               
           lea dx,titulo
           mov ah,9h
           int 21h
               
           lea dx,mensaje
           mov ah,9h
           int 21h
              ;.........................................captura de teclas
                mov ah,08 ;pausa y captura de datos 05 espera que el usuario presione una tecla
                int 21h
                
                cmp al,13 ;verifica si presiono Enter,el cual tiene un codigo ascii
                je llamarAzul ;salto condicional jump equals opcion 1 saltar si es igual ala opcion 1
                
                cmp al,50 ;ascii 50= numero 2 compara lo que tiene el registro ah con el ascii 50 en el reg ah
                je llamarMorado
                
                jmp fin  ;si no escoge ni enter ni 2, sale del programa
                
         fin:  ;saca el mensaje por pantalla
         
              mov ax,4c00h
              int 21h
llamarAzul:
    CALL AZULPROC
llamarMorado:
    CALL MORADOPROC
;........................................................................
AZULPROC PROC NEAR
    
mov ah,0
              mov al,3h ;modo texto
              int 10h  ;interrupcion de video
              
              mov ax,0600h ;limpiar pantalla
              mov bh,0fh ;0 color de fondo negro, f color de letra blanco
              mov cx,0000h
              mov dx,184fh
              int 10h
              
              mov ah,02h
              mov bh,00
              mov dh,00
              mov dl,00
              int 10h
              
;;;;;;//////////////
              mov ah,06h    
              mov bh,1fh       
              mov cx,0000h 
              mov dx,184fh    
              int 10h   

   
   
   
              mov ax,4c00h
              int 21h
              
RET

AZULPROC ENDP

;----------------------------------
MORADOPROC PROC NEAR
           mov ah,06h    
           mov bh,5fh       
           mov cx,0000h    
           mov dx,184fh    
           int 10h   
           
           mov ax,4c00h    
           int 21h 
RET 

MORADOPROC ENDP

codigo ends
end inicio 
              
              

Hola Mundo



.model small
.stack
.data
   saludo   db "Hola mundo, soy vale vargas!!!", "$"

.code

main  proc              ;Inicia proceso
   mov   ax,seg saludo    
   mov   ds,ax         

   mov   ah,09          
   lea   dx,saludo         
   int   21h               

;mensaje en pantalla

   mov   ax,4c00h       
   int   21h            

main  endp              
end main

int10h





;CAMBIAR EL COLOR DE LA PANTALLA
;PILA SEGMENT STACK "STACK"
; DB 100 DUP("0)
;PILA ENDS

DATOS SEGMENT
    MENSAJE DB 10,13,"SE HA CAMBIADO EL COLOR DE LA PANTALLA$",10,13,"$"
    
DATOS ENDS


CODIGO SEGMENT
    
       ASSUME CS:CODIGO,DS:DATA
    
       INICIO:
              MOV ah,06H ;MANEJA SCROLL
              mov bh,2fh ;2 color verde fondo y f letras blanco, ver liga de colores BIOS
              mov cx,0000h;ESQUINA SUPERIOR IZQ
              mov dx,999fh;esquina inf derecha
              int 10h ;modo de video,cosas de pantalla
              
              
              
              mov ah,02h ;posicionar el cursor
              mov bh,00h ;pone el modo de vi
              mov dx,0000h
              int 10h
           
              ;despliege del mensaje
              mov ax,DATOS
              mov dx,ax
              lea dx,MENSAJE
              mov ah,9h
              int 21h
           
              ;cierre del programa
              mov ax,4c00h
              int 21h

CODIGO ENDS 
END INICIO


registro SF


; registro bandera SF, toma el valor de 1 cuando el resultado es negativo
ORG 100h

mov al,2
mov bl,3
sub al,bl 
ret

Registro OF



org 100h

mov al,100
mov bl,50
add al,bl
ret

Uso de constantes



.MODEL SMALL

.STACK 100H

;DECLARACION DE CONSTANTES
CR1 EQU 13
LF1 EQU 10
IMPRIMIR EQU 9H ;ORDEN DE EL 9PARA MOSTRAR EN PANTALLA
FIN EQU 4C00H
DOS EQU 21H

.DATA   ;ES OPCIONAL LA PALABRA RESERVADA SEGMENT
TEXTO DB LF1,LF1,CR1, "EJEMPLO DE USO DE CONSTANTES$"




.CODE 

Inicio: ;Punto de entrada al programa

MOV ax,@DATA
MOV ds,ax

mov dx,OFFSET TEXTO
MOV AH,IMPRIMIR ;IMPRIMIR EN PANTALLA
INT DOS
MOV AX,FIN
INT DOS
END Inicio
END

Suma



;programa del video del blog
.model small
.stack 64
.data

n1 db 0
n2 db 0
suma db 0
msg1 db "dame el primer valor,$"
msg2 db 10,13, "dame el segundo valor,$"
msg3 db 10,13, "suma:,$"
.code
inicio:
    ;Direccionamos al segmento de datos
    mov ax,@data
    mov ds,ax
    
    ;solicitamos el primer digito
    mov ah,09
    lea dx,msg1
    int 21h
    ;se lee el primer valor
    mov ah,01
    int 21h
    sub al,30h ;convertir el caracter a numero
    mov n1,al
    
    ;solicitamos el segundo digito
    mov ah,09
    lea dx, msg2
    int 21h
    ;se lee el primer valor
    mov ah,01
    int 21h
    sub al,30h ;convertir el caracter a numero
    mov n2,al
    
    ;operacion
    mov al,n1
    add al,n2
    add al,30h ;convierte a caracter
    mov suma,al
    mov ah,09
    lea dx,msg3
    int 21h
    
    ;se imprime el caracter con el servicio 02 de la int 21h
    mov ah,02
    mov dl, suma
    int 21h
    mov ah,4ch
 end inicio
 end
     

Macro Potencia de un numero

name "potencia" include "emu8086.inc" include "macroos.txt" .model small data segment     base  dw ? ...