Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: danielo- en 11 Octubre 2010, 01:18 am



Título: Ayuda con este ejercicio
Publicado por: danielo- en 11 Octubre 2010, 01:18 am
Hola a todos, ya habia querido antes iniciarme en ensamblador, y esta vez me toca a a la fuerza aprender, pues llevo esta materia :s jaja.. como sea, nos han marcado de tarea un pequeño programa que lea del teclado 4 numeros del 1 al 15 y meterlos en una pila, pero en forma de hexadecimal, es decir que yo pueda ingresar 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f y lo unico que tiene que hacer el programa es devolverme el valor real, es decir, si meto a que me devuelva 10, b->11, c->12 y asi sucesivamente.

Se que debería ser sencillo, pero esque no se nada de ensamblador :(, hasta ahorita llevo la entrada y el almacenaje en pila, planeaba que al momento de hacer el pop hiciera la conversion, pero no e podido !  :( :( :( a ver si agluien me ayuda, hasta aorita esto es lo que tengo:

Código
  1. pila segment stack "STACK"
  2. dw 4 DUP(0)
  3. pila ends
  4.  
  5. data segment
  6. data ends
  7.  
  8. code segment
  9.  
  10. assume cs:code,ds:data,ss:pila
  11. inicio:
  12. mov ax, data    ;un db es una palabra de 16 its
  13. mov ds, ax     ;//cargar el segmento de codigo en memoria
  14.  
  15. MOV     AH,01h ;Le meto 1 a ah para que meta en al
  16. INT     21h ;Espera el teclado
  17. mov ah,0h ;limpio ah
  18. push ax ;lo meto en la pila
  19.  
  20. MOV     AH,01h
  21. INT     21h
  22. mov ah,0h
  23. push ax
  24.  
  25. MOV     AH,01h
  26. INT     21h
  27. mov ah,0h
  28. push ax
  29.  
  30. MOV     AH,01h
  31. INT     21h
  32. mov ah,0h
  33. push ax
  34.  
  35. ;lo hice 4 veces, y ahora a hacer el pop
  36. ;POP
  37. pop ax                 ;Y ya no se que mas hacer!
  38. cmp    ax,'a'          ; una comparacion talvez?
  39. jz salt                    ; asi se hace la comparacion?
  40.  
  41. salt proc near        ;pero que  pasa si no es una a?
  42. sub al,31h              ; como ponerle el else ???? (o algo asi)
  43. mov dl,al
  44. mov ah,02h
  45. int 21h
  46. salt endp
  47.  
  48. MOV AX, 4C00h  ;halt    dos dice que es la terminacion del programa
  49. INT 21h  ;;int rebisa lo que esta en 21h.
  50.                 ;es la interrupcion de pantalla con la funcion 4c que es la de hald
  51.  
  52.  
  53. code ends
  54. end inicio
  55. ; que perdido estoy,ayudenme :(
  56.  

EI: juntando mensajes.

Ninguna idea?
Ya estoy cerca de terminar, pero a ver si me resuelven esta duda,
yo realizo una comparacion con cmp, si es igual a la cadena, hago el salto a una etiqueta con el je y si no es igual salto hacia otra etiqueta con el jne, pero ahora, el problema esque como esta una etiqueta detras de otra, pues me hace el proceso seguido, ya se que estoy haciendo algo mal, pues no deberia suceder esto, pero esque no se como indicarle que despues de realizar la etiqueta vuelva a la linea de donde salto  :-\, intente hacerlo con call y proc, pero esque no me deja poner je call procedimiento :S ayuden a este novato porfa


Título: Re: Ayuda con este ejercicio
Publicado por: Иōҳ en 11 Octubre 2010, 17:47 pm
busca en google como hacer la conversion hexadecimal a decimal luego lo adaptas, no es muy dificil.

Y sobre el else

Código:
.IF
.ELSE
.ENDIF
?