1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

آموزش اسمبلی(10)

شروع موضوع توسط hector2141 ‏15/10/12 در انجمن Assembly

  1. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    [​IMG]
    در این قسمت یک تمرین دیگر با هم انجام میدهیم و برنامه ای مینویسیم که تعداد ۲۰۰ رنگ از ۲۵۶ رنگ موجود در حالت ۳۲۰×۲۰۰ گرافیکی را نمایش دهد .


    تابع شماره ۰۰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. ترجمه کنید.

    [HR][/HR] . 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


    با انجام این تمرین ساده ، یا گرفتیم که دانستن یکسری از وقفه ها و توابعمربوط به آنها برای نوشتن برنامه های اسمبلی الزامی است .