Programación General > ASM (Ensamblador)
Lectura De Un Numero
Enko:
Ahora que tenía un par de dias libres, decidi probar algunas cosas de assembly, estoy usando fasm para DOS.
Lo que quiero hacer, es basicamente leer un numero por teclado y almacenarlo en alguna variable y mostrarlo luego en la pantalla.
El problema mio consiste en que logro leer un vector de numeros.... pero no logro convertirlo a un numero.
Lo que tendria que hacer es algo asi (pseudocodigo):
--- Código: Text --- for(i=0; i<=Length(Numeros); i++){ Resultado += Numeros[i] * Potencia(10, i);}
Este es el codigo, la parte problematica est'a resltada con mayusculas
trate de recortarlo lo mejor que pude (tendria que ser una calculadora con opciones, solo dejé la de sumar, de ahí comienza)
--- Código: Text --- format MZentry codseg : start segment codsegstart: push dataseg pop ds sumar: mov [result], 0 mov dx, input_text mov ah, 9 int 21h xor si, si mov bx, numberingreso:;se pide el ingreso del caracter mov ah, 08h int 21h;verifico si el ingreso es un numero cmp al, 13 je seg_suma;es menor que 0 cmp al, 30h jl ingreso;es mayor que 9 cmp al, 39h jg ingreso;el numero es valido se guarda y se imprime mov ah, 02h mov dl, al int 21h mov [bx + si], al inc siloop ingreso seg_suma:;write line mov dx, write_line mov ah, 9 int 21h;write the number mov [bx+ si], byte '$' mov dx, number mov ah, 9 int 21h ;save the number;**************************************************************;ESTA ES LA PARTE QUE NO SE COMO HACER;ES DECIR, QUIERO CONVERTIR LA CADENA EJ> '6','5',2' EN EL NUMERO 652 ;ACA TERMINA SUPUESTAMENTE LA PARTE PROBLEMATICA;************************************************************* segment dataseg pause_text db 'Adios, presione una tecla....$' input_text db 'Ingrese numero: $' write_line db 13,10,'$' number db 0,0,0,0,0,0,0,0,0,'$' result dd 0
PD: Por sierto, FASM tiene procedimientos? trate de poner la palabra proc, pero no hubo caso :(:S
Enko:
Por sierto, conocen algun ejemplo para usar la consola de windows, lo que necesito es solo el Read, ReadLine, Write, WriteLine.... es que odio DOS.
Busque en internet pero no hubo caso,.... :(
Eternal Idol:
Mira que el pseudocodigo no funciona tampoco eh, tenes que empezar a obtener los numeros de atras para adelante (el ultimo es la unidad y tiene que ser potenciada por cero asi termina siendo multiplicada por uno) y restarles el valor en ASCII de 0.
La verdad es que no me acuerdo de haber usado proc (tampoco lo suelo usar en MASM) con FASM, capaz aca encontras algo: http://flatassembler.net/docs.php
En cuanto a la consola de Windows: http://msdn.microsoft.com
Primero usas GetStdHandle para obtener un HANDLE a la consola y despues usas ese HANDLE con las funciones de I/O.
Enko:
--- Citar ---Mira que el pseudocodigo no funciona tampoco eh, tenes que empezar a obtener los numeros de atras para adelante (el ultimo es la unidad y tiene que ser potenciada por cero asi termina siendo multiplicada por uno) y restarles el valor en ASCII de 0.
--- Fin de la cita ---
Si me di cuenta en la noche cuando fui a dormir :-$
Por sierto, no usas proc? ¿Se arregla toda la cosa con saltos?
Gracias por lo links, el de la pagina de Fasm ya lo había revisado, pero ahora me fijo lo de msnd.
Eternal Idol:
--- Cita de: "Enko" --- Por sierto, no usas proc? ¿Se arregla toda la cosa con saltos?
--- Fin de la cita ---
Una cosa es que no use PROC y otra que no use funciones. Basicamente lo que hago es meter por codigo lo que la directiva PROC del MASM mete "ocultamente". En MS-DOS se suelen pasar los parametros por registros y despues hacer el call y en Windows se usa la pila a placer.
Navegación
[#] Página Siguiente
Ir a la versión completa