میخواهیم با مطالبی که خوانده ایم یک برنامه تمرینی بنویسیم . برنامه ای برای تعریف رنگهای جدید! اگر دارای کارت ویدئوی VGA و طبعا VGA BIOS باشید ، میتوانید از تابع ۱۰H مربوط به اینتراپت ۱۰h (که مربوط به سرویسهای تصویری است ) برای تعریف پالت های جدید استفاده کنید . تعداد رنگهائی که میتوان آنها را تغییر داد به نوع کارت گرافیک و VGA BIOS مربوط است و در حالت عادی رنگهای شماره ۰تا ۷ا قابل تعریف هستند . پالت رنگ را به این صورت باید تعریف کنیم : AH=10H AL=10H شماره رنگ از ۰تا BX= 7ا عدد رنگ سبز CH= عدد رنگ آبی CL= عددرنگ قرمز DH= رنگهائی که دیده میشود ، ترکیبی از سه رنگ اصلی قرمز،سبز و آبی (RGB) هستند . برای تعریف یک رنگ جدید نیز باید مقدار هر رنگ اصلی در پالت مورد نظر را در نیم ثباتهای CH/CLو DHوC قرار دهیم . این مقادیر ۶ بیتی و در محدوده ۱ تا ۶۳ هستند . پس از مقداردهی ثباتها اینتراپت ۱۰h را فراخوانی میکنیم . در مثال زیر ما رنگ شماره ۱ که آبی میباشد را تغییر داده ایم . تمرین : برنامه را برای رنگهای شماره ۲تا ۷ا نیز با مقادیر دلخواه تکمیل کنید. . MODEL SMALL . CODE ORG 100H START : MOV AH/010H MOV AL/010H MOV BX/1 ; COLOR NUMBER MOV CH/12 ; GREEN VALUE MOV CL/24 ; BLUE VALUE - THE 16-BIT NUMBER MOV DH/14 ; RED VALUE INT 10H ; VIDEO BIOS INT . INT 20H ; TERMINATE PROGRAM END START ما در اینجا وجود VGA BIOS را تست نکرده ایم و اگر این برنامه روی کامپیوتری با کارت گرافیک EGA و … اجراشود نتایج غیرقابل پیش بینی بدست خواهد آمد. یک راه ساده برای تست وجود کارت VGA وجود دارد . به اینصورت که مقدار ثباتهای AH و ALو را به ترتیب برابر ۱Ah و ۰۰h قرار داده و اینتراپت ۱۰h را اجرا میکنیم. اگر بعد از فراخوانی وقفه ، AL برابر ۱Ah بود یعنی کارت VGA فعال است . پس در برنامه ای که نوشتیم میتوانیم با یک دستور CMP ساده از بوجود آمدن خطای نبود VGA BIOS جلوگیری کنیم . بنا براین برنامه را به این صورت تکمیل میکنیم : . MODEL SMALL . CODE ORG 100H ; BEGINING OFFSET : 100H START : MOV AH/1AH این قسمت را | MOV AL/00 اضافه کرده ایم | INT 10H CMP AL/1AH ; VGA BIOS EXIST? | ; NO UJUMP TO THE END JNZ NOVGA MOV AH/010H MOV AL/010H MOV BX/1 ; COLOR NUMBER MOV CH/12 ; GREEN VALUE MOV CL/24 ; BLUE VALUE - THE 16-BIT NUMBER MOV DH/14 ; RED VALUE INT 10H ; VIDEO BIOS INT. NOVGA: INT 20H ; TERMINATE PROGRAM END START در برنامه بالا اگر بعد از اجرای وقفه ۱۰h مقدار AL برابر ۱Ah نباشد، نمیتوانیم از سرویس تعریف رنگ استفاده کرده و مجبوریم برنامه را با پرش به NOVGA خاتمه دهیم . در این قسمت با نوشتن یک برنامه ، دو تابع مفید از وقفه ۱۰h را یاد گرفتیم و دیدیم که نوشتن یک برنامه اسمبلی برخلاف آنچه تا بحال تصور میکردیم چقدر ساده و جالب است . پیروز باشید.