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

[0] Índice de Mensajes

Ir a la versión completa