elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Ayuda asm 8086
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda asm 8086  (Leído 6,039 veces)
dayana26

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Ayuda asm 8086
« en: 13 Agosto 2014, 03:55 am »

tengo una tarea q es hacer una calculadora conversion, usando el mouse, y al dar clip a los numeros aparezcan como en una calculadora y al darle clip a una de las opciones aparezca el resultado, la pregunta es, como hago para q al darle clip me aparezca el numero en un cuadro pequeño y de hay lo lea como variable para dspues realizar un tipo de conversion ya sea binario, decimal o hexadecimal. esto es lo q tengo hasta ahora.



include lib1_b.txt
                                               
.model small ;modelo del programa
.stack 100h
.code

inicio proc
   
        MOV     AX, @data     
        MOV     DS, AX           ; Se ubica el segmento de datos    
       MOV     AH,0         ; Ajusta modo video y limpia pantalla
        MOV     AL,3         ; Modo de video
        mov ax, 0600h
       mov cx, 0000h
       mov dx, 184fh
       mov bh, 01fh
        INT     10H             ; Llama a la INT de video 
        jmp    pant1

        MOV   AH,1      ;Espera tecla por medio del DOS
       INT   21H 
      
       jmp pant2
         
        MOV AH,0   ; Ajusta modo video y limpia pantalla
        MOV AL,3   ; Modo de video
        INT 10H 
       
                 
ENDP 

;-------pantallas----------
pant1:      
   gotoxy 5,24
   escribe msg1        ; Imprimir el 1er mensaje
     gotoxy 8,28
    escribe msg2        ; Imprimir el 2do mensaje
    gotoxy 11,30
    escribe msg10
    MOV   AH,1      ;Espera tecla por medio del DOS
   INT   21H     
   

;----------pantalla 2---------------       

                                                                                 
pant2:
   
    MOV AH,0   ; Ajusta modo video y limpia pantalla
    MOV AL,3   ; Modo de video
    mov ax, 0600h
   mov cx, 0000h
   mov dx, 184fh
   mov bh, 08fh
    INT 10H 
   
   
   
    gotoxy 04,20
    escribe msg3        ; Imprimir el 3er mensaje
   
    gotoxy 06,22
   
    mov ax, 600h   
   mov cx, 1718h
   mov dx, 0727h
   mov bh, 0F0h       
    INT 10H   
   
    gotoxy 10,22         ; Imprimir el num 7 mensaje
    escribe msg14
   
    gotoxy 10,32
    escribe msg15        ; Imprimir el num 8 mensaje
   
    gotoxy 10,42
    escribe msg16        ; Imprimir el num 9 mensaje
   
   gotoxy 13,22         
    escribe msg11
   
    gotoxy 13,32
    escribe msg12       
   
    gotoxy 13,42
    escribe msg13 
   
   gotoxy 16,22         
    escribe msg6
   
    gotoxy 16,32
    escribe msg5       
   
    gotoxy 16,42
    escribe msg4
   
   gotoxy 19,32
    escribe msg17
   
    gotoxy 10,50
    escribe msg18
   
    gotoxy 13,50
    escribe msg19
   
    gotoxy 16,50
    escribe msg20         
   
   
              
    gotoxy 22,2
    escribe msg7        ; Imprimir el 6to mensaje
   

    gotoxy 19,10
    call mouse     
 ;   call COMPARA 
    call salir
    ret       


;------leer desde teclado--------- 

MENSAJE PROC
         MOV       AH,9
        INT     21H    
        RET
ENDP

LEER PROC
      MOV     AH,1
     INT     21H   ; EL DATO QUEDA EN AL
    RET       
ENDP

CURSOR  PROC
        MOV     AH,2
        MOV     DL,X
        MOV     DH,Y
        INT     10H                     ;Coloca cursor para dezplegar mensaje
        RET
ENDP

;--------------mouse-------------
       
mouse proc
    mov ax, 0               ;INICIALIZA EL MOUSE
    int 33h

    mov ax, 1               ;MUESTRA EL APUNTADOR DEL MOUSE
    int 33h

    BOTON:
    mov ax, 3               ;OBTIENE EL ESTADO DEL BOTON Y LA POSICION DEL APUNTADOR
    int 33h

    cmp bx,1  ; both buttons
    MOV POS,DX
    je calcu
    jmp boton
    RET
ENDP   

;-----------Calculadora compara---------

calcu proc                              ; compara la fila con la columna si coinside salta al
         ;DX FILA CX COLUMNA                  ; numero correspondiente
   
        CMP     CX,176
        CMP     DX,80                  ;4=34H
        JBE      siete                  ;Salta si es igual
        CMP     CX,256
        CMP     DX,80                  ;5=35H
        JBE      ocho                  ;Salta si es igual
        CMP     CX,336
        CMP     DX,80                  ;6=36H
        JBE      nueve                  ;Salta si es igual 
        CMP     CX,176
        CMP     DX,104                  ;4=34H
        JBE      cuatro                  ;Salta si es igual
        CMP     CX,256
        CMP     DX,104                  ;5=35H
        JBE      cinco                  ;Salta si es igual
        CMP     CX,336
        CMP     DX,104                  ;6=36H
        JBE      seis
        CMP     CX,176
        CMP     DX,128                  ;4=34H
        JBE      uno                  ;Salta si es igual
        CMP     CX,256
        CMP     DX,128                  ;5=35H
        JBE      dos                  ;Salta si es igual
        CMP     CX,336
        CMP     DX,128                  ;6=36H
        JBE      tres
        CMP     CX,256
        CMP     DX,152                  ;6=36H
        JBE      cero 
        CMP     CX,400
        CMP     DX,80                  ;6=36H
        JBE      bin
        CMP     CX,400
        CMP     DX,104                  ;6=36H
        JBE      deci
        CMP     CX,400
        CMP     DX,128                  ;6=36H
        JBE      hexa
         ;jmp     pant2     
         ;ret
endp
   
 
   
;--------calcu mostrar valores si es uno deberia dar clip izq y mostrarlo en el cuadro en
                ; blanco de pan2 ------

uno: 
        ;call pant2
 
        gotoxy 07,28
       escribe msg4    ; Direccion del mensaje
 
        JMP     calcu 
       

dos:
        ;call pant2
        gotoxy 07,29
       escribe msg5    ; Direccion del mensaje
        JMP     calcu
       
       
tres:
        ;call pant2
        gotoxy 07,30
       escribe msg6    ; Direccion del mensaje
        JMP     calcu
       
     
cuatro:
        ;call pant2
        gotoxy 07,30
       escribe msg11    ; Direccion del mensaje
        JMP     calcu
             
       
cinco:
       ; call pant2
        gotoxy 07,31
       escribe msg12    ; Direccion del mensaje
        JMP     calcu
         
       
seis: 
        ;call pant2
        gotoxy 07,32
       escribe msg13
        JMP     calcu
         

siete:
     
       ; call pant2
 
       gotoxy 07,33
        escribe msg14
        JMP     calcu
         
     
ocho:
     
        ;call pant2
        gotoxy 07,34
       escribe msg15    ; Direccion del mensaje
        JMP     calcu
       
     
nueve:
   
        ;call pant2
        gotoxy 07,35
        escribe msg16    ; Direccion del mensaje
        JMP     calcu
       
   
cero:
        ;call pant2
        gotoxy 07,36
       escribe msg17    ; Direccion del mensaje
        JMP     calcu
         



;-------------------comparar------------              
   
;COMPARA PROC
;        CMP     AL,61H         
;        JE      uno                  
;;        CMP     AL,32H                 
;;        JE      dos                  
;;        CMP     AL,33H                 
;;        JE      tres                  
;       CMP     AL,34H                 
;        JE      SALIR                 
;        JMP     pant2             
;        RET
;ENDP   
   
              
;---------Salir------------
salir:           
        MOV     AH,0
        MOV     AL,4
        INT     10H
        MOV     AH,4CH
        INT     21H
        RET
 


OTRO   PROC
       MOV     X,30
        MOV     Y,20
        CALL    CURSOR
        LEA     DX,MEN6
        CALL    MENSAJE

       RET
ENDP   
         
 
         
--------------Mensaje segun la tecla-----------

bin: 
      mov SI,6
       
      mov Ah,00h;Aseguramos residuo de 0
      mov Al,num
      mov Bl,2
      div Bl
      mov var1,Ah
      mov num,Al

      mov dl,var1
      add dl,30h

      mov cad[SI],dl;Concatenamos resultados

      cmp num,1 ;Hacemos comparación
      dec SI
      jne uno   ;Indicamos volver a etiqueta bin o:
       je salida   ;Ir a etiqueta salir



      cmp num,0 ;Comparación con 0
      jne uno
      je salida

   salida:
    MOV AH,0   ; Ajusta modo video y limpia pantalla
    MOV AL,3   ; Modo de video
    mov ax, 0600h
   mov cx, 0000h
   mov dx, 184fh
   mov bh, 08fh
    INT 10H 
   
   
   
    gotoxy 04,20
    escribe msg3        ; Imprimir el 3er mensaje
   
    gotoxy 06,22
   
    mov ax, 600h   
   mov cx, 1718h
   mov dx, 0727h
   mov bh, 0F0h       
    INT 10H   
             ;Etiqueta de salida
       gotoxy 07,31
      mov dl,num ;Proceso para imprimir cadena final con número binario
      add dl,30h

      mov cad[SI],dl
   
  ;mov ah,09h
;  lea Dx,cad
;  int 21h             
     
   MOV   AH,1
   INT   21H
   JMP   pant2



deci:MOV     AH,0
    MOV     AL,3
    INT     10H      ;
       
    MOV AH,2
   MOV   DL,15
   MOV   DH,10
   INT   10H         ;Coloca el cursor para el primer mensaje
    gotoxy 8,30
    MOV   AH,9H
    LEA DX,MEN4           ;Despliega primer mensaje
   INT   21H 
   gotoxy 10,30             
   MOV   AH,9H
   LEA DX,mensd1
   INT   21H     
   gotoxy 11,30
   MOV   AH,9H           
   LEA DX,mensd2          
   INT   21H   
   gotoxy 12,30
   MOV   AH,9H
   LEA  DX,mensd3          
   INT   21H             
   gotoxy 13,30
   MOV   AH,9H
   LEA  DX, mensd4          
   INT   21H             
   gotoxy 14,30
   MOV   AH,9H
   LEA DX, mensd5          
   INT   21H 
   gotoxy 15,30           
   MOV   AH,9H
   LEA DX, mensd6          
   INT   21H             
    gotoxy 17,30
   MOV   AH,9H
   LEA DX, mensd7          
   INT   21H               
     
    MOV   AH,1
   INT   21H
   JMP   pant2



hexa:MOV     AH,0
    MOV     AL,3
    INT     10H      ;
       
    MOV AH,2
   MOV   DL,15
   MOV   DH,10
   INT   10H         ;Coloca el cursor para el primer mensaje
    gotoxy 8,30
    MOV   AH,9H
    LEA DX,MEN5           ;Despliega primer mensaje
   INT   21H 
   gotoxy 10,30             
   MOV   AH,9H
   LEA DX,menst1
   INT   21H     
   gotoxy 11,30
   MOV   AH,9H           
   LEA DX,menst2          
   INT   21H   
   gotoxy 12,30
   MOV   AH,9H
   LEA  DX,menst3          
   INT   21H             
   gotoxy 13,30
   MOV   AH,9H
   LEA  DX, menst4          
   INT   21H             
   gotoxy 14,30
   MOV   AH,9H
   LEA DX, menst5          
   INT   21H 
   gotoxy 15,30           
   MOV   AH,9H
   LEA DX, menst6          
   INT   21H             
    gotoxy 17,30
   MOV   AH,9H
   LEA DX, menst7          
   INT   21H               
     
    MOV   AH,1
   INT   21H
   JMP   pant2




END inicio               ; Fin del programa

usando esta libreria

include lib2_b.txt



.data               ;Espacio de datos y mensajes

msg1 DB      'UNIVERSIDAD ','$'
msg2 DB      'Dayana','$'
msg10 DB    'Arqui','$'

msg3 DB      'Calculadora de conversion','$'
msg4 DB      '1','$'
msg5 DB      '2 ','$'
msg6 DB      '3','$'
msg11 DB    '4','$'
msg12 DB    '5','$'
msg13 DB    '6','$'
msg14 DB    '7','$'
msg15 DB    '8','$'
msg16 DB    '9','$'
msg17 DB    '0','$'

msg18 DB   'Binario','$'
msg19 DB   'Decimal','$'
msg20 DB   'Hexadecimal','$'
 
msg7 DB     'Presione 4 para salir','$'
msg8 DB     'Precione cualquier tecla','$'
msg9 DB     'Presione 5 para regresar al menu principal','$'


MEN6      DB      'Presione cualquier tecla ','$'


x   db   '?'         ;declaración de variables
y   db   '?'
pos           dW             '?'

cad  db 9 dup (' '),'$'
var1 db ?
num  db ?
aux  db ?



lee Macro Dato
   mov ah,1
   int 21h
                  escribe msg1
   mov Dato,al

endm

escribe Macro Vari
   lea dx,Vari
   mov ah,9
   int 21h
endm

gotoxy Macro Fil,Col
   mov ah,02h
   mov bh,00
   mov dh,Fil      ;fila
   mov dl,Col      ;columna
   int 10h
endm

getch Macro
    mov ah,1
    int 21h
endm

q incluye esta otra libreria

getcha Macro
    mov ah,1
    int 21h
         getch
endm

si  alguien puede ayudarme se lo agradecería o darme una idea de como realizarlo. Gracias de ante mano. :)


En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Ayuda asm 8086
« Respuesta #1 en: 17 Agosto 2014, 13:13 pm »

 Desde el cel solo puedo decir que jbe salta si es igual o menor el primer operando, me da la impresion que tendrias que usar je

Recuerda que no se hacen tareas, podrias decir exactamente donde esta el error?


« Última modificación: 17 Agosto 2014, 13:25 pm por Eternal Idol » En línea

dayana26

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Ayuda asm 8086
« Respuesta #2 en: 18 Agosto 2014, 06:30 am »

hola, eso ya lo hice, me podrian decir si alguien sabe como leo los caracteres desde la pantalla, basicamente el programa es una calculadora usando el mouse unicamente y necesito leer los caracteres desde la pantalla para despues hacer los calculos

tengo esto pero con esto leo desde el teclado  :-\

MOV     AH,01h
INT     21h
MOV     BH,AL
INT     21h
MOV     AH,BH
SUB     AX,3030h    ;convierte de ascii a binario natural
RET
En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Ayuda asm 8086
« Respuesta #3 en: 18 Agosto 2014, 15:36 pm »

Yo creo que tenes que usar las coordenadas del mouse, no tratar de leer la pantalla, para eso tendrias que recorrer caracter por caracter hasta llegar a la posicion del mouse, no lo veo util eso.. podes obtener esas coordenadas y saber en que area se hizo click.. me explique bien?

Saludos!
« Última modificación: 18 Agosto 2014, 15:44 pm por Eternal Idol » En línea

dayana26

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Ayuda asm 8086
« Respuesta #4 en: 19 Agosto 2014, 06:43 am »

la idea es que solo lea dos numeros de la pantalla y despues al hacer click en binario o decimal haga la conversion
En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Ayuda asm 8086
« Respuesta #5 en: 19 Agosto 2014, 19:51 pm »

Citar
la idea es que solo lea dos numeros de la pantalla y despues al hacer click en binario o decimal haga la conversion

Claro.. te entendí.. pero lo que yo te digo es que NO leas números de la pantalla.. imagínate que vos sabes en que posición están los números.. yo te decía que obtengas la posición del mouse en el momento que se hace click, la función 03h de la interrupción 10h te puede servir..

Mas acá:
Citar

Saludos!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
8086, x86 o x64? « 1 2 »
ASM
APOKLIPTICO 10 7,304 Último mensaje 30 Mayo 2009, 03:38 am
por -Gosw-
ayuda con lenguaje ensamblador 8086
ASM
benedyt 1 4,090 Último mensaje 5 Abril 2010, 22:13 pm
por Debci
Por que se habla tanto del 8086 ?
ASM
Vaagish 8 5,183 Último mensaje 24 Junio 2013, 17:29 pm
por Eternal Idol
ejercicio de assembler en 8086
ASM
manuelmtl 3 3,738 Último mensaje 15 Noviembre 2014, 21:56 pm
por Eternal Idol
Ayuda con ejercicios de ensamblador 8086
ASM
rdomenzain 1 4,322 Último mensaje 14 Diciembre 2015, 07:33 am
por fary
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines