اسمبلی یاد بگیریم – ۱۰
در این قسمت یک تمرین دیگر با هم انجام میدهیم و برنامه ای مینویسیم که تعداد ۲۰۰
رنگ از ۲۵۶ رنگ موجود در حالت ۳۲۰×۲۰۰ گرافیکی را نمایش دهد .
تابع شماره ۰۰h از وقفه ۱۰h مربوط به تعیین حالت نمایش است . کد مربوط به
حالت صفحه نمایش در ثبات AL قرار گرفته و وقفه فراخوانی میشود:
شماره تابع برابر AH=00h
حالت صفحه نمایش با استفاده از جدول AL= INT 10h
حالت صفحه نمایش در AL از جدول مخصوص موجود در کتابهای اسمبلی بدست می آید.
کد مربوط به حالت ۲۵۶C َ۳۲۰×۲۰۰ برابر ۱۳h است بنا براین AL را برابر ۱۳h قرار
میدهیم .
برای نمایش و روشن کردن یک نقطه (Pixel) در حالت گرافیکی از تابع ۰Ch همین
وقفه استفاده میکنیم . یعنی شماره ستون را در CX ، سماره سطر را در DX و شماره
رنگ را در AL قرار داده و وقفه را اجرا میکنیم . برای اینکه از ستون ۱۹۹ تا ستون
شماره صفر نقطه روشن کنیم ، CX را برابر ۳۱۹ قرار داده و با دستور LOOP نقاط را
در یک سطر روشن میکنیم .
MOV CX/319 ; COLUMN 319 = START COLUMN
COL:
INT 10H ; CALL INTERRUPT 10H
LOOP COL
سپس DX یا همان شماره سطر را یکواحد افزایش میدهیم و مقدار آن را با ۱۹۹ مقایسه
میکنیم (چون از ۰ تا ۱۹۹ سطر داریم ) و اگر برابر نبود دوباره عملیات بالا را
انجام میدهیم .
بعد از اینکه این عملیات انجام شد، تابع ۰۰h از INT 16h را فراخوانی میکنیم تا
منتظر دریافت یک کلید از صفحه کلید شود . به این ترتیب میتوانیم نتیجه برنامه
را مشاهده کنیم و کلیدی را برای اتمام برنامه بزنیم .
در نهایت باید حالت صفحه نمایش را به مود متنی برگردانیم .
برای اینکار از همان تابع تعیین مود نمایشی استفاده میکنیم و حالت صفحه نمایش
که با AL مشخص میشود را برابر ۳ قرار میدهیم .
برنامه را با روش گفته شده تایپ و کامپایل کنید . اگر از توربو اسمبلر استفاده
میکنید با فرمان ASM/T.َTASM VGA256 آن را به فرم COM. ترجمه کنید.
. MODEL SMALL
. CODE
ORG 100H
START :
MOV AH/00H
MOV AL/13H
MOV BX/00H ; PAGE NUMBER
INT 10H ; SET TO 320×200 256 COLORS
MOV AH/0CH ; PUTPIXEL FUNCTION
MOV AL/25 ; COLOR #25
MOV DX/0 ; ROW 0
ROW :
MOV CX/319 ; COLUMN 319 = START COLUMN
COL :
INT 10H ; CALL INTERRUPT 10H
LOOP COL ; DOWN TO CX=0
INC DX ; DX=DX+1
INC AL ; AL=AL+1( COLOR NUMBER )
CMP DX/199 ; IF DX=199
JNZ ROW ; ELSE JUMP TO ROW
MOV AH/00H
INT 16H
MOV AH/00H ; VIDEO MODE SET
MOV AL/03H ; 80×25 16 COLORS
INT 10H ; CALL INT .10H
INT 20H ; TERMINATE PROGRAM
END START
با انجام این تمرین ساده ، یا گرفتیم که دانستن یکسری از وقفه ها و توابع
مربوط به آنها برای نوشتن برنامه های اسمبلی الزامی است .
در قسمت بعدی نحوه تعریف متغیر ها ، بدست آوردن آدرس آنها و چاپ
پیغامها و جملات را یاد خواهیم گرفت .
دیدگاه خود را بیان کنید.
باید وارد سایت شده باشید برای دیدگاه دادن