Programación General > ASM (Ensamblador)

 no se como hacerlo

(1/2) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa