أريد الدخول الى مناطق معينة فى كارت الشاشة
المنطق المخزن بها أشكال الحروف
بالأضافة الى كيفية عمل SWAP للـRGB PINS فى كارت الشاشة
سؤال أخر كيف يمكنني تغيير قيم العناوين فى الـINTERRUPT VECTOR TABLE
لانني أريد عمل محاكي للطابعة
أريد الدخول الى مناطق معينة فى كارت الشاشة
المنطق المخزن بها أشكال الحروف
بالأضافة الى كيفية عمل SWAP للـRGB PINS فى كارت الشاشة
سؤال أخر كيف يمكنني تغيير قيم العناوين فى الـINTERRUPT VECTOR TABLE
لانني أريد عمل محاكي للطابعة
السلام عليكم,
هل تريد عمل هذا وأنت تحت نضاو الدوس أو الوندوز.ففي هذا الأخير تكون الأمور صعبة ويلزمك تعلم أشياءا أخرى عتى تتمكن من برمجة الأدوات مباشرة مثل برمجة VXD أو مثيلاته.
في الدوس فعنوان القيديو يكون في b000 هذا OFFSET ولكن لست متيقنا فأنا ليست لدي ذاكرة الأرقام وبما أنني في سفر فلا يمكنني أن أراجع ملفاتي وعلى العموم يمكن أن تثر على العنوان ببحث صغير وإذا لم تفلح يمكنني أن أعطيه هنا ابتداءا من الأسبوع المقبل.
لتغيير الـINTERRUPT VECTOR TABLE يجب أن نعرف أن هذه تكون في بداية الذاكرة في 0:0 وعنا أيضا يجب التأكيد من الأرقام وتبدأ ب Interrut الأولى وكل واحدة تأخذ 4 بايت وهكذا تكون العملية سهلة الأولى تكون في 0 الثانية في 4 التي تأتيها في 8 إلى آخره والأربع بايت 2 يحنويان على السكمنت و 2 الأخرى على offset .
إلى اللقاء.
السلام عليكم,
لتغيير مجرى Interruptions يمكن تغييرها في مواقعها في الداكرة إلا أن هدا لا ينصح به ولكن يمكنك فعل دلك إدا كان ولا بد أن تفعل دلك.وهناك function 35h ل interrupt 21h تعطينا عنوان الدالة التي تتكلف ب الإنتربت التي نريدها .ونستدعيها كالتالي :
mov ah,35h هنا نعطي رقم الدالة 35h
mov al,Number of the interrupt نضع في al رقم الإنتربت التي نريدها
int 21h نستدعي الإنتربت 21
وعند رجوعها سيكون عندنا في ES سكمنت الدالة وفي BX أوفسيت الدالة المكلفة بالإنتربت المطلوبة.
وهناك أيضا الدالة رقم 25h وهي تقوم بتغيير دالة الإنتربت التي نريدها ونستدعيها كما يلي :
mov ah,25h نضع رقم الدالة
mov al, number of the interrupt we want
DS:DX نعطي هنا السكمنت والاوفسيت لدالتنا التي ستعوض الإنتربت
والطريقة في غالب الأحيان تكون كما يلي :
نستدعي الدالة 35 لتعطينا عنوان الدالة الحقيقية ونسجل هدا العنوان في مكان ما بعد هدا نستدعي الدالة 25 لنضع دالتنا الجديدة وبعد هدا وحين ننتهي من شغلنا وقبل أن نغادر البرنامج نضع الدالة الحقيقية إلى مكانه ونغادر هده الشغل الأخير سيكون طبعا إدا أردنا أن نترك الأشياء كما كانت في الأول وإدا كنا نريد أن نستخدم دالتنا فلا نقوم بالعمل الأخير.
وكما يمكن أن نقوم بوضع دالتنا على نمثال برنامج TSR ليصبح مستقرا في الداكرة وتقوم كل البرامج باستدعائه إدا ما دعت الإنتربت التي غيرناها.
وفي الكود التالي مثال يغير الإنتربت رقم 5 وحين نستدعي هده الإنتربت ستستدعي دالتنا وهده الأخيرة ستقوم فقط بكتابة رسالة على الشاشة تبين لنا أنها فعلا أخدت الأمور.
هدا كتبته بعجالة ولم أتيقن إن كانت هناك أخطاء أم لا على العموم هده توضح الطريقة المستعملة :
.MODEL SMALL .CODE TheSeg dw 0 ;The original segment TheOff dw 0 ;The original offset NewInt: jmp Deb Msg db "You Have Called Int 5 ,Here is the new one ",10,13,"$" Deb: ;int 3 mov ax,seg Msg mov ds,ax mov dx,offset Msg mov ah,9 int 21h iret start: push cs ; push the code segment pop ds ; set the ds the same as cs ; int 3 mov ah,35h mov al,5;Number of the interruption int 21h mov word ptr [TheSeg],es mov word ptr [TheOff],bx mov ax,seg NewInt mov ds,ax mov dx,offset NewInt mov ah,25h mov al,5;Number of the interruption int 21h int 5 ;We call the interrupt ;**********Wait to press a key on the ;keybooard******************************** mov ah,7 int 21h ;***** Restore The value of the original interruption *** mov ax,word ptr [TheSeg] mov ds,ax mov dx,word ptr [TheOff] mov ah,25h mov al,5;Number of the interruption int 21h ;************ Terminate the prog ********************** MOV AX,4C00H INT 21h end start
إلى اللقاء.
السلام عليكم,
لم أجرب من قبل ما تكلمت عنه حول كارت الشاشة. وقد قمت في يوم ما بتجربة برمجة شيء من هدا القبيل ووضعت الرسائل بالعربية على شكل صور وبهدا تسهل الأمور لأنه يجب فقط هنا اضهار الصورة.
أتمنى لك التوفيق وإلى اللقاء.
هذا الموضوع مغلق.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…