Programación General => ASM (Ensamblador) => Mensaje iniciado por: Malik en Martes 20 de Enero de 2009, 19:05
Título: duda en int21h (función 02h)
Publicado por: Malik en Martes 20 de Enero de 2009, 19:05
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
.model small
.stack
.data
tabla1 db"hola mundo"
longitud equ($ - tabla1)
.code
Main:
movax, @data
movds,ax
moval,'o'
movcx, longitud
xorsi,si
jmp $ln3@main
$ln2@main:
deccx
$ln3@main:
cmpcx,0
je $ln4@main
cmp tabla1[si],al
jne no_igual
incdl
no_igual:
incsi
jmp $ln2@main
$ln4@main:
adddl,30h
movah,02
int21h
movah,4ch
int21h
end Main
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!!
Título: Re: duda en int21h (función 02h)
Publicado por: Eternal Idol en Martes 20 de Enero de 2009, 20:50
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
...
xor dl, dl
jmp $ln3@main
...
Título: Re: duda en int21h (función 02h)
Publicado por: Malik en Martes 20 de Enero de 2009, 20:55
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
...
xor dl, dl
jmp $ln3@main
...
Me cago en tooo lo que se menea jajaja. Muchas gracias por la ayuda tio ;)
Título: Re: duda en int21h (función 02h)
Publicado por: Eternal Idol en Martes 20 de Enero de 2009, 22:18