Programación General > ASM (Ensamblador)

 Capturar Valores

(1/1)

RadicalEd:
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.

RadicalEd:
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 ---.MODEL SMALL.STACK.DATA    VAL1 DB 'DIGITE VALOR 1: $'    VAL2 DB 'DIGITE VALOR 2: $'.CODEinicio:    MOV AX, SEG VAL1    MOV DS, AX    MOV DX, OFFSET VAL1    &#59;Envia a DX el mensaje VAL1    MOV AH, 09h                  &#59;imprime mensaje VAL1 con la    INT 21h                         &#59;función 9h    MOV AH, 01h                  &#59;captura un valor del teclado    INT 21h                         &#59;y se guarda en AL    PUSH AX              &#59;meto el valor AX a la pila, que la que guarda el AL capturado    MOV AX, SEG VAL2    MOV DS, AX    MOV DX, OFFSET VAL2    &#59;Envia a DX el mensaje VAL2    MOV AH, 09h                  &#59;imprime mensaje VAL2 con la    INT 21h                         &#59;función 9h    MOV AH, 01h                  &#59;captura un valor del teclado    INT 21h                         &#59;y se guarda en AL    MOV BL, AL                    &#59;muevo el ultimo valor capturado en BL    POP AX                         &#59;saco el valor que meti a la pila    ADD BX, AX                  &#59;sumo BX con AX y lo guardo en BX    MOV AH, 4Ch                &#59;Salir al DOS    INT 21hEND inicio 

RadicalEd:
Voy aca y me deberia rular, pero ahora me saca este error.
***Fatal*** capt.asm(43) Unexpected end of file encountered

--- Código: Text ---.MODEL SMALL.STACK.DATA    VAL1 DB 'DIGITE VALOR 1: $'    VAL2 DB 13,10,'DIGITE VALOR 2: $'    MSG DB 13,10,'LA SUMA ES: $'    RESU DB 0.CODEinicio:    MOV AX, SEG VAL1    MOV DS, AX    MOV DX, OFFSET VAL1;Envia a DX el mensaje VAL1    CALL Print    CALL Capt    MOV RESU, AL    MOV AX, SEG VAL2    MOV DS, AX    MOV DX, OFFSET VAL2;Envia a DX el mensaje VAL1    CALL Print    CALL Capt    ADD RESU, AL    MOV AX, SEG MSG    MOV DS, AX    MOV DX, OFFSET MSG&#59;Envia a DX el mensaje MSG    MOV AH, 09h &#59;imprime mensaje con la    INT 21h &#59;función 9h    MOV AH, 02h    MOV DX ,AX    INT 21h      MOV AH, 4Ch    INT 21hPrint Proc Near    MOV AH, 09h &#59;imprime mensaje con la    INT 21h &#59;función 9h    SUB AL, 48        &#59;restamos al caracter el ASCII de 0 para convertirlo en un numero    RETPrint EndpCapt Proc Near    MOV AH, 01h &#59;captura un valor del teclado    INT 21h &#59;y se guarda en AL    RET    Capt EndpEND inicio 

RadicalEd:
El error era que habia guardado en formato Unicode, ahora esto es lo que sale.

RadicalEd:
Por fin.

--- Código: Text ---.MODEL SMALL.STACK.DATA    VAL1 DB 'DIGITE VALOR 1: $'    VAL2 DB 13,10,'DIGITE VALOR 2: $'    MSG DB 13,10,'LA SUMA ES: $'    RESU DB '0'    CAPT1BIN DB '0'    CAPT2BIN DB '0'.CODEinicio:&#59;CAPTURAR PRIMER VALOR    MOV AX, SEG VAL1    MOV DS, AX    MOV DX, OFFSET VAL1   &#59;Envia a DX el mensaje VAL1    CALL Print    CALL Capt    MOV CAPT1BIN, AL      &#59;Guarda en Binario    SUB CAPT1BIN, 48      &#59;Se restan 48 para dar valor ASCII &#59;CAPTURAR SEGUNDO VALOR    MOV AX, SEG VAL2    MOV DS, AX    MOV DX, OFFSET VAL2   &#59;Envia a DX el mensaje VAL1    CALL Print    CALL Capt    MOV CAPT2BIN, AL      &#59;Guarda en Binario    SUB CAPT2BIN, 48      &#59;Se restan 48 para dar valor ASCII &#59;SE EFECTUA LA SUMA    MOV BL, CAPT1BIN    ADD BL, CAPT2BIN    MOV RESU, BL &#59;SE IMPRIME MENSAJE DE RESULTADO    MOV AX, SEG MSG    MOV DS, AX    MOV DX, OFFSET MSG  &#59;Envia a DX el mensaje MSG    MOV AH, 09h         &#59;imprime mensaje con la    INT 21h             &#59;función 9h &#59;IMPRIMIR LOS RESULTADOS    MOV AH, 0  &#59;Se limpia el registro    MOV AL, RESU&#59;El dividendo en AX para impresion de digitos uno por uno    MOV BL, 10  &#59;Se le pone 10 al divisor BL    DIV BL  &#59;Se divide (al=numero/divisor=10 ) COCIENTE=AL RESIDUO=DX    MOV CL, AL  &#59;Guardamos el cociente en CL    MOV CH, AH  &#59;Guardamos el residuo en CH    ADD AL, 48  &#59;Sumamos 48d al numero para convertirlo en ascii    MOV AH, 2  &#59;Funcion del DOS para imprimir un caracter    MOV DL, AL  &#59;Imprimir el primer digito    INT 21h    ADD CH, 48  &#59;Sumamos 48d al numero para convertirlo en ascii    MOV DL, CH  &#59;Imprimimos el segundo caracter    INT 21h    MOV AH, 4Ch        &#59;Sale al DOS    INT 21h ;PROCEDIMIENTO PARA IMPRIMIR CADENAPrint Proc Near    MOV AH, 09h  &#59;imprime mensaje con la    INT 21h  &#59;función 9h    SUB AL, 48         &#59;restamos al caracter el ASCII de 0 para convertirlo en un numero    RETPrint Endp ;PROCEDIMIENTO DE CAPTURA Capt Proc Near    MOV AH, 01h  &#59;captura un valor del teclado    INT 21h  &#59;y se guarda en AL    RET    Capt EndpEND inicio 

Navegación

[0] Índice de Mensajes

Ir a la versión completa