تعریف مشترک متغیرهای در درون C و اسمبلی
يك راه حل ديگر اما مطمئن براي قرار دادن متغيرها درآدرسهاي دلخواه استفاده از فايل command ( با پسوند ".cmd") است. ديديم كه فايل command يك وسيله مناسب براي مديريت حافظه پردازنده ميباشد. در اين فايل ميتوان آدرس section ها را در فضاي حافظه مشخص كرد. يكي از امكاناتي كه در نرمافزارCCS وجود دارد اين است كه مثلا بتوان براي متغير AD يك section جداگانه تعريف كرد و سپس آن section را در فايلcommand در آدرس 0x3FEDC8 قرار داد. در ادامه چند روش مختلف براي اين منظور توضيح داده ميشود. اين روشها هيچكدام مزيتي بر ديگري نداشته ولي با يادگيري هر كدام ميتوانيد در كاربردهاي مختلف مناسبترين روش را انتخاب كنيد.
نوشتن همزمان برنامهها به زبان C و اسمبلي كاربردهاي زيادي دارد. در بسياري از پروژهها طراحان ترجيح ميدهند بخشي از پروژه را به زبان اسمبلي بنويسند. به طور مثال تعدادي از توابع سيستم كه بيشترين زمان پردازش را به خود اختصاص ميدهند به زبان اسمبلي نوشته شده ولي براي صرفه جويي در وقت بقيه توابع به زبان C نوشته ميشوند. در ادامه اين فصل با برخي از مفاهيمي كه براي نوشتن برنامهها به زبان C واسمبلي نياز است آشنا خواهيد شد. بنابراين كاربرد مطالب اين فصل تنها محدود به تعريف متغير AD نبوده بلكه اصول برنامهنويسي همزمان C و اسمبلي به عنوان يكي از روشهاي پر كاربرد توضيح داده ميگردد.
|
تمام برنامههاي اسمبلي را بايد در فايلهاي با پسوند ".asm" و برنامههاي C را با ".c" و برنامههاي C++ را با ".cpp" نوشت. همچنين پسوند ".C" ( حرف C بزرگ) باعث ميشود كامپايلر فايل را از نوع C++ در نظر بگيرد. نرمافزار CCS با توجه به پسوند نام فايلها آنها را كامپايل ميكند. |
پيش از ادامه مطلب نياز است يك نكته مهم در برنامهنويسي مشترك C و اسمبلي مرور گردد.
|
هنگام نوشتن يك برنامه در اسمبلي ممكن است نياز باشد تا يكي از متغيرهاي برنامههاي C در اسمبلي استفاده گردد و يا برعكس در يك برنامهC ، نياز به استفاده از متغيرهاي برنامههاي اسمبلي باشد. در اين شرايط نام متغير يا آدرس تابع در C و اسمبلي با هم فرق ميكند. تمام اسامي دراسمبلي يك عدد under line) _ ( در ابتداي نامشان اضافه ميگردد. مثلا اگر متغيري در درون C نامش var است در فايل اسمبلي براي استفاده از آن متغير بايد از نام _var استفاده شود. ويا برعكس اگر متغيري در اسمبلي وجود دارد كه از درونC هم به آن دسترسي وجود دارد بايد در اسمبلي با يك _ اضافه تعريف گردد. مثلا اگر متغير به نام _varASM در اسمبلي وجود دارد در C نام آن varASM خواهد بود. |