• Domingo 22 de Diciembre de 2024, 03:53

Autor Tema:  duda en int21h (función 02h)  (Leído 2073 veces)

Malik

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
duda en int21h (función 02h)
« en: Martes 20 de Enero de 2009, 19:05 »
0
Llevo toda la tarde con lo mismo y me estoy volviendo loco. No tengo ni idea que puedo estar haciendo mal o que no entiendo. Os pongo el programa:

Código: ASM
  1.  
  2. .model small
  3.     .stack
  4.     .data
  5. tabla1  db  "hola mundo"
  6. longitud    equ ($ - tabla1)
  7.     .code
  8. Main:
  9.     mov ax, @data
  10.     mov ds, ax
  11.    
  12.     mov al, 'o'
  13.     mov cx, longitud
  14.     xor si, si
  15.    
  16.     jmp $ln3@main
  17.    
  18. $ln2@main:
  19.     dec cx
  20. $ln3@main:
  21.     cmp cx, 0
  22.     je $ln4@main
  23.     cmp tabla1[si], al
  24.     jne no_igual
  25.     inc dl
  26. no_igual:
  27.     inc si
  28.     jmp $ln2@main
  29. $ln4@main:
  30.    
  31.     add dl, 30h
  32.     mov ah, 02
  33.     int 21h
  34.    
  35.     mov ah, 4ch
  36.     int 21h
  37. end Main
  38.  
  39.  

Como podéis ver, eso cuenta el número de "o" que tiene la cadena hola mundo, y lo almacena en dl. Luego, le sumo 30h para, mediante la interrupción 21h y función 02, imprimir en pantalla el carácter, que representa el número de caracteres encontrados.

Pero cuando lo ejecuto me suelta por pantalla una O. Pero si lo depuro paso a paso, cuando salgo del depurado si me ha imprimido un 2. Por que pasa esto?  :brickwall:

Si tengo que dl es 2, 2 + 30h = 32h. Que corresponde al carácter 2, porque me imprime ese O.

Una ayudita que me sale humo por las orejas xD

thanks!!

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: duda en int21h (función 02h)
« Respuesta #1 en: Martes 20 de Enero de 2009, 20:50 »
0
Desde el depurador funciona de casualidad ya que este inicializa los registros a cero cosa que vos no haces con dl por lo tanto estas incrementando un valor indeterminado:

Código: Text
  1.  
  2. ...
  3. xor dl, dl
  4. jmp $ln3@main
  5. ...
  6.  

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.

Malik

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: duda en int21h (función 02h)
« Respuesta #2 en: Martes 20 de Enero de 2009, 20:55 »
0
Cita de: "Eternal Idol"
Desde el depurador funciona de casualidad ya que este inicializa los registros a cero cosa que vos no haces con dl por lo tanto estas incrementando un valor indeterminado:

Código: Text
  1.  
  2. ...
  3. xor dl, dl
  4. jmp $ln3@main
  5. ...
  6.  


Me cago en tooo lo que se menea jajaja. Muchas gracias por la ayuda tio ;)

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: duda en int21h (función 02h)
« Respuesta #3 en: Martes 20 de Enero de 2009, 22:18 »
0
De nadas  B)

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.