PDA

View Full Version : مقیم کردن یک برنامه در حافظه



mamay
پنج شنبه 17 دی 1383, 19:01 عصر
با سلام
من می خواهم یک برنامه را در حافظه مقیم کنم بطوری که مثلا با هر بار فشردن یک کلید خاص کامپیوتر یک بیپ بزند.
من این برنامه را از یک کتاب نوشتم


cdsg segment para
assume cs:cdsg
org 100h

BEGIN : jmp b10init
saveint9 dd ?
duration dw 100h
a10test:
push ax
push cx
in al,60h
cmp al,01h
jne a50exit
in al,61h
push ax
or al,00000011b
out 61h,al
mov cx,512h
A20: loop A20
or al,00000010b
mov cx,512h
A30: loop A30
pop ax
and al,11111100b
out 61h,al
a50exit: pop cx
pop ax
jmp cs:saveint9
b10init:
cli
mov ah,35h
mov al,09h
int 21h
mov word ptr saveint9,bx

push bx
lea bx,saveint9
mov [bx+2],es
pop bx
mov ah,25h
mov al,09h
mov dx, offset a10test
int 21h
mov ah,31h
mov dx,offset b10init
sti
int 21h

cdsg ends
end BEGIN



اما وقتی آن را اجرا میکنم تنها کاری که میکند هنگ کردن کامپیوترم است
لطفا بگویید چه باید بکنم.
ضمنا یک سوال دیگر اینکه چگونه سیستم عامل از برنامه مقیم شونده تا پایان کامپیوتر حفاظت می کند؟

man_56
یک شنبه 20 دی 1383, 12:38 عصر
To make a TSR program, you have to assmble it to .COM extension first;
So use this method in your source code:

.MODEL SMALL
.CODE
org 100h
jmp b10init
...
assmble by MASM. I'm not sure about TASM nad others

ناصرقلی
پنج شنبه 01 بهمن 1383, 17:14 عصر
با سلام
مقیم شدن برنامه وابسته به com بودن آن نیست. مشکل برنامه شما تا جایی که من دیدم نیاز به pushf در ابتدا و popf در انتهاست است. (برای حفظ flag ها در روتین جایگزین اینتراپت 9 ) در ضمن در انتهای روتین جایگزین شده نیاز به یک iret وجود دارد.
البته شاید مشکلات دیگری هم داشته باشد ولی این یکی رو تقریبا مطمینم.

payam2payam
جمعه 30 اردیبهشت 1390, 09:41 صبح
سلام
کسی میدونه برای خارج کردن یه برنامه از حالت مقیم بودن چیکار باید کرد ؟

Younes
شنبه 31 اردیبهشت 1390, 12:31 عصر
سلام
به كتاب دكتر سيد رضي فصل مقيم كردن برنامه در حافظه اگر رجوع كني مشكلاتت رفع مي شود.