• Domingo 22 de Diciembre de 2024, 04:32

Autor Tema:  no se como hacerlo  (Leído 2295 veces)

Karin2009

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
no se como hacerlo
« en: Martes 10 de Marzo de 2009, 17:41 »
0
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

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: no se como hacerlo
« Respuesta #1 en: Martes 10 de Marzo de 2009, 18:01 »
0
¿Y que hiciste hasta ahora?

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: no se como hacerlo
« Respuesta #2 en: Miércoles 11 de Marzo de 2009, 16:05 »
0
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

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: no se como hacerlo
« Respuesta #3 en: Miércoles 11 de Marzo de 2009, 18:02 »
0
Hola, yo realmente necesito ayuda en esto
Código: ASM
  1.  
  2. ; Progama que solicita por pantalla 2 numeros enteros, los divide entre si y muestra el cociente y el resto
  3.  
  4. segment .data
  5.  
  6.     ; mensajes que se mostraran en pantalla para solicitar o mostrar datos
  7.  
  8.     mensaje1 db 'Ingresa dividendo : '
  9.     lon_mensaje1 equ $ - mensaje1
  10.  
  11.     mensaje2 db 'Ingresa divisor : '
  12.     lon_mensaje2 equ $ - mensaje2
  13.  
  14.     mensaje3 db 'El cociente es: '
  15.     lon_mensaje3 equ $ - mensaje3
  16.  
  17.     mensaje4 db 'y el resto es: '
  18.     lon_mensaje4 equ $ - mensaje4
  19.  
  20.     ; macro para convertir los caracteres a numeros enteros
  21.  
  22.     %define BASE 10
  23.  
  24. segment .bss
  25.  
  26.     ; datos ingresados por pantalla como cadena de caracteres
  27.  
  28.     dividendostr resb 10
  29.     lon_dividendo equ $ - dividendo
  30.  
  31.     divisorstr resb 10
  32.     lon_divisor equ $ - divisor 
  33.  
  34.     ; datos que mostrara por pantalla como cadena de caracteres
  35.  
  36.     cocientestr resb 10
  37.     lon_cociente equ $ - cociente
  38.  
  39.     restostr resb 10
  40.     lon_resto equ $ - resto
  41.  
  42.     ; datos en enteros, se reserva para cada uno de ellos el lugar para una doble palabra
  43.  
  44.     restonum resd 1
  45.    
  46.     dividendonum resd 1
  47.  
  48.     divisornum resd 1
  49.  
  50.     cocientenum resd 1
  51.  
  52. segment .text
  53.  
  54.     global _start
  55.  
  56.     _start
  57.  
  58.     ; solicita por pantalla el dividendo
  59.  
  60.     Mov eax, 4
  61.     Mov ebx, 1
  62.     Mov ecx, mensaje1
  63.     Mov edx, lon_mensaje1
  64.     Int 80h
  65.  
  66.     ; lee el dato ingresado y lo guarda en dividendostr
  67.  
  68.     Mov eax, 3
  69.     Mov ebx, 0
  70.     Mov ecx, dividendostr
  71.     Mov edx, 10
  72.     Int 80h
  73.  
  74.     ; solicita por pantalla el divisor
  75.  
  76.     Mov eax, 4
  77.     Mov ebx, 1
  78.     Mov ecx, mensaje2
  79.     Mov edx, lon_mensaje2
  80.     Int 80h
  81.  
  82.     ; lee el dato ingresado y lo guarda en divisorstr
  83.  
  84.     Mov eax, 3
  85.     Mov ebx, 0
  86.     Mov ecx, divisor
  87.     Mov edx, 10
  88.     Int 80h
  89.  
  90.     ; muestra por pantalla el cociente como cadena de caracteres
  91.  
  92.     Mov eax, 4
  93.     Mov ebx, 1
  94.     Mov ecx, mensaje3
  95.     Mov edx, lon_mensaje3
  96.     Int 80h
  97.  
  98.     Mov eax, 4
  99.     Mov ebx, 1
  100.     Mov ecx, cocientestr
  101.     Mov edx, lon_cociente
  102.     Int 80h
  103.  
  104.     ; muestra por pantalla el resto como cadena de caracteres
  105.  
  106.     Mov eax, 4
  107.     Mov ebx, 1
  108.     Mov ecx, mensaje4
  109.     Mov edx, lon_mensaje4
  110.     Int 80h
  111.  
  112.     Mov eax, 4
  113.     Mov ebx, 1
  114.     Mov ecx, restostr
  115.     Mov edx, lon_resto
  116.     Int 80h
  117.  
  118.     ; salida del programa
  119.  
  120.     Mov eax, 1
  121.     Mov ebx, 0
  122.     Int 80h
  123.  
  124.  


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

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: no se como hacerlo
« Respuesta #4 en: Miércoles 11 de Marzo de 2009, 18:23 »
0
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:

Toph

  • Moderador
  • ******
  • Mensajes: 420
  • Nacionalidad: sv
    • Ver Perfil
    • http://www.electronicayotros.blogspot.com/
Re: no se como hacerlo
« Respuesta #5 en: Jueves 12 de Marzo de 2009, 16:11 »
0
Cita de: "Karin2009"
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

Como los datos son introducidos por el teclado, estos estaran en ascii, lo que debes hacer es comparar cada byte de la cadena para ver si son datos validos debes revisar primero si el primer byte que introdujo el usuario es el equivalente al codigo ascii del simbolo menos ("-" que es 2Dh) si es asi sabras si es negativo, luego debes ver los demas y asegurarte que sean solo numeros (0 al 9 30h al 39h) y revisar el divisor que no sea cero (30h).
Por favor leer esto antes de postear. Gracias
NO alimenten al TROLL y morirá
¿Querés ayudar?, pues doná comida gratis con un simple clic aqui ,sin trucos
photobucket , Google , wine y cutepdf Rock!!!


programacion,c,c++,
Microcontroladores,java,linux,videojuegos,
,.NET,asm,codigo
por favor este 2012 que sea