• Domingo 22 de Diciembre de 2024, 12:36

Autor Tema:  Ayuda De Expertos  (Leído 1995 veces)

SAJOSUE

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Ayuda De Expertos
« en: Martes 26 de Octubre de 2004, 23:34 »
0
:)
Señores tengan ustedes buen día, el motivo de peticion es para solicitar si alguien me puede ayudar con el siguiente codigo de una calculadora, esta calculadora esta en texto pero necesito que estas opciones se puedan elegir en el mouse o moviemdome con las flechas, si alguien fuera tan fino de ayudarme le quedare muy agradecido, el codigo con el que cuento es el siguiente:
 :(

.model small
segd segment
errorcap  db   0
cantidad  db   0
cantunor  dw   0
cantdosr  dw   0
cantunon  db   6, 0, 6 dup (?)
cantdosn  db   6, 0, 6 dup (?)
funcion   db   0
resulta   db   13, 10,13,10,"el resultado es: $"
resultar  db   11 dup (?)
mena      db   "Programa calculadora, que le permite realizar las"
          db   13,10
          db   "operaciones de multiplicacion, division, suma"
          db   13,10,"y resta sobre dos cantidades enteras."
          db   13,10,13,10,"$"
menu      db   13,10,13,10,"digite:",13,10,13,10
          db   "(1) para multiplicar.",13,10
          db   "(2) para dividir.",13,10
          db   "(3) para sumar.",13,10
          db   "(4) para restar.",13,10
          db   "(5) para terminar.",13,10,"$"
error     db   7,7,7,13,10,"error: en la seleccion de las opciones.$"
;          db   13,10,13,10,"$"
error1    db   7,7,7,13,10,"error$"
cantunom  db   7,7,7,13,10,"dame primera cantidad: $"
cantdosm  db   7,7,7,13,10,"dame segunda cantidad: $"
potencia  dw   0001h, 000ah, 0064h, 03E8h, 2710h
potenciaf dw   $
segd ends

segc segment
assume ds: segd, cs:segc

start:        mov    ah, 0fh
              int    10h
              mov    ah, 0
              int    10h
              mov    ax, segd
              mov    ds, ax
              mov    dx, offset mena
              call   imprime
              mov    si, offset resultar
              add    si, 11
              mov    al, "$"
              mov    [si], al
otra:         mov    dx, offset menu
              call   imprime
              call   obtentecla
              cmp    al, 49
              jae    sigue
              mov    dx, offset error
              call   imprime
              jmp    otra
sigue:        cmp    al, 53
              jbe    todobien
              mov    dx, offset error
              call   imprime
              jmp    otra
todobien:     cmp    al, 53
              jnz    checatodo
              jmp    funcion5
checatodo:    mov    funcion, al
capcant01:    mov    dx, offset cantunom
              call   imprime
              mov    ah, 0ah
              mov    dx, offset cantunon
              int    21h
              mov    errorcap, 0
              mov    cantidad, 0
              call   convnum
              cmp    errorcap, 1
              jz     capcant01
              mov    cantunor, bx
capcant02:    mov    errorcap, 0
              mov    cantidad,1
              mov    dx, offset cantdosm
              call   imprime
              mov    ah, 0ah
              mov    dx, offset cantdosn
              int    21h
              call   convnum
              cmp    errorcap, 1
              jz     capcant02
              mov    cantdosr, bx
              mov    al, funcion
              cmp    al, 31h
              jne    funcion2
              call   multiplica
              jmp    otra
funcion2:     cmp    al, 32h
              jne    funcion3
              call   divide
              jmp    otra
funcion3:     cmp    al, 33h
              jne    funcion4
              call   suma
              jmp    otra
funcion4:     cmp    al, 34h
              jne    funcion5
              call   resta
              jmp    otra
funcion5:     mov    ax, 4c00h
              int    21h

multiplica proc near
              xor    dx, dx
              mov    ax, cantunor
              mov    bx, cantdosr
              mul    bx
              call   convascii
              mov    dx, offset resulta
              call   imprime
              mov    dx, offset resultar
              call   imprime
              ret
multiplica endp

divide proc near
              mov    ax, cantunor
              mov    bx, cantdosr
              cmp    bx, 0
              jnz    divide01
              mov    cantidad, 3
              call   huboerror
              ret
divide01:     div    bx
              xor    dx, dx
              call   convascii
              mov    dx, offset resulta
              call   imprime
              mov    dx, offset resultar
              call   imprime
              ret
divide endp

suma proc near
              xor    dx, dx
              mov    ax, cantunor
              mov    bx, cantdosr
              add    ax, bx
              jnc    sumaconv
              adc    dx, 0
sumaconv:     call   convascii
              mov    dx, offset resulta
              call   imprime
              mov    dx, offset resultar
              call   imprime
              ret
suma endp

resta proc near
              xor    dx, dx
              mov    ax, cantunor
              mov    bx, cantdosr
              sub    ax, bx
              jnc    restaconv
              sbb    dx, 0
restaconv:    call   convascii
              mov    dx, offset resultar
              call   imprime
              ret
resta endp

imprime proc near
              mov    ah, 9
              int    21h
              ret
imprime endp

obtentecla proc near
              mov    ah, 0
              int    16h
              ret
obtentecla endp

convnum proc near
              mov    dx, 0ah
              cmp    cantidad, 0
              jnz    convnum01
              mov    di, offset cantunon + 1
              mov    cx, [di]
              mov    si, offset cantunon + 2
              jmp    convnum02

convnum01:    mov    di, offset cantdosn + 1
              mov    cx, [di]
              mov    si, offset cantdosn + 2
 
convnum02:    xor    ch, ch
              mov    di, offset potencia
              dec    si
              add    si, cx
              xor    bx, bx
              std
convnum03:    lodsb
              cmp    al, "0"
              jb     convnum04
              cmp    al, "9"
              ja     convnum04
              sub    al, 30h
              cbw
              mov    dx, [di]
              mul    dx
              jc     convnum05
              add    bx, ax
              jc     convnum05
              add    di, 2
              loop   convnum03
              jmp    convnum06
convnum04:    call   huboerror
              jmp    convnum06
convnum05:    mov    cantidad, 2
              call   huboerror
convnum06:    cld
              ret
convnum endp

convascii proc near
              push   dx
              push   ax
              mov    si, offset resultar
              mov    cx, 10
              mov    al, "."
convascii01:  mov    [si], al
              inc    si
              loop   convascii01
              pop    ax
              pop    dx
              mov    bx, ax
              mov    ax, dx
              mov    si, offset resultar
              add    si, 11
              mov    cx, 10
obtendigito:  dec    si
              xor    dx, dx
              div    cx
              mov    di, ax
              mov    ax, bx
              div    cx
              mov    bx, ax
              mov    ax, di
              add    dl, 30h
              mov    [si], dl
              or     ax, ax
              jnz    obtendigito
              or     bx, bx
              jnz    obtendigito
              ret
convascii endp

huboerror proc near
              cmp    cantidad, 0
              jnz    huboerror02
              mov    dx, offset error1
              call   imprime
              mov    errorcap, 1
              jmp    huboerror05
huboerror02:  cmp    cantidad, 1
              jnz    huboerror03
              mov    dx, offset error1
              call   imprime
              mov    errorcap, 1
              jmp    huboerror05
huboerror03:  cmp    cantidad, 2
              jnz    huboerror04
              mov    dx, offset error1
              call   imprime
              mov    errorcap, 1
              jmp    huboerror05
huboerror04:  mov    dx, offset error1
              call   imprime
              mov    errorcap, 1
huboerror05:  ret

huboerror endp

segc ends

.stack

end start





Gracias de antemano, cuando corro este codigo en un celerom me da error sera que tengo algo mal definido gracias, por todo.

 :D

SAJOSUE

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Ayuda De Expertos
« Respuesta #1 en: Miércoles 3 de Noviembre de 2004, 17:14 »
0
<span style='font-size:14pt;line-height:100%'>Disculpen talvez no me exprese como debia de haber sido, el codigo que publique si es de una calculadora pero para hacer las operciones se tiene que digitar la opcion, y pues lo que necesito que me ayuden es que pueda elegirlas con el puntero del mouse, si alguien fuera tan amable de ayudarme se le agradecer mucho pues la tengo que entregar gracias por todo.</span>

Super_G

  • Miembro MUY activo
  • ***
  • Mensajes: 375
    • Ver Perfil
Re: Ayuda De Expertos
« Respuesta #2 en: Viernes 17 de Diciembre de 2004, 15:46 »
0
Entoces te seria util el funcionamiento basico de un boton.
Pero antes debes saber como manejar el mouse.
por ejemplo en DOS el controlador de microsoft para el mouse se usa la int 33h
de las cuales las funcione mas basicas para que te seran utiles son la de inicio(0h) coordenadas de la posicion del puntero del mouse y el estado de los botones.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.