الوضع الحقيقي، المقاطعة ناقلات استبدال التحطيم
-
20-08-2019 - |
سؤال
وأنا أحاول لمعرفة المزيد حول كيفية أنظمة العمل حقا تحت كل الرسومات جميلة على القمة. لذلك أنا يلعب حاليا مع الذاكرة في 512bytes أن يحمل BIOS عند بدء التشغيل، لا يمكن أن تدعو حقا على محمل في الوقت الحالي أعتقد. على أي حال، أنا استبدال متجه المقاطعة ولكن وجود مشاكل معها. بعد استبدال 09h يقطع (لوحة المفاتيح) أنه يعمل بشكل صحيح، عند الضغط على المفتاح "ذاكرة العبث" وأنتج. ولكن بعد ذلك لا شيء. كل بضغطة بعد ذلك لا يفعل شيئا. أنا لا أعرف إذا كان النظام تحطمها أو إذا أنا في عداد المفقودين شيء من وجهة نظري معالج، وهنا رمز:
jmp start
times 100 db 0 ; Cleared space for stack
start:
xor ax, ax
mov ax, start
sub ax, 80
mov sp, ax
mov al, 0x09 ; Interupt number
mov bl, 4
mul bl
mov bx, ax
xor ax, ax
mov es, ax
mov [es:bx], word prints ; My interupt handler
add bx, 2
mov [es:bx], word 0x00
bloader:
jmp bloader
prints:
cli
push ax
push bx
push si
mov si, msg ; Message to print
mov bl, 0x07
mov bh, 0x00
printnb:
lodsb ; Grab byte from message
cmp al, 0 ; End of message
je printf
mov ah, 0x0E
int 0x10 ; Print byte
jmp printnb
printf:
mov al, 0x20
out 0x20, al ; Inform interupt controller interupt has been handled
pop si
pop bx
pop ax
sti
iret ; Interupt return
msg db "Memory messing",0
times 510 - ($ - $$) db 0
dw 0xAA55
المحلول
ولقد كانت فترة طويلة منذ أن عملت على التعامل مع المقاطعات لوحة المفاتيح، ولكن أعتقد أن ما كنت في عداد المفقودين هو في الواقع التعامل مع الأجهزة لوحة المفاتيح لذلك سوف مسح حالة المقاطعة وتكون على استعداد لتوليد يقاطع آخر.
وشيء من هذا القبيل:
in al, 60h ; Read input buffer
قد يكون كل ما يتطلبه الأمر.
إذا أحصل على فرصة سوف نرى ما اذا كان لديك أي ملاحظات أو رمز القديمة حول الكذب من طريق العودة عندما كتبت السائقين لوحة المفاتيح.
نصائح أخرى
وتخميني (لقد كتبت أبدا معالج لوحة المفاتيح المقاطعة) هو أن تحتاج أيضا لاجراء محادثات مع الأجهزة لوحة المفاتيح، لاسترداد المفاتيح (وإلا فإن لوحة المفاتيح لا يعرف متى لتوليد مقاطعة القادمة).
ولقد وجدت مشكلة أخرى. إذا وضعنا متجه المقاطعة جديد لISR مع اثنين منفصلة التحرك تعليمات، فمن الممكن أن بين هذا حد سواء تعليمات وسائل التحقق مقاطعة يحدث ومن ثم الحصول على عنوان من ناقلات كسر مع جزء واحد من الموقع القديم و جزء آخر من الموقع الجديد للISR. ولكن على هذا الموقع ليس هناك ISR، أي تعليمات لEND من المقاطعة، وكذلك أي تعليمات IRET.
لمنع مثل هذه الأحداث السيئة لدينا لوضع المبادرة القطرية والأمراض المنقولة جنسيا حول هذه التعليمات خطوة لوضع متجه المقاطعة الجديدة.
cli
mov [es:bx], word prints ; My interupt handler
mov [es:bx+2], word 0x00
sti
وديرك
وهذه ليست سوى تخمين البرية، ولكن ربما المشكلة هي أنك تدعو 10H كثافة من معالج الباحث 9H. محاولة الكتابة إلى ذاكرة الشاشة مباشرة (فقط زيادة البايت في 0b800h: 0 وتحقق لأعلى الطابع اليسار على الشاشة). إذا كان يحصل على زيادة لكل بضغطة، ثم لا يجب استدعاء الباحث 10H من 9H كثافة العمليات.