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 ;Envia a DX el mensaje VAL1 MOV AH, 09h ;imprime mensaje VAL1 con la INT 21h ;función 9h MOV AH, 01h ;captura un valor del teclado INT 21h ;y se guarda en AL PUSH AX ;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 ;Envia a DX el mensaje VAL2 MOV AH, 09h ;imprime mensaje VAL2 con la INT 21h ;función 9h MOV AH, 01h ;captura un valor del teclado INT 21h ;y se guarda en AL MOV BL, AL ;muevo el ultimo valor capturado en BL POP AX ;saco el valor que meti a la pila ADD BX, AX ;sumo BX con AX y lo guardo en BX MOV AH, 4Ch ;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;Envia a DX el mensaje MSG MOV AH, 09h ;imprime mensaje con la INT 21h ;función 9h MOV AH, 02h MOV DX ,AX INT 21h MOV AH, 4Ch INT 21hPrint Proc Near MOV AH, 09h ;imprime mensaje con la INT 21h ;función 9h SUB AL, 48 ;restamos al caracter el ASCII de 0 para convertirlo en un numero RETPrint EndpCapt Proc Near MOV AH, 01h ;captura un valor del teclado INT 21h ;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:;CAPTURAR PRIMER VALOR MOV AX, SEG VAL1 MOV DS, AX MOV DX, OFFSET VAL1 ;Envia a DX el mensaje VAL1 CALL Print CALL Capt MOV CAPT1BIN, AL ;Guarda en Binario SUB CAPT1BIN, 48 ;Se restan 48 para dar valor ASCII ;CAPTURAR SEGUNDO VALOR MOV AX, SEG VAL2 MOV DS, AX MOV DX, OFFSET VAL2 ;Envia a DX el mensaje VAL1 CALL Print CALL Capt MOV CAPT2BIN, AL ;Guarda en Binario SUB CAPT2BIN, 48 ;Se restan 48 para dar valor ASCII ;SE EFECTUA LA SUMA MOV BL, CAPT1BIN ADD BL, CAPT2BIN MOV RESU, BL ;SE IMPRIME MENSAJE DE RESULTADO MOV AX, SEG MSG MOV DS, AX MOV DX, OFFSET MSG ;Envia a DX el mensaje MSG MOV AH, 09h ;imprime mensaje con la INT 21h ;función 9h ;IMPRIMIR LOS RESULTADOS MOV AH, 0 ;Se limpia el registro MOV AL, RESU;El dividendo en AX para impresion de digitos uno por uno MOV BL, 10 ;Se le pone 10 al divisor BL DIV BL ;Se divide (al=numero/divisor=10 ) COCIENTE=AL RESIDUO=DX MOV CL, AL ;Guardamos el cociente en CL MOV CH, AH ;Guardamos el residuo en CH ADD AL, 48 ;Sumamos 48d al numero para convertirlo en ascii MOV AH, 2 ;Funcion del DOS para imprimir un caracter MOV DL, AL ;Imprimir el primer digito INT 21h ADD CH, 48 ;Sumamos 48d al numero para convertirlo en ascii MOV DL, CH ;Imprimimos el segundo caracter INT 21h MOV AH, 4Ch ;Sale al DOS INT 21h ;PROCEDIMIENTO PARA IMPRIMIR CADENAPrint Proc Near MOV AH, 09h ;imprime mensaje con la INT 21h ;función 9h SUB AL, 48 ;restamos al caracter el ASCII de 0 para convertirlo en un numero RETPrint Endp ;PROCEDIMIENTO DE CAPTURA Capt Proc Near MOV AH, 01h ;captura un valor del teclado INT 21h ;y se guarda en AL RET Capt EndpEND inicio
Navegación
Ir a la versión completa