Programación General > ASM (Ensamblador)
no se como hacerlo
Karin2009:
Hola, hace unos dias q empece a estudiar lenguaje ensamblador para una clase, estoy usando el nasm para IA-32, y me han pedido que convierta un numero ingresado por pantalla a entero, que lo lee como cadena de caracteres, pero se debe detectar si es negativo, o si tiene caracteres que no sean validos, y no tengo idea de como hacerlo. El numero debe ser de cualquier longitud. Agradeceria su ayuda
Eternal Idol:
¿Y que hiciste hasta ahora?
m0skit0:
Karin2009, te aconsejo que pongas lo que lleves hecho (o por lo menos una parte relevante) porque de lo contrario no vas a recibir ayuda.
Te puedo dar un par de pistas: código ASCII y BCD
Salud y ánimo, que nadie nace sabiendo :clown:
Karin2009:
Hola, yo realmente necesito ayuda en esto
--- Código: ASM --- ; Progama que solicita por pantalla 2 numeros enteros, los divide entre si y muestra el cociente y el resto segment .data ; mensajes que se mostraran en pantalla para solicitar o mostrar datos mensaje1 db 'Ingresa dividendo : ' lon_mensaje1 equ $ - mensaje1 mensaje2 db 'Ingresa divisor : ' lon_mensaje2 equ $ - mensaje2 mensaje3 db 'El cociente es: ' lon_mensaje3 equ $ - mensaje3 mensaje4 db 'y el resto es: ' lon_mensaje4 equ $ - mensaje4 ; macro para convertir los caracteres a numeros enteros %define BASE 10 segment .bss ; datos ingresados por pantalla como cadena de caracteres dividendostr resb 10 lon_dividendo equ $ - dividendo divisorstr resb 10 lon_divisor equ $ - divisor ; datos que mostrara por pantalla como cadena de caracteres cocientestr resb 10 lon_cociente equ $ - cociente restostr resb 10 lon_resto equ $ - resto ; datos en enteros, se reserva para cada uno de ellos el lugar para una doble palabra restonum resd 1 dividendonum resd 1 divisornum resd 1 cocientenum resd 1 segment .text global _start _start ; solicita por pantalla el dividendo Mov eax, 4 Mov ebx, 1 Mov ecx, mensaje1 Mov edx, lon_mensaje1 Int 80h ; lee el dato ingresado y lo guarda en dividendostr Mov eax, 3 Mov ebx, 0 Mov ecx, dividendostr Mov edx, 10 Int 80h ; solicita por pantalla el divisor Mov eax, 4 Mov ebx, 1 Mov ecx, mensaje2 Mov edx, lon_mensaje2 Int 80h ; lee el dato ingresado y lo guarda en divisorstr Mov eax, 3 Mov ebx, 0 Mov ecx, divisor Mov edx, 10 Int 80h ; muestra por pantalla el cociente como cadena de caracteres Mov eax, 4 Mov ebx, 1 Mov ecx, mensaje3 Mov edx, lon_mensaje3 Int 80h Mov eax, 4 Mov ebx, 1 Mov ecx, cocientestr Mov edx, lon_cociente Int 80h ; muestra por pantalla el resto como cadena de caracteres Mov eax, 4 Mov ebx, 1 Mov ecx, mensaje4 Mov edx, lon_mensaje4 Int 80h Mov eax, 4 Mov ebx, 1 Mov ecx, restostr Mov edx, lon_resto Int 80h ; salida del programa Mov eax, 1 Mov ebx, 0 Int 80h
entre medias me falta : si las cadenas contienen caracteres no validos o el divisor es 0, saltar a la salida del programa.
convertir las cadenas a numeros y dividirlas como enteros sin signo, para luego hacer un estudio de los signos para ver si el cociente es negativo o positivo. y los resultados pasarlos a cadenas para mostrarlos por pantalla.
Agradeceria su ayuda
m0skit0:
Lo que tratas de hacer es bastante sencillo, pero debes enfocarlo bien para no hacerte un lío. Te aconsejo que mires detenidamente los enlaces que te he dejado. Y recuerda que la mejor forma de aprender es haciéndolo uno mismo.
Salud y buen :hitcomp:
Navegación
[#] Página Siguiente
Ir a la versión completa