وبلاگ فرهاد مرتضی پور

Farhad Mortezapour's Blog

وبلاگ فرهاد مرتضی پور

Farhad Mortezapour's Blog

آشنایی با HIBERNATE در ویندوز XP

زمانی که سیستم را خاموش می کنید و یا به هر دلیلی میخواهید از ویندوز خارج شویدحتما از شما درباره ذخیره برنامه ها سؤال می شود.نکته جالب توجه در ویندوز XP خروج از آن بدون ذخیره اطلاعات است.در این صورت شما می توانید برنامه ها را

در هر حالتی که هستند رها کرده و از ویندوز خارج شوید.مجدد که وارد محیط ویندوز می شوید می بینید که هیچ چیز دست نخورده و برنامه ها به همان شکل باقی مانده اند حالا شما می توانید به کارتان ادامه دهید!!! (حتی پنجره ها باز مانده اند)
این حالت را اصطلاحا
HIBERNATE میگویند.برای فعال کردن آن از منوی استارت به کنترل پنل رفته و Power Options را باز کنید سپس در سربرگ Hibernate گزینه Enable Hibernation را فعال کنید و تنظیمات را تایید کنید.حال منوی استارت را باز کرده

و turn of computer را انتخاب کنید. در صفحه باز شده دکمه shift را بزنید.میبینید که گزینه standby به hibernate تغییر پیدا

می کند.برای بردن کامپیوتر به این حالت دکمه shift را نگه داشته و روی hibernate کلیک کنید.

 

موفق باشید !

آموزش بکار بردن وقفه در زبانهای تحت DOS

اول باید بدانیم وقفه چیست:

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

می کند.

وقفه ها به دو رده کلی تقسیم می شوند:

1) وقفه های نرم افزاری: این وقفه ها توسط نرم افزار تولید می شوند وکارهای نرم افزاری انجام می دهند. مثل وقفه های DOS

2) وقفه های سخت افزاری: این وقفه ها توسط سخت افزار تولید می شوند مثل وقفه صفحه کلید

تعداد 256 وقفه سخت افزاری و هم نرم افزاری در سیستم وجود دارد که در جدول زیر آمده اند البته هر کدام از این وقفه ها ممکن است دارای توابعی باشند که در زیر فقط اصل کار این وقفه ها ذکر شده است.

 

شماره وقفه

آدرس وقفه

کار وقفه

00

01

02

03

04

05

06

07

08

09

0A

 

0B

0C

0D

0E

0F

10

11

12

13

14

15

16

17

18

19

1A

1B

1C

1D

1E

1F

20

21

22

23

24

25

26

27

28

29-2E

2F

30-32

33

34-40

41

42-45

46

47-49

4A

4B-5B

5C

5D-66

67

68-6F

70

71

72

73

74

75

76

77

78-7F

80-F0

F1-FF

000-003

004-007

008-00B

00C-00F

010-013

014-017

018-01B

01D-01F

020-023

024-027

028-02B

 

02C-02F

030-033

034-037

038-03B

03C-03F

040-043

044-047

048-04B

04C-04F

050-053

054-057

058-05B

05C-05F

060-063

064-067

068-06B

06C-06F

070-073

074-077

078-07B

07C-07F

080-083

084-087

088-08B

08C-08F

090-093

094-097

098-09B

09C-09F

0A0-0A3

0A4-0BB

0BC-0BF

0C0-0CB

0CC-0CF

0D0-0FF

104-107

108-117

118-11B

11C-127

128-12B

12C-16F

170-173

174-19B

19C-19F

1A0-1BF

1C0-1C3

1C4-1C7

1C8-1CB

1CC-1CF

100-103

104-107

108-10B

10C-10F

1E0-1FF

200-3C3

3C4-3CF

پردازنده: تقسیم بر صفر

پردازنده: تک گام

پردازنده: NMI وقفه بدون ماسک (خطا برای RAM )

پردازنده: نقطه توقف برنامه دردسترس نیست

پردازنده: سرریزی عدد

Hardcopy

دستورالعمل ناشناخته (فقط برای80286  بکار می رود)

رزرو شده

IRQ0: تایمر ( هر ثانیه 18.2 بار)

IRQ1: صفحه کلید

IRQ2: دومین تراشه 8259 ( فقط برای کامپیوترهای AT بکار می رود )

IRQ3: پورت سریال شماره 2

IRQ4: پورت سریال شماره 1

IRQ5: هارد درایو

IRQ6: دیسکت

IRQ7: چاپگر

BIOS: تابعهای صفحه نمایش

BIOS: معلوم کردن ترکیب سیستم

BIOS: معلوم کردن اندازه حافظه RAM

BIOS: توابع دیسکت وهارد دیسک

BIOS: دسترسی به پورت سریال

BIOS: نوار مغناطیسی وتوابع پیشرفته

BIOS: پرسش از صفحه کلید ( پویش صفحه کلید )

BIOS: دسترسی به پورت موازی چاپگر

صدا زدن ROM BASIC

BIOS: BOOT کردن سیستم ( Ctrl+Alt+Delete )

BIOS: فرمان Time یا Date

کلید Break ( نه کلید Ctrl-C ) فشرده شده است

بعد از هر بار فراخوانی INT 8 فراخوانی می شود

آدرس جدول پارامتر ویدئویی

آدرس جدول پارامتر دیسکت

آدرس نمونه کارکتر بیتی

DOS: خروج از برنامه

DOS: صدا کردن توابع DOS

آدرس خروج ازروتین برنامه در  DOS

آدرس روتین Ctrl-Break در DOS

آدرس خطا در DOS

DOS: خواندن دیسکت و هارد دیسک

DOS: نوشتن دیسکت و هارد دیسک

DOS: خروج از برنامه و مقیم شدن در حافظه

DOS: DOS اشغال نشده است

DOS: رزرو شده

DOS: Multiplexer ( تقسیم کننده )

DOS: رزرو شده

توابع گرداننده ماوس

DOS: رزرو شده

آدرس جدول 1 هارد دیسک

رزرو شده

آدرس جدول 2 هارد دیسک

برای استفاده برنامه ها

دسترسی به زنگ ساعت ( فقط در کامپیوترهای AT)

خالی: برای استفاده برنامه ها

توابع NETBIOS

خالی: برای استفاده برنامه ها

توابع مدیریت حافظه EMS

خالی: برای استفاده برنامه ها

IRQ08: ساعت بلا درنگ ( فقط در کامپیوترهای AT )

IRQ09: (فقط در کامپیوترهای AT )

IRQ10: (فقط در کامپیوترهای AT )

IRQ11: (فقط در کامپیوترهای AT )

IRQ12: (فقط در کامپیوترهای AT )

IRQ13: NMI در 80387 (فقط در کامپیوترهای AT )

IRQ14: هاردیسک (فقط در کامپیوترهای AT )

IRQ15: (فقط در کامپیوترهای AT )

رزرو شده

برای استفاده مفسر BASIC

رزرو شده

 

برای استفاده از این وقفه ها باید بدانید که بعضی از این وقفه ها برای کار نیاز به مقدار دهی ثباتها دارند.

حال طریقه استفاده از این توابع را به هر سه زبان سی و پاسکال و اسمبلی برای شما بیان می کنم

در زبان پاسکال:

یک Type  به عنوان Registers در یونیت DOS برای کار با ثباتهای پردازنده قرار دارد که همه ثباتها به جز ثباتهای CS,IP در آن قرار دارند.

یک  زیر روال به نام Intr وجود دارد که وقفه را می فرستد و شکل کلی آن به صورت زیر است

Intr(شماره وقفه,Registers متغیری از نوع);

درزبان پاسکال برای اعداد در مبنای 16 از علامت $ استفاده می کنیم.

من می خواهم برنامه ای به زبان پاسکال با استفاده از وقفه بنویسم که اندازه مکان نما را بزرگ کند.

Uses

    Dos,Crt;

 Var

    Regs:Registers;

  Begin

       Regs.AH:=1;

       Regs.CH:=0;

       Regs.CL:=13;

       Intr($10,Regs);

       ReadKey;

  End.

در زبان سی:

یک union به عنوان REGS در dos.h است برا استفاده ازثباتهای 16 بیتی از رکورد x وبرای استفاده از ثباتهای 8 بیتی از رکورد h استفاده می کنیم وثباتهای سگمنت هم در union دیگری به نام SREGSقرار دارند

در زبان سی برای اعداد در مبنای 16 ازعلامت 0x در ابتدای عدد استفاده می کنیم

یک زیر روال به نام int86 وجود دارد که وقفه را می فرستد و شکل کلی آن به صورت زیر است

Int86(شماره وقفه,پارامترهای ورودی,پارامترهای خروجی);

برنامه بالا را به زبان سی می نویسم

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<dos.h>

 main()

  {

                union REGS r;

                r.h.ah=1;

                r.h.ch=0;

                r.h.cl=13;

                int86(0x10,&r,&r);

                getch();

}

در زبان اسمبلی احتیاج به متغیری برای کارکردن با ثباتها نداریم چون این زبان نزدیک به ماشین است ثباتها به صورت تعریف شده در این زبان وجود دارند

 

برای اجرای وقفه توسط زبان اسمبلی از دستور INT استفاده می شود.

من همان مثال را در زبان اسمبلی پیاده کرده ام.

.Model  Small

ORG 100H

CodeSg Segment Para Code ‘Code’

   Main Proce Far

                Assume CS :CodeSg,DS :CodeSg,SS :CodeSg,ES :CodeSg

                MOV         AH,1

                MOV  CH,0

                MOV         CL,13

                INT          10H

                MOV         AH,4CH

                INT 21H

                RETF

  Main EndP

CodeSg EndS

                End          Main

موفق باشید. نظر یادتون نره !