Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: Riki_89D en 9 Octubre 2009, 20:52 pm



Título: Problema en ASM (IBM y compatibles)
Publicado por: Riki_89D en 9 Octubre 2009, 20:52 pm
Hola que tal estan?

Miren estoi leyendo un libro de ensamblador de 16 bits,para aprender un poco e introducimr en este "lenguaje",el caso es que e llegado a un apartado en donde se da la equivalencia de las instrucciones PUSH y POP,la de guardar valores en la pila i la de recuperarlos,pues me dan este codigo:

Push AX equivale a:

Código:
SUB SP,2
MOV [SP],AX


Creo que era asin,y la del POP me la pone aisn:
Código:
MOV AX,[SP]
ADD SP,2



Creo que era asin,el caso es que si yo ago el equivalente a push despues con la instruccion POP BX (o cualquier otro registro) por ejemplo POP BX en BX se debera agregar el valor que e guardado con el codigo primero no? por k sesupone que es equivalente a PUSH,y otra cosa yo compilo con el TASM y TLINK,i no me daj poner:
Código:
MOV AX,[SP]

pero si lo ago sin corchetes:
Código:

MOV AX,SP

entonces si que me deja,es lo mismo sin corchetes que con corchetes,creo que no no? por que no me deja con corchetes?



ayuda porfa :(


salu2




Título: Re: Problema en ASM (IBM y compatibles)
Publicado por: YST en 10 Octubre 2009, 21:36 pm
Mas rato me bajo el TASM y lo veo ;) Por mientras puedes usar esto
Código
  1. mov bp,sp
  2. mov ax,[bp]
  3.  


Título: Re: Problema en ASM (IBM y compatibles)
Publicado por: Riki_89D en 11 Octubre 2009, 17:38 pm
Hola yst,gracias por responer,si no me equivoco este codigo que me as pasado seria el equivalente a la instruccion POP no? corrigeme si me equivoco porfavor,lo e probado i no me da ingun error parece que funciona,pero me surge una duda que aún no se resolver,como puedo mostrar por pantalla el valor actual de un registro? igual que podemos mostrar caracteres direccionando el segmento de datos,pues como ago para poder mostrar valores de los registros por pantalla?


salu2


Título: Re: Problema en ASM (IBM y compatibles)
Publicado por: YST en 11 Octubre 2009, 18:29 pm
No , no es como el pop AX le faltaria agregar una suma de 2 a SP :P

Lo de mostrar el valor actual en pantalla te hace faltaria pasar de "integer" a "string" ;)


Título: Re: Problema en ASM (IBM y compatibles)
Publicado por: Riki_89D en 11 Octubre 2009, 18:39 pm
COMO CONVIERTO LOS TIPOS STRING A INTEGER?


es verdad me faltaria incrementar SP

saludos


Título: Re: Problema en ASM (IBM y compatibles)
Publicado por: YST en 11 Octubre 2009, 22:49 pm
COMO CONVIERTO LOS TIPOS STRING A INTEGER?


es verdad me faltaria incrementar SP

saludos

Para pasar el numero a ascii te tendrias que hacer una funcion que lo hiciera ;)

PD: Lo de interger a string es solo una manera de decirlo ya que en ASM no existen :P


EDIT :

El codigo quedaria algo a si
Código
  1. org 100h
  2.  
  3. mov dx,8
  4.  
  5. call WordToString
  6. mov ah,09
  7. mov dx,lb2
  8. int 21h
  9. int 20h
  10. ContarCantidad:
  11. mov di,ax
  12. mov si,0
  13. .bucle:
  14. xor dx,dx
  15. mov bx,10
  16. div bx
  17.  
  18. inc si
  19. cmp ax,0
  20. jne .bucle
  21. ;dec si
  22. ret
  23.  
  24.  
  25. ;Le pasas el word por DX ;)
  26. WordToString:
  27. cmp dx,10
  28. jle .UnoSolo
  29. push dx
  30. mov ax,dx
  31. call ContarCantidad
  32. pop dx
  33. mov cx,-1
  34. mov word[Cantidad],si
  35. sub [Cantidad],2
  36. .bucle:
  37. push dx
  38. dec si
  39. inc cx
  40.  
  41. mov bx,1
  42. mov dx,si
  43. .Elevar:
  44. dec dx
  45. imul bx,10
  46. cmp dx,0
  47. jne .Elevar
  48. pop dx
  49. push dx
  50. mov ax,dx
  51. xor dx,dx
  52. div bx
  53. pop dx
  54. mov di,lb2
  55. add di,cx
  56. mov byte[di],al
  57. add  byte[di],'0'
  58. imul ax,bx
  59. sub dx,ax
  60.  
  61.  
  62. cmp [Cantidad],cx
  63. jne .bucle
  64. add dl ,'0'
  65. mov di,lb2
  66. add di,cx
  67. mov byte[di+1],dl
  68. .salir:
  69. ret
  70. .UnoSolo:
  71. mov di,lb2
  72. add dl,'0'
  73. mov byte[di],dl
  74. jmp .salir
  75. Cantidad dw ?
  76. lb2 db 200 dup ('$')
  77.  
  78.