PDA

View Full Version : مشكل در رسم خط در اسمبلي



s_mokhtari
دوشنبه 15 خرداد 1391, 14:43 عصر
با سلام
دوستان من ميخوام يه خط در اسمبلي رسم كنم
مثلان از ستون 5 و سطر 5 به ستون 200 و سطر 50 ترسيم كنم
با تشكر

vahid1
دوشنبه 15 خرداد 1391, 21:37 عصر
دوست عزيز معمولاً برنامه‌هاي اسمبلي كه در حالت console يا همان Dos Prompt قديم اجرا مي‌شوند در حالت متني يا Text هستند. در اين حالت صفحه همانطور كه خودتان هم گفتيد به تعدادي سطر و ستون تقسيم مي‌شود و شما به باكس‌هايي كه مي‌توانند يك كاراكتر را نمايش بدهند دسترسي داريد. بنابراين ترسيم خط صاف چندان معني ندارد و مي‌توانيد يك خط پله‌اي ترسيم كنيد.
براي ترسيم خط با استفاده از int 10 تابع AH=02h مكان نما Cursor را به سطرها و ستون‌هاي دلخواه متقل كنيد ( سطر DH= و ستون =DL و BH شماره صفحه كه آن را صفر كنيد) و سپس با تابع AH=09h كاراكتر O يا هر حرف ديگري را چاپ كنيد (al كد كاراكتري كه مي‌خواهيد چاپ كنيد مانند 'O' يا 4Fh و BH شماره صفحه كه آن را صفر كنيد و BL رنگ كه مي‌توانيد از مقدار 1Fh استفاده كنيد و CX كه تعداد چاپ كاراكتر است كه بايد 1 باشد)
در مورد كد رنگ يك عدد 16 بيتي است كه 8 بيت اول زنگ نوشته و 8 بيت دوم رنگ زمينه است. عدد 1Fh يعني سفيد روشن روي آبي.

پس مطابق معادله‌ي خط شما يك حلقه ايجاد كنيد كه مختصات نقاط خط را در يك صفحه‌ي 50 در 200 يا هر اندازه ديگر بدست آورد و با تابع‌هاي int 10 نقاط را چاپ مي‌كنيد تا خط رسم شود.

در ضمن مي‌توانيد با ساير تابع‌هاي Int 10 صفحه را به حالت گرافيك ببريد و خطوط صاف و بي‌عيب گرافيكي بكشيد. در صورت علاقه ساير تابع‌هاي Int 10 را مطالعه كنيد.

با آرزوي موفقيت

xman_1365_x
سه شنبه 16 خرداد 1391, 01:43 صبح
http://en.wikipedia.org/wiki/Bresenham's_line_algorithm

s_mokhtari
سه شنبه 16 خرداد 1391, 07:25 صبح
سلام
دوست عزيز ميشه كدشا برام بنويسيد اخه چطور توي حلقه بذارم كه برام خط را بكش
با تشكر

ssbostan
سه شنبه 16 خرداد 1391, 20:43 عصر
با سلام؛
براي رسم يك خط بايد مراحل زير رو طي كنيد:
1- بدست آوردن شيب خط
2- نوشتن معادله خط

موارد گفته شده رو ميتونيد از لينكي كه مهدي جان گذاشته پيدا كنيد.

من چيزي كه ميخواستيد رو محاسبه كردم و كد رو براتون نوشتم:




mov ah, 00h
mov al, 13h
int 10h


mov si, 5 ; x
mov di, 5 ; y
mov bp, 0 ; step

mov cx, 200

khatkesh:
push cx
mov ah, 0ch
mov al, 04h
mov cx, si
mov dx, di
inc si
inc bp
cmp bp, 4
je add_y
next:
int 10h
pop cx
loop khatkesh

jmp exit


add_y:
inc di
mov bp, 0
jmp next


exit:
mov ax, 4c00h
int 21h



موفق باشيد.

mohammadreza0123
چهارشنبه 17 خرداد 1391, 10:46 صبح
سلام

ببخشید یه سوال داشتم

من می خوام برنامه ای بنویسم که دفعه اول خط 45 درج رسم کنه

دفعه دوم که اجرا می کنیم همین طور زاویه هاش تغییر کنه

مثلا دفعه اول 30

برای بار دوم که اجرا میشه
45

و همین طور تغییر کنه

لطفا زود کمکم کنید
یعنی اولین بار 45

دومین مثلا 30

سومین 60 و الی آخر

باید چه کنم

تابع داره

آخه چه طور هر بار این اجرا تغییر کنه

اگه میتونید کمک کنید

ssbostan
چهارشنبه 17 خرداد 1391, 11:26 صبح
با سلام؛
براي رسم هر خط با شيب هايي كه دوست داريد بايد يك معادله خط داشته باشيد. براي نوشتن معادله خط مراحل رو طبق پست بالا طي كنيد و در نهايت معادله رو به كد اسمبلي تبديل كنيد.
كد هر معادله رو به صورت يك ماكرو يا پردازه دربياريد و هرجا كه دوست داشتيد ازشون استفاده كنيد.

موفق باشيد.

golnaznzr
دوشنبه 06 دی 1395, 11:33 صبح
سلام من یک پروژه اسمبلی دارم با این محتوا
برنامه ای بنویسید که ابتدا مانیتور را پاک کند و سپس یک خط 45 درجه از نقطه x=140 و y=50 تا نقطه x=200 و y=100 به رنگ سبز رسم نماید سپس پیغام زیر را چاپ کند
"message : "the line was successfully drawn
خواهش میکنم کد این برنامه رو برام بنویسین :(((((
خیلی عجله دارم
لطفااااااا