• Lunes 23 de Diciembre de 2024, 08:36

Autor Tema:  Capturar Valores  (Leído 2089 veces)

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Capturar Valores
« en: Sábado 4 de Junio de 2005, 17:33 »
0
Hola chicos de SoloCodigo, quiero hacer un programita que me capture 2 valores y los sume o lo que sea, la cosa es que capture los valores, como el scanf de C (Como me dijo Jonathan :P ), osea:
printf("Digite un valor: ");
scanf("%d",valor);
Pero haciendolo en ASM.

Gracias Chao.
El pasado son solo recuerdos, el futuro son solo sueños

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Capturar Valores
« Respuesta #1 en: Sábado 11 de Junio de 2005, 19:22 »
0
Bueno esto es lo que llevo, pero no se si me captura o no los valores, ademas los quiero sumar, y he visto que el primer mensaje me sale delante del segundo, ademas no se como mostrar el resultado.
Código: Text
  1. .MODEL SMALL
  2. .STACK
  3. .DATA
  4.     VAL1 DB 'DIGITE VALOR 1: $'
  5.     VAL2 DB 'DIGITE VALOR 2: $'
  6. .CODE
  7. inicio:
  8.     MOV AX, SEG VAL1
  9.     MOV DS, AX
  10.     MOV DX, OFFSET VAL1    &#59;Envia a DX el mensaje VAL1
  11.     MOV AH, 09h                  &#59;imprime mensaje VAL1 con la
  12.     INT 21h                         &#59;función 9h
  13.     MOV AH, 01h                  &#59;captura un valor del teclado
  14.     INT 21h                         &#59;y se guarda en AL
  15.     PUSH AX              &#59;meto el valor AX a la pila, que la que guarda el AL capturado
  16.     MOV AX, SEG VAL2
  17.     MOV DS, AX
  18.     MOV DX, OFFSET VAL2    &#59;Envia a DX el mensaje VAL2
  19.     MOV AH, 09h                  &#59;imprime mensaje VAL2 con la
  20.     INT 21h                         &#59;función 9h
  21.     MOV AH, 01h                  &#59;captura un valor del teclado
  22.     INT 21h                         &#59;y se guarda en AL
  23.     MOV BL, AL                    &#59;muevo el ultimo valor capturado en BL
  24.     POP AX                         &#59;saco el valor que meti a la pila
  25.     ADD BX, AX                  &#59;sumo BX con AX y lo guardo en BX
  26.     MOV AH, 4Ch                &#59;Salir al DOS
  27.     INT 21h
  28. END inicio
  29.  
El pasado son solo recuerdos, el futuro son solo sueños

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Capturar Valores
« Respuesta #2 en: Domingo 12 de Junio de 2005, 01:18 »
0
Voy aca y me deberia rular, pero ahora me saca este error.
***Fatal*** capt.asm(43) Unexpected end of file encountered

Código: Text
  1. .MODEL SMALL
  2. .STACK
  3. .DATA
  4.     VAL1 DB 'DIGITE VALOR 1: $'
  5.     VAL2 DB 13,10,'DIGITE VALOR 2: $'
  6.     MSG DB 13,10,'LA SUMA ES: $'
  7.     RESU DB 0
  8. .CODE
  9. inicio:
  10.     MOV AX, SEG VAL1
  11.     MOV DS, AX
  12.     MOV DX, OFFSET VAL1;Envia a DX el mensaje VAL1
  13.     CALL Print
  14.     CALL Capt
  15.     MOV RESU, AL
  16.     MOV AX, SEG VAL2
  17.     MOV DS, AX
  18.     MOV DX, OFFSET VAL2;Envia a DX el mensaje VAL1
  19.     CALL Print
  20.     CALL Capt
  21.     ADD RESU, AL
  22.     MOV AX, SEG MSG
  23.     MOV DS, AX
  24.     MOV DX, OFFSET MSG&#59;Envia a DX el mensaje MSG
  25.     MOV AH, 09h &#59;imprime mensaje con la
  26.     INT 21h &#59;función 9h
  27.     MOV AH, 02h
  28.     MOV DX ,AX
  29.     INT 21h  
  30.     MOV AH, 4Ch
  31.     INT 21h
  32. Print Proc Near
  33.     MOV AH, 09h &#59;imprime mensaje con la
  34.     INT 21h &#59;función 9h
  35.     SUB AL, 48        &#59;restamos al caracter el ASCII de 0 para convertirlo en un numero
  36.     RET
  37. Print Endp
  38. Capt Proc Near
  39.     MOV AH, 01h &#59;captura un valor del teclado
  40.     INT 21h &#59;y se guarda en AL
  41.     RET    
  42. Capt Endp
  43. END inicio
  44.  
El pasado son solo recuerdos, el futuro son solo sueños

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Capturar Valores
« Respuesta #3 en: Lunes 13 de Junio de 2005, 19:41 »
0
El error era que habia guardado en formato Unicode, ahora esto es lo que sale.
El pasado son solo recuerdos, el futuro son solo sueños

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Capturar Valores
« Respuesta #4 en: Jueves 16 de Junio de 2005, 22:48 »
0
Por fin.
Código: Text
  1. .MODEL SMALL
  2. .STACK
  3. .DATA
  4.     VAL1 DB 'DIGITE VALOR 1: $'
  5.     VAL2 DB 13,10,'DIGITE VALOR 2: $'
  6.     MSG DB 13,10,'LA SUMA ES: $'
  7.     RESU DB '0'
  8.     CAPT1BIN DB '0'
  9.     CAPT2BIN DB '0'
  10. .CODE
  11. inicio:
  12. &#59;CAPTURAR PRIMER VALOR
  13.     MOV AX, SEG VAL1
  14.     MOV DS, AX
  15.     MOV DX, OFFSET VAL1   &#59;Envia a DX el mensaje VAL1
  16.     CALL Print
  17.     CALL Capt
  18.     MOV CAPT1BIN, AL      &#59;Guarda en Binario
  19.     SUB CAPT1BIN, 48      &#59;Se restan 48 para dar valor ASCII
  20.  
  21. &#59;CAPTURAR SEGUNDO VALOR
  22.     MOV AX, SEG VAL2
  23.     MOV DS, AX
  24.     MOV DX, OFFSET VAL2   &#59;Envia a DX el mensaje VAL1
  25.     CALL Print
  26.     CALL Capt
  27.     MOV CAPT2BIN, AL      &#59;Guarda en Binario
  28.     SUB CAPT2BIN, 48      &#59;Se restan 48 para dar valor ASCII
  29.  
  30. &#59;SE EFECTUA LA SUMA
  31.     MOV BL, CAPT1BIN
  32.     ADD BL, CAPT2BIN
  33.     MOV RESU, BL
  34.  
  35. &#59;SE IMPRIME MENSAJE DE RESULTADO
  36.     MOV AX, SEG MSG
  37.     MOV DS, AX
  38.     MOV DX, OFFSET MSG  &#59;Envia a DX el mensaje MSG
  39.     MOV AH, 09h         &#59;imprime mensaje con la
  40.     INT 21h             &#59;función 9h
  41.  
  42. &#59;IMPRIMIR LOS RESULTADOS
  43.     MOV AH, 0  &#59;Se limpia el registro
  44.     MOV AL, RESU&#59;El dividendo en AX para impresion de digitos uno por uno
  45.     MOV BL, 10  &#59;Se le pone 10 al divisor BL
  46.     DIV BL  &#59;Se divide (al=numero/divisor=10 ) COCIENTE=AL RESIDUO=DX
  47.     MOV CL, AL  &#59;Guardamos el cociente en CL
  48.     MOV CH, AH  &#59;Guardamos el residuo en CH
  49.     ADD AL, 48  &#59;Sumamos 48d al numero para convertirlo en ascii
  50.     MOV AH, 2  &#59;Funcion del DOS para imprimir un caracter
  51.     MOV DL, AL  &#59;Imprimir el primer digito
  52.     INT 21h
  53.     ADD CH, 48  &#59;Sumamos 48d al numero para convertirlo en ascii
  54.     MOV DL, CH  &#59;Imprimimos el segundo caracter
  55.     INT 21h
  56.     MOV AH, 4Ch        &#59;Sale al DOS
  57.     INT 21h
  58.  
  59. ;PROCEDIMIENTO PARA IMPRIMIR CADENA
  60. Print Proc Near
  61.     MOV AH, 09h  &#59;imprime mensaje con la
  62.     INT 21h  &#59;función 9h
  63.     SUB AL, 48         &#59;restamos al caracter el ASCII de 0 para convertirlo en un numero
  64.     RET
  65. Print Endp
  66.  
  67. ;PROCEDIMIENTO DE CAPTURA
  68. Capt Proc Near
  69.     MOV AH, 01h  &#59;captura un valor del teclado
  70.     INT 21h  &#59;y se guarda en AL
  71.     RET    
  72. Capt Endp
  73. END inicio
  74.  
El pasado son solo recuerdos, el futuro son solo sueños