PDA

View Full Version : سوال: توضیح یه تیکه کد



ali-iman
پنج شنبه 02 اسفند 1397, 21:18 عصر
سلام وقتتون بخیر میشه این برنامه رو خط به خط توضیح بدین.ممنون
149815

the king
یک شنبه 26 آبان 1398, 19:35 عصر
سلام وقتتون بخیر میشه این برنامه رو خط به خط توضیح بدین.ممنون




NAME "vga"

نامی که برای برنامه در نظر گرفته شده vga است.



ORG 100h

در فایل های اجرایی COM آدرس شروع کد 100h است.



JMP code

به موقعیتی که با برچسب code مشخص شده پرش می کنیم.



w EQU 10

یک مقدار ثابت با نام w و مقدار 10 تعریف می کنیم.



h EQU 5

یک مقدار ثابت با نام h و مقدار 5 تعریف می کنیم.



code:

این موقعیت از کد با برچسب code مشخص شده است.



MOV AH, 0

در ادامه قصد داریم سرویس 0 از وقفه 10h را اجرا کنیم که مود صفحه نمایش را تغییر می دهد. شماره سرویس در AH مشخص می شود.



MOV AL, 13h

مود گرافیکی برای سرویس 0 از وقفه 10h در AL مشخص می شود. ما مود شماره 13h را انتخاب کرده ایم که مود گرافیکی 320x200 پیکسلی 256 رنگ است.



INT 10h

وقفه 10h را اجرا می کنیم تا مود گرافیکی شماره 13h فعال شود.



MOV CX, 100+w

در ادامه وقفه 0Ch ار وقفه 10h را اجرا خواهیم کرد که رنگ یک پیکسل در صفحه نمایش را تغییر می دهد. شماره ستون آن پیکسل (محور x) در CX مشخص می شود که ما w + 100 را برایش انتخاب می کنیم.



MOV DX, 20

شماره سطر پیکسل (محور y) برای سرویس 0Ch از وقفه 10h در DX مشخص می شود که ما مقدار 20 را برایش انتخاب می کنیم.



MOV AL, 15

شماره رنگ پیکسل در AL مشخص می شود که ما مقدار 15 را انتخاب می کنیم.



u1:

برچسب این موقعیت از کد u1 است.



MOV AH, 0ch

سرویس 0Ch را انتخاب می کنیم که باید در AH ثبت شود.



INT 10h

وقفه 10h را اجرا می کنیم تا پیکسلی که در موقعیت CX افقی و DX عمودی قرار دارد به رنگ AL شود.



DEC CX

مقدار CX که موقعیت افقی پیکسل را مشخص می کند یک واحد کم می کنیم، یعنی یک پیکسل به سمت چپ می رویم.



CMP CX, 100

بررسی می کنیم که آیا CX به 100 رسیده یا خیر. ما مقدار اولیه اش را w + 100 قرار داده بودیم که به تدریج کم می شود.



JAE u1

اگر بزرگتر یا برابر با 100 بود به u1 پرش می کنیم تا پیکسل مجاور هم رنگ شود.



MOV AH, 00

زمانی که به تعداد w پیکسل رنگ شود به اینجا رسیده ایم. سرویس 0 از وقفه 16h را اجرا خواهیم کرد تا منتظر فشار دادن یک کلید شود. شماره سرویس در AH مشخص می شود.



INT 16h

سرویس 16h را اجرا می کنیم. برنامه منتظر می ماند تا کاربر کلیدی را فشار دهد.



MOV AH, 00

در ادامه سرویس 00 از وقفه 10h را اجرا می کنیم تا مود گرافیکی را به حالت پیشفرض متنی برگردانیم. شماره سرویس در AH مشخص می شود.



MOV AL, 03

مود متنی پیشفرض 03 است که باید در AL مشخص شود.



INT 10h

وقفه 10h را اجرا می کنیم تا از مود گرافیکی خارج شویم و مود متنی فعال شود.



RET

برای بازگشت از توابع از دستور RET استفاده می شود.

نسخه ویرایش شده :


w EQU 10
h EQU 5

.MODEL TINY
.CODE
.STARTUP
MOV AH, 0
MOV AL, 13h
INT 10h
MOV CX, 100+w
MOV DX, 20
MOV AL, 15
u1:
MOV AH, 0ch
INT 10h
DEC CX
CMP CX, 100
JAE u1
MOV AH, 00
INT 16h
MOV AH, 00
MOV AL, 03
INT 10h
.EXIT 0
END