PDA

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



الیاس رضوی
شنبه 09 تیر 1386, 09:27 صبح
ممنون می شم اگه لطف کنید بگید چطور می شه یه برنامه اسمبلی رو در حافظه مقیم کرد:متفکر:

سپاسگذار

Delphi Skyline
شنبه 09 تیر 1386, 18:52 عصر
با استفاده از وقفه زیر :


mov AH,31h
mov DX,program_size
int 21H


دستور 2 : اندازه برنامه .
در بین مراجع این مطلب را از کتاب اسمبلی نوشته آقای جعفر نژاد قمی انتخاب کردم چون ساده ترین بود .
موفق باشید .

Alay102
یک شنبه 10 تیر 1386, 00:31 صبح
دوست عزیز برای مقیم کردن برنامه ها در حافظه ، ابتدا باید به جای استفاده از سرویس 4ch وقفه int 21h (برای خروج از برنامه) از سرویس 31h آن استفاده کنید ! به این صورت ...

MOV AH,31h
MOV DX,Prog-Size <- اندازه برنامه بر حسب پاراگراف (هر پاراگراف 12 بایت است)
INT 21h

سپس باید آدرس برنامه مقیم در حافظه را جایگذین آدرس یا بردار روتین وقفه سخت افزاری نمود ، تا هر موقع که وقفه مذکور فعال می شود به جای روتین وقفه ، برنامه مقیم در حافظه اجرا گردد !!

(برای آنکه وقفه سخت افزاری نیز دچار مشکل نشود ، باید آدرس وقفه را در محلی ذخیره کرد و پس از پایان دادن به برنامه به آن مراجعه کرد )

برای این کار از سرویسهای 35h و 25h وقفه INT 21h استفاده می شود ...

MOV AH,35h
MOV AL,08h <- شماره وقفه جایگذین برای بدست آوردن CS:IP روتین وقفه
INT 21h
(آدرس CS در ES قرار می گیرد و آدرس IP در BX قرار می گیرد !)

MOV AH,25h
MOV AL,08h
MOV DX,OFFSET <- آدرس روتین جدید وقفه (آدرس برنامه) را در این Register قرار می دهیم
INT 21h


موفق باشی ...

Younes
سه شنبه 12 تیر 1386, 12:26 عصر
ضمن تشکر از Alay102 باید عرض کنم تا جایی که من می دانم هر پاراگراف 16 بایت است نه 12 بایت

Alay102
چهارشنبه 13 تیر 1386, 01:18 صبح
باید عرض کنم تا جایی که من می دانم هر پاراگراف 16 بایت است نه 12 بایت
مرسی Younes جان ، حق با شماست هر پاراگراف 16 Byte من اشتباه تایپ کرده بودم !
پیش می یاد دیگه ...