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

نام تاپیک: روشن کردن چراغ های کیبورد با اسمبلی؟

  1. #1

    روشن کردن چراغ های کیبورد با اسمبلی؟

    با یاد خدا
    با سلام خدمت برادر های عزیز
    من یه قطعه کد میخوام که با زدن کلید شیفت (فرقی نداره کدومش) یکی از چراغ های کیبود یا نام لوک یا کپس لوک روشن بشه
    من در این مورد زیاد سرچ کردم هم منابع فارسی و هم انگلیسی اما هیچ کدوم از کد ها کار نکردند
    برای کار با کیبورد وقفه 16 استفاده میشه
    کامپایل کردم و بر روی لپ تاپ با پردازنده اینتل اجرا کردم masmنمیدونم چرا کد ها کارنکردند من کد ها رو با برنامه
    بعضی از برنامه ها اجرا نمی شدند و بعضی هم خطای زیر رو نشان میدهند
    Invalid win32 application
    اگه کسی کدی داره که کار کنه ممنون میشم کمک کنید

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

    نقل قول: روشن کردن چراغ های کیبورد با اسمبلی؟

    از کامپایلر خط فرمان برای کاربران اسمبلی برای کامپایل استفاده کنید.
    من یه قطعه کد میخوام که با زدن کلید شیفت (فرقی نداره کدومش) یکی از چراغ های کیبود یا نام لوک یا کپس لوک روشن بشه

    من در این مورد زیاد سرچ کردم هم منابع فارسی و هم انگلیسی اما هیچ کدوم از کد ها کار نکردند

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

  3. #3

    نقل قول: روشن کردن چراغ های کیبورد با اسمبلی؟

    البته اين اطلاعات يك كم قديمي است ولي شايد كار شما را راحت تر كند.
    صفحه‌ي كليد توسط 2 كنترلر يكي درون خود صفحه كليد و يكي برروي mother board كنترل مي‌شود. ارتباط اين دو كنترلر از طريق پورت‌هاي سخت‌افزاري 60H و 64H انجام مي‌شوند. اين دو پورت مكانيزم‌هاي لازم براي تبادل اطلاعات از صفحه كليد به كامپيوتر و برعكس را در اختيار مي‌گذارند. با مراجعه به IBM PC Reference guide مي‌تونيد روش برنامه نويسي اين پورت‌ها رو ياد بگيريد البته اين بحث‌ها در زمان‌هاي قديم (DOS) هم كار راحتي نبوده ، اين روزها در محيط ٌWindows كه اصلاً كار راحتي نيست.
    علاوه بر اين پورت‌ها در آدرس‌هاي پائين حافظه‌ي RAM كه توسط BIOS و اينتراپت‌ها استفاده مي‌شود. بخش‌هايي وجود دارد كه يكي از آنها به بايت وضعيت صفحه كليد اختصاص داده شده . اين بايت در آدرس 0000:0417 است. با خواندن و نوشتن اين بايت مي‌تونيد وضعيت كليدها و چراغ‌هاي صفحه كليد را خوانده و تغيير دهيد. شرح بيت‌هاي اين بايت عبارت است از:
    7 6 5 4 3 2 1 0
    +-----+-----+-----+-----+-----+-----+-----+-----+
    | INS | CAP | NUM | SCR | ALT | CTL | LSH | RSH |
    +-----+-----+-----+-----+-----+-----+-----+-----+

    Bit 0: Right-Shift key depressed: 1 = YES, 0 = NO.
    Bit 1: Left-Shift key depressed: 1 = YES, 0 = NO.
    Bit 2: Ctrl key depressed: 1 = YES, 0 = NO.
    Bit 3: Alt key depressed: 1 = YES, 0 = NO.
    Bit 4: Scroll Lock active: 1 = YES, 0 = NO.
    Bit 5: Num Lock active: 1 = YES, 0 = NO.
    Bit 6: Caps Lock active: 1 = YES, 0 = NO.
    Bit 7: Insert mode: 1 = ACTIVATED, 0 = UNACTIVATED.

    خوب با اين توضيحات مي‌تونيد حافظه را در اين آدرس بخونيد و با AND كردن اعداد دلخواه و باز نوشتن آن چراغ‌ها را به دلخواهتون روشن و خاموش كنيد. البته اين كار در Windows خيلي اما و اگر دارد.

    و راه حل مطمئن براي windows: خوب هر چه سيستم‌عامل‌ها پيشرفته مي‌شوند اين جوركارها را بايد با اطلاع آن‌ها انجام داد. به عبارت ديگر اجازه‌ي خواندن و نوشتن روي پورت‌ها و آدرس‌هاي حافظه كار هر برنامه‌اي نخواهد بود پس سيستم‌عامل حداكثر امكانات مورد نياز را در قالب كتابخانه‌هاي استاندارد خود يا API ارائه مي‌كند تا هم برنامه نويسان بتوانند كارهاي عادي و مجاز را به راحتي انجام دهند و هم سطوح امنيتي سيستم عامل حفظ شود. سيستم‌عامل Windows تابع keybd_event را به همين منظور تعبيه كرده با فراخواني اين تابع هم مي‌توانيد وضعيت كليدها را بخوانيد و هم وضعيت جديد را تعيين كنيد.

    موفق باشيد

  4. #4

    نقل قول: روشن کردن چراغ های کیبورد با اسمبلی؟

    با یاد خدا
    دوستان ممنون از کمکتون فقط یه مشکلی که هست چون من در اسمبلی تازه کار هستم کار با وقفه ها رو خوب نمیدونم مثلا همین استفاده از and , or برای تغییر محتویات ثبات رو میدونم اما نمیدونم اول باید چی بنویسم و چجوری وقفه رو بهش بدم و با چه ثباتی کار کنم
    اگه کسی بلده فقط یه نمونه خیلی کوچیک بزاره خودم بقیه رو انجام میدم
    چجوری به ادرس 0000:0417
    و چکار کنم؟

    یا
    اگه بخوام از تابع keybd_event استفاده کنیم چه کامپایلری استفاده کنم که بتونه این تابع رو بشناسه و در واقع تو کتابخانه توابع داشته باشه؟؟؟؟؟؟؟؟؟؟

  5. #5

    نقل قول: روشن کردن چراغ های کیبورد با اسمبلی؟

    دوستان ممنون از کمکتون فقط یه مشکلی که هست چون من در اسمبلی تازه کار هستم کار با وقفه ها رو خوب نمیدونم مثلا همین استفاده از and , or برای تغییر محتویات ثبات رو میدونم اما نمیدونم اول باید چی بنویسم و چجوری وقفه رو بهش بدم و با چه ثباتی کار کنم
    هنوز زوده اومدين اين تالار پله پله ، اول كار هاي ساده انجام بدين مثل محاسبات اعداد كوچك،تبديل عدد به اسكي و بلعكس اينارو با همون and ,or انجا بدي!
    كمي هم با وقفه آشنا ميشي
    در تاپيك هاي ديگه چيزي كه ميخواهيد هست!
    چجوری به ادرس 0000:0417

    اينو توي يك تاپيك جند دقيقه قبل جواب دادم توي صفحه اول بگردين پيداش مي كنيد
    اگه بخوام از تابع keybd_event استفاده کنیم چه کامپایلری استفاده کنم که بتونه این تابع رو بشناسه و در واقع تو کتابخانه توابع داشته باشه؟؟؟؟؟؟؟؟؟؟
    بايد از اسمبلر هاي 32 بيتي استفاده كنيد(مثل masm32,ml,nasm) كه هنوز زودتونه چون بايد با دستورات اسمبلي 16 و 32 آشنا شيد بعد استفاده از توابع api در كنارش
    توابع api هم مثل وقفه ها كار خاصي انجام ميدن كه شما درگير نوشتنش نشيد(البته دليل امنيتي هم داره)
    اونارو در برنامه فراخواني ميكنيد و در صورت آشنايي با توابع اون فايل ازش استفاده مي كنيد!
    مرجع api هم به msdn مراجعه كنيد.

  6. #6

    نقل قول: روشن کردن چراغ های کیبورد با اسمبلی؟

    دوست عزیز میدونم که خیلی زوده برای این کار اما من پروژه دارم و باید انجامش بدم نمی خوام پول بدم کسی برام انجامش بده چون کار بی ارزرشی هست اما اینکه شما دوستان کمک کنید تا بتونم لا اقل به اون چیزی که میخوام نزدیک بشم خیلی بهتره

    ممنون

    ظاهرا برای روشن کردن چراغ های کیبورد از وقفه 16h و پورت بایوس 60 استفاده میشه که با تغییر بیت های محتوای ثبات al با دستورات AND و ORوضعیت چراغ ها تغییر میکنه اما مشکل اینه که نمیدونم این کار دقیقا چجوری انجام میشه

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

    نقل قول: روشن کردن چراغ های کیبورد با اسمبلی؟

    نقل قول نوشته شده توسط one hacker alone مشاهده تاپیک
    ظاهرا برای روشن کردن چراغ های کیبورد از وقفه 16h و پورت بایوس 60 استفاده میشه که با تغییر بیت های محتوای ثبات al با دستورات AND و ORوضعیت چراغ ها تغییر میکنه اما مشکل اینه که نمیدونم این کار دقیقا چجوری انجام میشه
    میتونید محتوای فلاگ مخصوص این چراغها رو با تغییر در آدرس 40:0017H روشن و خاموش کنید.
    البته کدوم بیت مخصوص کدوم چراغ هست دقیقا خاطرم نیست ولی بصورت زیر میتونید این تغییر رو اعمال کنید.

    mov dx, 40h
    mov es, dx
    mov bx, 17h
    mov dl, byte ptr es:[bx] // دریافت وضعیت کنونی

    or dl, 64
    mov byte ptr es:[bx], dl // تغییر وضعیت چراغ


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

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