Download Program (14 Byte)    
Download Complete Document

پاک کردن اطلاعات حافظه CMOS

در کامپيوترهايXT باتوجه به تعداد محدود پارامترها، پيکربندي سيستم بااستفاده از ميکروسوئيچ امکان پذير مي باشد اما در سيستم هاي AT به دليل بالا بودن تعداد پارامترهاي قابل برنامه ريزي توسط استفاده کننده ، حضور يک منبع که هم به راحتي در دسترس باشد و هم جاي کمي اشغال نمايد ، ضروري به نظر مي رسد. اين منبع در کامپيوترهاي AT حافظه CMOS ناميده مي شود .

حافظه CMOS داراي 64 بايت و يا بيشتر ظرفيت مي باشد که توسط دو پورت H70 و H71 قابل دسترسي مي باشد. و از آن براي نگهداري ساعت ، تاريخ و پيکربندي سيستم استفاده مي شود. همچنين تعدادي از بيت هاي اين حافظه براي چک کردن پيکربندي سيستم تحت عنوان CHECKSUM استفاده مي شود.

محتويات اين حافظه در زمان خاموش بودن سيستم توسط يک باطري پشتيبان 6/3 ولتي نگهداري مي شود. اين باطري ممکن است در داخل و يا در خارج از مادربورد قرار داشته باشد . البته در بعضي از سيستمها مجموعه باطري و حافظه به صورت يکپارچه ارائه شده که نمونه آن مارک DALLAS مي باشد.

از نظر عملکرد و نحوه دستيابي هيچ تفاوتي بين  انواع متفاوت CMOS وجود ندارد و همگي با استفاده از دو پورت يادشده قابل دسترسي و برنامه ريزي مي باشند.

تغيير در محتويات CMOS بطور معمول از طريق برنامه SETUP امکان پذير است اما در صورتي که در ست آپ سيستم رمز تعريف شده باشد و رمز مربوطه را هم در اختيار نداشته باشيد در اينصورت امکان ورود به برنامه ست آپ و تغيير در پيکر بندي سيستم ( اطلاعات CMOS ) امکان پذير نخواهد بود . در اين موارد راهي جز پاک کردن محتويات CMOS نداريم . دراين مواقع در احتمال وجود دارد .

1)          براي وارد شدن به سيستم رمز تعريف شده باشد.

2)          براي وارد شدن به ست آپ رمز تعريف شده باشد.

در حالت اول با توجه به بوت نشدن کامپيوتر کاري از نرم افزارها ساخته نيست  و بايد اقدام به پاک کردن محتويات CMOS به صورت سخت افزاري نمود .

اين کار معمولا با برداشتن باطري پشتيبان ست آپ  براي چند دقيقه ، يااتصال کوتاه بر روي جامپر مربوطه ( J8 ) و يا تعويض تراشه CMOSامکان پذير مي باشد . البته اين روشها در صورتي کارآمد خواهد بود که شما مجاز به بازکردن کيس کامپيوتر باشيد که البته در اکثر مواقع اين امکان وجود ندارد .

شايان ذکر است در صورتي که اعمال فوق درست صورت نگيرد احتمال سوختن و خراب شدن CMOS وجود دارد بنابراين تا حد امکان بايد از کاربرد اين روش اجتناب شود مگر در مواقعي که ضرورت ايجاب نمايد.

در حالت دوم با توجه به بوت شدن کامپيوتر نيازي به اقدامات فوق نبوده و مي توان با استفاده از نرم افزارهاي مناسب اقدام به پاک کردن و يا ذخيره اطلاعات CMOS نماييم . از آنجايي که هميشه نرم افزار مناسب وجود ندارد و يا در دسترس نيست بعنوان يک مهندس نرم افزار بايد قادر باشيم تا با استفاده از امکانات موجود بر روي کامپيوتر اين کار را انجام دهيم . با استفاده از برنامه DEBUG.EXE که همراه فايلهاي سيستم عامل DOS و ويندوز وجود دارد مي توان با خواندن و يا نوشتن در پورت هاي H70 و H71 تغييرات لازم را در محتوياتCMOS  اعمال نمود

از دو پورت فوق پورت H70 بعنوان گذرگاه آدرس( ADDRESS BUS ) و پورت H71 بعنوان گذرگاه داده بکار مي رود. الگوريتم کلي کار به اين صورت است که CMOS  را بعنوان يک آرايه يک بعدي در نظر مي گيريم که داراي 256 خانه مي باشد . براي دسترسي به هر خانه بايد ابتدا انديس ( آدرس ) خانه را در پورت H70 بنويسيم و بعد از دسترسي به خانه مورد نظر مي توان دادة دلخواه را درآن نوشت و يا از آن خواند . دسترسي به داده ها نيز فقط از طريق پورت H71 امکان پذير مي باشد . آخرين نکته اينکه عمل نوشتن و يا خواندن از پورت ها به کمک ثبات AL و توسط دستورهاي IN و OUT مربوط به زبان اسمبلي امکان پذير است .

الگوريتم کلي حذف اطلاعات حافظه CMOS

void CLR_CMOS(void){
  for(int i=0;i<256;i++){
     move value of i to register Al ;
     Out Register Al to Port 70h ;
     Set register Al to zero ;// Al=0
     Out Register Al to Port 71h
  }
 return;
}

          پياده سازي اين الگوريتم به کمک زبان اسمبلي بسيار آسان مي باشد . اما از آنجا که قرار است اين الگوريتم را با استفاده از debug  پياده سازي کنيم قبل از هر چيز بايد با تعدادي از دستورات اين نرم افزار آشنا شويم
با اجراي فايل debug.exe مي توانيد وارد محيط نرم افزار debug شويد محيط اصلي نرم افزار يک علامت خط تيره مي باشد که بعد از اجراي فايل debug.exe ظاهر مي شود.
         اين نرم افزار داراي تعدادي دستور مي باشد که با تايپ يک علامت سئوال و فشردن کليد
ENTER مي توان ليست فرمانها را مشاهده نمود . در زير تعدادي از فرمانها را که براي پياده سازي اين الگوريتم به آن نياز داريم توضيح مي دهيم و ساير فرامين را به خواننده واگذار مي کنيم تا درصورت نياز با مراجعه به راهنماي نرم افزار با نحوه کار هريک آشنا شود

 

                                                            عملکرد

دستور

امکان نوشتن کداسمبلي از آدرس مشخص شده در صورت مشخص نکردن آدرس از آدرس موجود در IP بعنوان آدرس شروع استفاده مي شود . در ابتداي کار IP=100 است که همان شروع فايلهاي Com و يا bin مي باشد

A [address]

براي نمايش / مقداردهي ثبات ها بکار مي رود. در صورتي که بدون پارامتر استفاده شود محتويات کليه ثبات ها را نشان مي دهد اما در صورتي که با نام يک ثبات بکار رود علاوه بر نمايش مقدار فعلي ثبات مورد نظر امکان تغيير محتويات آنرا نيز فراهم مي آورد.

R [register]

براي مشخص نمودن نام و مسير فايل ورودي / خروجي بکار مي رود .

N [pathname]

براي اجراي برنامه تا يک آدرس مشخص بکار مي رود . چنانچه بدون پارامتر بکار رود  برنامه را از خط جاري (ip  فعلي ) تا انتهاي برنامه اجرا مي کند .

G

 براي نوشتن برنامه از آدرس h100 به تعداد بايتهاي مشخص شده در ثبات cx بکار مي رود .

W

براي خروج از محيط DEBUG بکار مي رود

Q

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

مرحله 1

با اجراي دستور a وارد مود برنامه نويسي اسمبلي شويد در اين صورت  debug  با نشان دادن آدرس  xxxx:0100 آمادگي خود را براي دريافت دستورات اعلام مي دارد ( در عمل debug بجاي xxxx  سگمنت مربوط به برنامه را نشان مي دهد که توجه به اين موضوع اصلاً در اينجا اهميتي ندارد .)

مرحله 2

          دستورات زير را با دقت تايپ کرده و در انتهاي هر خط کليد ENTER را فشار دهيد ( مواردي که زير آن خط کشيده شده از طرف نرم افزار نشان داده مي شود اين آدرسها در واقع مشخص کننده طول هر دستور و در نهايت طول برنامه مي باشد) .

XXXX:100  MOV  CL , FF 

XXXX:102  MOV  AL , CL

XXXX:104  OUT  70 , AL

XXXX:106  MOV  AL , 0

XXXX:108  OUT  71 , AL

XXXX:10A  LOOP 102

XXXX:10C  INT 20

XXXX:10E

(در صورتي که مايل به درک کار دستورات برنامه نمي باشيد به مرحله 3 برويد )

       توضيح خط به خط برنامه :

خط اول : يک شمارنده با مقدار 255 در نظر گرفته شده که معادل همان متغير i در الگوريتم است .

خط دوم : al را برابر  cl قرار مي دهيم.

خط سوم : محتواي al را به پورت h70 ارسال کرديم (در واقع تنظيم گذرگاه آدرس ) .

خط چهارم : al را برابر  صفر قرار مي دهيم .

خط پنجم  : محتواي al را به پورت h71 ارسا ل مي کنيم و در واقع داده موجود در al را در آدرسي که قبلاً مشخص کرده ايم مي نويسيم

خط ششم  : از آنجا که عمليات مربوط به تنظيم آدرس و نوشتن داده در محل آدرس بايد به تعداد لازم تکرار شود بنايراين از دستور LOOP براي ايجاد يک حلقه با تعداد تکرار مشخص شده در CX  استفاده کرديم دستور LOOP 102 باعث مي شود تا برنامه در هربار اجرا يک واحد از مقدار CX کم کرده و در صورت منفي شدن دستور بعدي و در غير اينصورت  به آدرس مشخص شده پرش مي کند .در اين برنامه با توجه به مقدار CX خطوط دوم تا پنجم 256 بار اجرا مي شوند .

خط هفتم : اجراي اين وقفه باعث ختم برنامه خواهد شد

مرحله 3

بعد از فشردن کليدENTER  درآخرين مرحله مجدداً اعلان DEBUG  ظاهر مي شود در اين مرحله چنانچه نمي خواهيد برنامه را ذخيره کنيد در جلوي اعلان
( همان علامت منها ) دستور
G را اجرا کنيد تا کليه محتويات CMOS پاک شود.  سيستم را RESET نموده و با فشردن کليد DEL وارد ست آپ سيستم شويد و تغييرات لازم را اعمال نماييد . اما در صورتي که تمايل داريد کد برنامه را به صورت يک فايل اجرايي از نوع COM درآوريد مراحل بعدي را انجام دهيد

مرحله 4

با اجراي فرمان R  CX در مقابل اعلان DEBUG مقدار ثبات CX را به E تغيير داده و کليد ENTER را فشار دهيد .( دقت داشته باشد که کليه اعداد در DEBUG در مبناي 16 نوشته مي شوند و عدد  Eهمان طول برنامه شماست يعني اختلاف 10E – 100 در مبناي 16)

مرحله 5

با اجراي فرمان N  CLR_CMOS.COM  در جلوي اعلان DEBUG نام CLR_CMOS.COM را براي برنامه خود مشخص کنيد ( به جاي اين نام مي توانيد نام دلخواه خودتان را با پسوند COM جايگزين کنيد )

مرحله 6 

          با اجراي فرمان W در جلوي اعلان DEBUG تعداد 14 بايت کد نوشته شده در فايلي با نامي که در مرحله  قبل مشخص کرده ايد ذخيره خواهد شد .

حال شما داراي يک فايل اجرايي 14 بايتي خواهيد بود که هر وقت بر روي يک کامپيوتر اجرا شود محتويات حافظه CMOS آنرا پاک مي کند .

مرحله 7

 در اين مرحله مي توانيد همچون مرحله 3 عمل نموده و يا با اجراي دستور Q از DEBUG خارج شويد و فايلي را که ساخته ايد اجرا نموده و سيستم را RESET کنيد و وارد ست آپ شويد.

Download Program (14 Byte)

بازگشت به صفحه قبل     بازگشت به صفحه اول