Programación General => ASM (Ensamblador) => Mensaje iniciado por: Malik en Viernes 26 de Diciembre de 2008, 20:30
Título: Procedimiento para mostrar cadena con interrupción MASM
Publicado por: Malik en Viernes 26 de Diciembre de 2008, 20:30
Hola, tengo este código:
Código: Text
dosseg
.model small
.stack 100h
.data
cadena db "Hola que tal$"
.code
muestra proc
lea dx, cadena
mov ah, 09h
int 21
iret
muestra 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:
Título: Re: Procedimiento para mostrar cadena con interrupción MASM
Publicado por: Eternal Idol en Sábado 27 de Diciembre de 2008, 13:46
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 ...
Título: Re: Procedimiento para mostrar cadena con interrupción MASM
Publicado por: Malik en Miércoles 31 de Diciembre de 2008, 14:35
Gracias Eternal Idol :good:
os pongo el código funcionando:
Código: Text
dosseg
.model small
.stack 100h
.data
cadena db "Hola que tal$"
.code
muestra proc
lea dx, cadena
mov ah, 09h
int 21h
iret
muestra 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 ...
Esto no lo entendí muy bien, podrías explicarmelo un poquillo más, que estoy bastante pez en el tema :ouch:
Un saludo :beer:
Título: Re: Procedimiento para mostrar cadena con interrupción MASM
Publicado por: Eternal Idol en Jueves 1 de Enero de 2009, 10:46
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.