نمایش نتایج 1 تا 6 از 6

نام تاپیک: مقاله : وقفه ها ؟

  1. #1
    کاربر دائمی آواتار Delphi Skyline
    تاریخ عضویت
    دی 1383
    محل زندگی
    شیراز
    پست
    1,174

    مقاله : وقفه ها ؟

    وقفه ها - قسمت اول

    مقاله زیر ترجمه بنده از قسمتی از هلپ برنامه Emulator 8086 دوباره نوشته شده توسطDaniel B. Sedory (aka The Starmanمی باشد . البته قسمت هایی را از جمله توضیحات اول مقاله , برخی مثال ها و بعضی توضیحات را خودم اضافه نموده ام .


    -وقفه چیست ؟
    اول از همه باید دانست که وقفه یا interrupt چیست : وقفه ها مانند API های ویندوز هستند . یعنی دستوراتی از قبل نوشته شده که برای استفاده از آنها تنها کاری را که باید انجام داد فراخوانی آنهاست . کلیه وقفه های ذکر شده هماهنگ با کامپیوتر های IBM و پردازنده های x86( پردازنده های 8086 اینتل و پردازنده های سازگار AMD ) می باشند . البته بیشتر این وقفه ها بر روی پردازنده های جدید تر نیز قابل اجرا می باشد . برای کامپایل کردن برنامه ها به کامپایلر های MASM یا TASM و یا FASM 16 بیتی نیاز دارید .

    چرا می گوییم وقفه ؟
    در واقع وقفه ها وقتی اجرا می شود فعالیت دیگر برنامه ها را متوقف کرده و خود اجرا می شوند .

    -انواع وفقه ها :
    وقفه ها دو نوع هستند :
    1 – وقفه هایی که عملکرد آنها شبیه به روال ها هستند یعنی اینکه عملی را انجام داده ولی مقداری را بر نمی گردانند (شبیه Procedure در دلفی) .
    2 – وقفه هایی که عملکرد آنها شبیه توابع بوده و مقداری را بر میگردانند ولی عملی را در واقع انجام نمی دهند (شبیه Function در دلفی) .

    فراخوانی وققه ها :
    هر وقفه پارامتر هایی دارد که اول باید آنها را مقدار دهی کرد البته پارامتر نه به آن شکل بلکه برای مقداری دهی به پارامتر ها باید مقادیر را در ثبات های (REGISTERS) خاصی قرار داد . سپس نوع کار وقفه را در ثباتی قرار می دهیم .
    و در آخر با استفاده از دستور INT وقفه مورد نظر را اجرا می کنیم .
    نمونه ای از استفاده وقفه ها :

    mov al, 13h
    mov ah, 0
    int 10h

    این ثبات که کار آن تعیین حالت ویدیویی است دارای یک پارامتر می باشد که باید آن را در ثبات al (قسمت پایینی ثبات ax) قرار داد و نوع کار وقفه که تعیین حالت ویدیویی است را در ah (قسمت بالایی ax) قرار می دهیم . قرار دادن 0 در ah به معنی تعیین حالت ویدویی است . و در دستور سوم وقفه 10h را اجرا می کنیم ( توجه کنید ما با قرار دادن 0 در ah نوع کار وقفه 10h را تعیین حالت ویدویی کردیم اما اگر 0 را در ah قرار داده ولی وقفه دیگری مثل 21h را اجرا کنیم نوع کار فرق می کند و دیگر تعیین حالت ویدویی نیست ) .

    حالا به معرفی چندین وقفه و کار های آنها خواهیم پرداخت :


    -وقفه 10h

    تعیین حالت ویدویی :
    برای فهماندن کار تعیین حالت ویدویی به وقفه 0 را در ah قرار دهید .
    پرارامتر ها :
    اگر al را برابر با 00h قرار دهید :
    حالت متنی شده . 40x25 کاراکتر می شود . 16 رنگ . 8 صفحه .
    اگر al را برابر با 03h قرار دهید :
    حالت متنی شده . 80x25 کاراکتر می شود . 16 رنگ . 8 صفحه .

    اگر al را برابر با 13h قرار دهید :
    مد گرافیکی فعال می شود . 40x25 کاراکتر می شود . 256 رنگ . 1 صفحه .
    و وضوح تصویر 320x200 پیکسل می شود .

    مثال :
    تعیین حالت متنی 40x25 کاراکتر :

    mov al, 00h
    mov ah, 0
    int 10h


    تعیین موقعیت مکان نما متن :
    Ah را 2 قرار داده .
    ورودی ها (پارامتر ها) :
    DH : شماره ردیف (Xکاراکتری) .
    DL : شماره ستون (Yکاراکتری) .
    BH : شماره صفحه (از 0 تا 7) . اگر حالت گرافیکی فعال است شماره صفحه باید همیشه 0 باشد .

    مثال :
    بردن مکان نما به ردیف 4 و ستون 5 در صفحه 0 :

    mov dh, 4
    mov dl, 5
    mov bh, 0
    mov ah, 2
    int 10h



    تعیین صفحه جاری :
    Ah را 05h قرار داده.
    ورودی ها :
    AL : شماره صفحه (0 تا 7) .

    مثال :
    انتخاب کردن صفحه 3 :

    Mov bh,3
    Mov ah,03h
    INT 10h


    تغییر دادن رنگ یک پیکسل از صفحه :
    نکته : برای اجرای این وقفه باید مد گرافیکی فعال باشد .
    Ah را 0Ch قرار داده .
    ورودی ها :
    AL : رنگ پیکسل .
    CX : Y
    DX : X

    سیاه : 0000b : 0h
    آبی : 0001b : 1h
    سبز : 0010b : 2h
    قهوه ای : 0110b : 6h
    خاکستری روشن : 0111b : 7h
    خاکستری تیره : 1000b : 8h
    آبی روشن : 1001b : 9h
    سبز روشن : 1010b : Ah
    زرد : 1110b : Eh
    سفید : 1111b : Fh
    قرمز : 0100b : 4h
    قرمز روشن : 1100b : Ch

    مثال :
    تغییر دادن رنگ پیکسل 4,5 به قهوه ای (0110b) :
    نکته : اول باید مد گرافیکی را فعال کرد .

    ;set graphics video mode.
    mov al, 13h
    mov ah, 0
    int 10h ;
    ;change pixel color
    mov al, 0110b
    mov cx, 5
    mov dx, 4
    mov ah, 0ch
    int 10h


    بدست آوردن رنگ یک پیکسل :
    Ah را 0Dh قرار داده .
    ورودی :
    CX : Y
    DX : X
    خروجی :
    بعد از اجرای این وقفه , مقدار AL برابر با رنگ پیکسل مورد نظر می شود .

    مثال :
    بدست آوردن رنگ پیکسل 7,8 :

    mov cx, 8
    mov dx,
    int 10h


    با اجرای این برنامه مقدار AL برابر با شماره رنگ پیکسل 7,8 می شود .
    نکته : شماره رنگ در AL مبنای دو می باشد .

    نمایش یک کاراکتر :
    AH را 0Eh قرار می دهیم .
    ورودی :
    AL : کارکتری که می خواهد چاپ شود .
    نکته 1 : کاراکتر باید بین دو ' قرار گیرد . به عنوان مثال : 'A'
    نکته 2 : این وقفه فقط برای نمایش یک کاراکتر است و نمی تواند رشته(String) چاپ کند .
    نکته 3 : در برخی سیستم ها این وقفه در حالت گرافیکی کار نمی کند .

    مثال :
    چاپ Hello! :
    mov al, 'H'
    mov ah, 0eh
    int 10h

    mov al, 'e'
    mov ah, 0eh
    int 10h

    mov al, 'l'
    mov ah, 0eh
    int 10h

    mov al, 'l'
    mov ah, 0eh
    int 10h

    mov al, 'o'
    mov ah, 0eh
    int 10h

    mov al, '!'
    mov ah, 0eh
    int 10h






  2. #2

    نقل قول: مقاله : وقفه ها ؟

    آقا خیلی ممنون .
    ولی اگه یه کم آموزش هات رو بیشتر کنی بهتره.
    دمت گرم.

  3. #3

    نقل قول: مقاله : وقفه ها ؟

    اين چيزا مشكلي براي يادگيري ندارن چون تو اينترنت ميه پيدا كرد. حالا كه داري زحمت ميكشي اين چيزا رو تو محيط 32بيت آموزش بده
    موفق باشي

  4. #4
    کاربر دائمی آواتار Delphi Skyline
    تاریخ عضویت
    دی 1383
    محل زندگی
    شیراز
    پست
    1,174

    نقل قول: مقاله : وقفه ها ؟

    الان که فرصت نوشتن مقاله رو ندارم . ولی تابستون روی یه مقاله جامع در باره مبحث مد حفاظت شده کار می کردم . هر وقت تمام شد تقدیم دوستان خواهم کرد .
    روز خوش .

  5. #5
    کاربر دائمی آواتار khafan_bat
    تاریخ عضویت
    دی 1387
    محل زندگی
    منظومه ی شمسی-کره زمین-قاره ی آسیا-ایران-گیلان-لاهیجان
    سن
    34
    پست
    111

    نقل قول: مقاله : وقفه ها ؟

    احسنت عزیز

    problem ما حل شد. understand شدیم.

  6. #6
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: مقاله : وقفه ها ؟

    نقل قول نوشته شده توسط Delphi Skyline مشاهده تاپیک
    البته بیشتر این وقفه ها بر روی پردازنده های جدید تر نیز قابل اجرا می باشد
    و توضیح اینکه نوع وقفه به پردازنده ارتباطی ندارد بلکه همگی در اخر کار به وقفه های بایوس(وقفه های به غیر از بایوس) و در نهایت به کد های صفر و یک تبدیل میشوند تا مورد اجرا قرار گیرند.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •