Programación General > ASM (Ensamblador)
Procedimiento para mostrar cadena con interrupción MASM
(1/1)
Malik:
Hola, tengo este código:
--- Código: Text --- dosseg .model small .stack 100h .datacadena db "Hola que tal$" .codemuestra proc lea dx, cadena mov ah, 09h int 21 iretmuestra endp inicio: mov ax, @data mov ds, ax ;cargar vector interrupcion ;int 21h Función ah=25h al=tipo int ds:dx rutina int mov al, 52h mov dx, offset muestra mov bx, seg muestra mov ds, bx mov ah, 25h int 21h ;Ejecuta procedimiento int 52h ;devuelve el control al dos mov ah, 4ch int 21h end inicio
Esto debería de imprimir por pantalla mi cadena. Pero cuando llega a int52h, no entra al procedimiento y no sé cual es el fallo
Una ayudita please, que no veo que hago mal :brickwall:
Eternal Idol:
2 cosas mal al menos:
1. Linea 11, usas notacion decimal con lo cual esa es la interrupcion 15 en hex.
2. DS no apunta al segmento .data donde esta la cadena (DX es correcto pero DS no).
PD. Despues esta el tema de que tu codigo no es residente y no restauras el vector de interrupcion original ...
Malik:
Gracias Eternal Idol :good:
os pongo el código funcionando:
--- Código: Text --- dosseg .model small .stack 100h .datacadena db "Hola que tal$" .codemuestra proc lea dx, cadena mov ah, 09h int 21h iretmuestra endp inicio: mov ax, @data mov ds, ax ;cargar vector interrupcion ;int 21h Función ah=25h al=tipo int ds:dx rutina int push ds mov al, 52h mov dx, offset muestra mov bx, seg muestra mov ds, bx mov ah, 25h int 21h pop ds ;Ejecuta procedimiento int 52h ;devuelve el control al dos mov ah, 4ch int 21h end inicio
--- Cita de: "Eternal Idol" ---PD. Despues esta el tema de que tu codigo no es residente y no restauras el vector de interrupcion original ...
--- Fin de la cita ---
Esto no lo entendí muy bien, podrías explicarmelo un poquillo más, que estoy bastante pez en el tema :ouch:
Un saludo :beer:
Eternal Idol:
Una interrupcion la puede llamar cualquiera, por eso tu codigo tiene que residir en memoria (no ser descargado) y al ser descargado tiene que restaurar la interrupcion para que no se llame a un codigo que no existe mas en memoria.
http://en.wikipedia.org/wiki/Terminate_ ... y_Resident
Navegación
Ir a la versión completa