![]() |
|
(TSR) ןורכיז תנכוש תינכות - ילבמסא | |
![]() |
|
ישאר דומע | סינוקא ןד תאמ |
![]() |
!TASM רלייפמוקה רובע רלבמסא תינכות הנבמ ריבסמ הז ךירדמ אוה הדיקפת לכ רשא תינכות הניה (TSR - Terminate Stay Resident) ןורכיז תנכוש תינכות תרחא תינכותב קוסע CPU-ה ,רמולכ - סוקופב אל איה רשאכ םג םשמ לועפלו ןורכזב ראשיהל .הצרש .(לוק סיטרכ וא רבכע ןוגכ) םינושה םינקתהה ילהנמ םה TSR-ל רתויב תובוטה תואמגודה ונבתכ אלש תורמל רבכעה לע הטילש ונל שי ןיידעש םיאור ונא ,תמייוסמ תינכות םיליעפמ ונאשכ לכו "ןורכיז ןכוש" אוה רבכעה לש ןקתהה להנמש איה הביסה .וילא תסחייתמש תחא הרוש וליפא ,ןורכיז ןכוש היה אל ןקתהה להנמ םא .םאתהב לועפל ידכ ותוא "הציפקמ" רבכעה לש הנטק הזוזת תינכות לכ ומכ ןורכזהמ הנפתמ היה אוה ותניעט רחאלש םושמ רבכע ליעפהל םילוכי ונייה אל .תילנויצנבנוק לע תטלתשמ רשא TSR תנכות איה סוריו .ונלצא םיללותשמה םינושה םיסוריוה איה תפסונ אמגוד .תרחא תינכותב לופיטב קוסע אוה רשאכ (קרו) םג בשחמה .ןמיס תלבקמ אל איה רשא דע תלעופ אל איה .הלועפל התוא "ץיפקי" והשימש תבייח ןורכיז תנכוש תינכות שמתשמהש רחאל ,םייוסמ ןמז רחאל התוא ץיפקהל לכונ .הקיספ תועצמאב איה TSR ריעהל הדיחיה ךרדה .הקיספ י"ע שחרתמה עוריא לכ רחאל וא רבכעה תא זיזה .ןורכיז תנכוש תינכות םיבתוכ ונא ךיא דמלנ הז ךירדמב ןורכיז תנכוש תינכות הנבמ .EXE ינקת הצרה ץבוקל רשאמ רחא הנבמ ונשי הז ץבוקל .COM ץבוק איה ןורכיז תנכוש תינכות :הזכ אוה תינכותה הנבמ .model small .code org 100h begin : jmp start ; םינתשמ תרדגה start : ; תוקיספה רוטקוב הרודצורפ תבותכ "תליתש" mov dx,200h ; םיתבב תינכותה לדוג int 27h ; ןורכזב תינכותה תראשה a_proc proc ; TSR-ה לש תישארה הרודצורפה ףוג iret ; הקיספ תרגישמ הרזח boot endp end begin גוסמ תינכותש ינפמ small לדומב דימת טעמכ שמתשנ TSR תינכותב .תינכותה לדומ תא הרידגמ הנושארה הרושה .64K-מ תוחפ הליכמו הנטק כ"רדב איה הז םינותנה תרדגה לכ TSR תינכותב .לודגה יונישה אב ןאכו .דוקה טנמגס תא םיליחתמ רבכ ונא היינשה הרושב רחאל רשי תרדגומ איה - תינסחמל רשקב .דרפנ םינותנ טנמגס ונל ןיא הז גוסמ ץבוקב !דוקה טנמגסב תאצמנ םיבייח ונא ךכ םשל .הילע ריהצהל ילבמ יטמוטוא ןפואבו תינכותה רחאל דימ - רמולכ .תינכותה לש ןורחאה תיבה .הירחא תינסחמה תא תוצקהל ןכיה עדי רדהמהש ידכב תינכותה לש הלדוג והמ ךשמהב ריהצהל הרושה org 100h .PSP ארקנ הז עדימ .ץבוקל יטנוולרה עדימה לכ תא ולש םינושארה םיתבה 256-ב ליכמ הצרה ץבוק לכ תרצונ הלבטה ,COM ץבוקב .דימתל םש תראשנ איהו ץבוקה תריצי תעב תרצונ הלבטה ,EXE ליגר הצרה ץבוקב .םשל סנכיהל הדיתעה הלבטל "םירומש" תומוקמ 256 תינכותה תליחתב רומשל ךרטצנ ,ןכל !תינכותה תצרה ידכ ךות .ולאה םייונפה תומוקמה תא "תרמוש" וז הדוקפ .(ינורשע 256 עודיכ םה 100h) תרדגה לכ תא םיפקוע ונא ,השעמל .start תיוותל רשי ונתוא הציפקמ (begin תיוותב) תינכותה לש הנושארה הדוקפה .(?דוקה טנמגסב םירדגומ םינותנהש םירכוז) תויותה יתש ןיב םירהצומה םינותנה .תינכותה תליחת םצעב איה start תיוותה תליתש י"ע תאז השענ ונא .ונלש תינכותה תא "ץיפקת" רשא הקיספה רפסמ תא םירידגמ ונא start תיותה רחאל טסיהה תאו טנמגסה תא סינכהל שיש ,ןבומכ .תוקיספה רוטקווב (הל וארקתש ךיא וא) a_proc הרודצורפה תבותכ י"ע לבקנ טסיהה תאו (CS רגואב אצמנ רשא) דוקה טנמגס ןבומכ אוה טנמגסה .ללוכה ןורכזב תאצמנ איה הב .תוקיספה רוטקווב תבותכה תא םילתוש ונא ךיא הארנ טעמ דוע .lea הדוקפה הרושה mov dx,200h .הרובע תינסחמה תא תוצקהל ןכיה עדייש ידכב ונלש תינכותה לדוג תא רדהמל תתל םיבייח ונאש ונרמא לולכיש יתורירש ךרע םש םושרנ ,ןכל .תינכותה לדוג תא קיודמב תעדל לכונ אל ,תינכותה תביתכ בלשב ,תעכ הזה לדוגה תא .רדוהמה ץבוקה לדוג והמ קודבנ ,תינכותה רודיה רחאל .שורדהמ רתוי לודג םיתב רפסמ תואדווב עונמל ידכ "םיפדוע" םיתב 50 תתל יוצר .תינכותה תא בוש רדהנ ןכמ רחאלו - ונמשרש יתורירשה ךרעב ףילחנ .ןוחטב רתיל 200 םושרנ ונא ,150 אוה ץבוקה לדוג םא ,רמולכ .תולקת ולא-יא הרושה int 27h :תודוקפה יתש תרזעב הלעפהה תכרעמל הטילשה תא םיריזחמ ונייה הליגר תינכותב .ץחמה תרוש יהוז mov ax,4c00h int 21h וז הדוקפ .הלעפהה תכרעמל הלוכ הטילשה תא ריזחהל לכונ אל ןכלו ןורכיזב ראשית תינכותהש הצרנ ,תעכ .ןורכיזב וזה תינכותה תא ריאשהל הלעפהה תכרעמל הרומ [ (-: הל וארקתש ךיא וא ] a_proc הרודצורפה הרושקה הקיספה תלעפה תעב הנעצובת רשא תודוקפה תא הליכמה הדיחיה איה םצעב .תינכותה בל איה וזה הרודצורפה ,םירדגומ םינתשמ וליא ,בשת תינכותה הקיספ וזיאב) TSR-ל תונכהב ונקסע הרודצורפה תרדגהל דע .תינכותל ."?הקיספ לעפות רשאכו םא הרקי המ"-ב קרו ךא תקסוע וז הרודצורפ .('וכו תינכותה לדוג המ תינסחמה ןמ תפלוש רשא) הקיספ תרודצורפ יהוז .הליגר הרודצורפ אל וזש םושמ iret םע רוזחנ הרודצורפה ףוסב .(IP-ו CS רגואל ףסונב םילגדה רגוא תא םג ךותב ונלש הקיספ "לותשל" הצרנ םא ךא .הקיספה יטביה לכ תא לולכל הרומא הרודצורפה רשאכ iret-ב שמתשנ ונא .תירוקמה הקיספה םע ךישמהל ידכב דבלב ret י"ע ריזחהל ךרטצנ - תמייק הקיספ :רבסה כ"חאו TSR-ל אמגוד תינכות הנה .model small .code org 100h begin : jmp start counter dw 0 start : mov ax,0 mov es,ax mov si,1ch*4 mov di,0a0h*4 lea ax,boot mov es:[si],ax mov es:[si+2],cs mov ax,0 mov es:[di],ax mov ax,0ffffh mov es:[di+2],ax mov dx,200h int 27h boot proc push ax push bx push es inc cs:counter cmp cs:counter,20*18 ; 20 seconds (360 ints) jb sof int 0a0h ; cold BOOT sof : pop es pop bx pop ax iret boot endp end begin :תאז השוע איה ךיא רוקחל ליחתנ ןמזה תא רפוס םצעב הז הנתשמ .counter םשב דחא הנתשמ ונרדגה ,םינותנה תרדגה רוזיאב .בשחמה לוחתא תא עצבנ ,תוינש 20 ורבעש עגרב .תינכותה תלעפה עגרמ .תינכותה תלעפהמ רבעש ןמזה תא רפוס אוה ךיא הארנ טעמ דוע "שבלתנ" ונא ונלש תינכותב .תוקיספה רוטקוו ךותב תובותכ "לותשל" םיליחתמ ונא ,start-ה תיוות רחאל ,ולש תינכותב ןמז לש םיטנמלא דדומש תנכתמ לכ .הינשב םעפ 18 תלעפומ רשא 1ch תקיספ לע .וזה הקיספב שמתשמ mov ax,0 mov es,ax .(es) ףדועה טנמגסה רגואב שמתשהל ךרטצנ ,(0000 טנמגסב אצמנה) תוקיספה רוטקוול תשגל ידכב לבקל לוכי אל טנמגס רגוא) ax רגוא תרזעב (0000 טנמגס) 0 ךרעה תא ףדועה טנמגסה רגואל ןתינ .(רחא רגוא ךרד קר אלא רישי ךרע mov si,1ch*4 mov di,0a0h*4 םוקמל תשגל ידכ ,ןכל .(טסיהל םיינשו טנמגסל םיינש) תוקיספה רוטקווב םיתב 4 תספות הקיספ לכ רגואב האצותה תא סינכנ .4-ב הזה רפסמה תא לופכל ךרטצנ ,םוקמ 1ch הקיספ תספות וב קייודמה .(si הזה הרקמב) עיבצמ רגואב האצותה תא סינכנ םעפה .(0a0h ונלש הרקמב) היונפה הקיספה יבגל םישוע ונא רבד ותוא .(di ונלש הרקמב) רחא עיבצמ lea ax,boot .'boot' תישארה הרודצורפה תבותכ תא ax רגואל םיסינכמ mov es:[si],ax mov es:[si+2],cs תטלחומה תבותכה תא ,(si רגואב אצמנ קייודמה המוקימ רשא) 1ch הקיספב לותשנ - תוקיספה רוטקווב (דוקה טנמגס - cs) הלש טנגסהו םינושארה םיתבה 2-ב סנכומ (ax) הלש טסיהה .'boot' תרודצורפ לש ליעפת (הינשב םעפ 18 עצבתתש) 1ch הקיספ לכש ,אוה םורגי הז רבדש המ .םיאבה םיתבה 2-ב סנכומ .'boot' הרודצורפה תא mov ax,0 mov es:[di],ax mov ax,0ffffh mov es:[di+2],ax תאזה הרודצורפה לע עיבצנ .0000 טסיהבו FFFF טנמגסב תאצמנ בשחמה תא תלחתאמה הרודצורפה תבותכ תא ונלתשש רחאל .(ןכותמ הקיר וישכע איהש) 0a0h רפסמ הקיספ םע תוקיספה רוטקווב ."int 0a0h" הדוקפל האירקה םע בשחמה לוחתא לעפוי ,תוקיספה רוטקווב לוחתאה תרודצורפ תקיספ לש קייודמה םוקמה לע עיבצמש) di םירגואה י"ע תעצובמ תוקיספה רוטקווב תבותכה תליתש .(םשל סינכהל שיש םיכרעה תא ליכמה ax רגואהו ,תוקיספה רוטקווב 0a0h 'boot' הרודצורפה תא הלענ ,הרודצורפה תלעפומש םעפ לכב .(1ch הקיספ י"ע) הינשב םעפ 18 תלעפומ וז הרודצורפ ילב הרודצורפהמ אצנ ,(360-מ ןטק counter ,רמולכ) תוינש 20 ורבע אל ןיידע םא .1-ב counter ךרע הדוקפה תא ליכמה הרודצורפה ףוגל סנכינ ,360-ל הווש counter לש וכרע רשאכ קר .רבד םוש עצבל .בשחמ לוחתא עצבמה int 0a0h ןיאש םושמ תאז .(לדחמה תרירב) ds-ל אלו (cs) טנמגסל סוחייב אוה counter הנתשמל תוסחייתהה לכ .דוקה טנמגסב םיאצמנ םינותנה לכו דרפנ םינותנ טנמגס ונל .הרודצורפה ףוגב שמתשנ םהב םירגואה לכ תא תינסחמל םיפחוד ונא הרודצורפל הסינכבש בל םיש .תויופצ יתלב תולקתל המירגו םירחא םיכרע םע הרודצורפהמ הרזח עונמל ידכ תאז םישוע .םיירוקמה םיכרעה תא הרזחב םיפלוש ונא הרודצורפהמ האיציבש ןבומכ :(boot.asm :ץבוק םש) תואבה תולועפה תא עצבנ ,COM ץבוקל רודיה עצבל םיצור ונא רשאכ C:\> tasm boot.asm C:\> tlink/t boot.asm .EXE ץבוק םוקמב COM ץבוק תרצוי "/t" תורשפאה |