Programación General > ASM (Ensamblador)
duda en int21h (función 02h)
(1/1)
Malik:
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 .datatabla1 db "hola mundo"longitud equ ($ - tabla1) .codeMain: mov ax, @data mov ds, ax mov al, 'o' mov cx, longitud xor si, si jmp $ln3@main $ln2@main: dec cx$ln3@main: cmp cx, 0 je $ln4@main cmp tabla1[si], al jne no_igual inc dlno_igual: inc si jmp $ln2@main$ln4@main: add dl, 30h mov ah, 02 int 21h mov ah, 4ch int 21hend 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!!
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, dljmp $ln3@main...
Malik:
--- 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, dljmp $ln3@main...
--- Fin de la cita ---
Me cago en tooo lo que se menea jajaja. Muchas gracias por la ayuda tio ;)
Eternal Idol:
De nadas B)
Navegación
Ir a la versión completa