PDA

View Full Version : سیستم من وارد مد گرافیک نمی شه



RED-C0DE
یک شنبه 03 تیر 1386, 18:00 عصر
سلام...
برای کار توی محیط گرافیکی مشکل دارم... هر برنامه نمونه ای که گرفتم و توش یه جورایی کار توی محیط گرافیک بود رو اسمبل و لینک کردم و بعدش اجرا، فقط صفحه سیاه نشون می ده...نمی دونم باید چیکار کنم:ناراحت: لطفا راهنمایی کنید....

اینم یه نمونه که اول به مد گرافیک می ره و بعد فقط یک پیکسل می خوام نشون بدم :



.model small
.stack 64
.data
.code

START PROC far
mov ax,@data
mov ds,ax

;change into graphic mode :
MOV AH,00H
MOV AL,13H
INT 10H

;put pixel :
MOV AH,0CH
MOV AL,02H
MOV BH,00H
MOV CX,10H
MOV DX,10H
INT 10H


MOV AX, 4c00h
int 21h

START ENDP
END START

mehdi5106
دوشنبه 04 تیر 1386, 07:36 صبح
برنامه شما هیچ مشکلی نداره و وارد مد گرافیک میشه .اما چون رنگی انتخابی شما سبز میباشد به خوبی نمایش داده نمی شود.در برنامه زیر من رنگ پیکسل را سفید کردم که به خوبی نمایش داده می شود.

.model small
.stack 64
.data
.code
START PROC far
mov ax,@data
mov ds,ax

;change into graphic mode :
MOV AH,00H
MOV AL,13H
INT 10H

;put pixel :
MOV AH,0CH
MOV AL,07H
MOV BH,00H
MOV CX,10H
MOV DX,10H
INT 10H

MOV AX, 4c00h
int 21h
START ENDP
END START

RED-C0DE
دوشنبه 04 تیر 1386, 11:20 صبح
ممنون از جوابت..اما فکر کنم مشکل جایه دیگه ای باشه ، چون بازم فرقی نکرد...
خودت همین برنامه رو تستش کردی و جواب داده روی سیستمت؟؟ اگه آره، با چی اسمبلش کردی و ویندوزت چیه؟ شاید مشکل از اونا باشه...

mehdi5106
دوشنبه 04 تیر 1386, 15:39 عصر
از برنامه Emulator استفاده کن تحت ویندوز هست.

RED-C0DE
دوشنبه 04 تیر 1386, 17:32 عصر
از اون لینکی که خودت توی یک پست دیگه داده بودی دانلود کردم
http://www.emu8086.com/files/emulator-demo.zip

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

RED-C0DE
دوشنبه 04 تیر 1386, 18:14 عصر
این متنیه که توی فایل Read_Me گذاشته :


================================================== ======================

THANK YOU FOR YOUR INTEREST IN EMU8086 PROJECT
THE DEMO DOWNLOAD IS NOT AVAILABLE AT THIS TIME


http://www.emu8086.com

================================================== ======================

ATTENTION STUDENTS!

IF YOU ALREADY OBTAINED A REGISTRATION KEY FROM THE LECTURER,
YOU MAY RECEIVE A COPY OF THE SOFTWARE BY SUBMITTING A REQUEST TO:

info@emu8086.com

PLEASE SUBMIT THE FOLLOWING INFORMATION ALONG WITH YOUR REQUEST:

1) THE NAME OF YOUR ACADEMIC FACILITY (SCHOOL/UNIVERSITY/COLLEGE)
2) THE REGISTRATION KEY (AS PROVIDED BY THE INSTRUCTOR)

ALTERNATIVELY YOU MAY RECEIVE THE SOFTWARE FROM THE LECTURER ON A CD,
COMPACT-FLASH DISK OR SD/MMC CARD.

================================================== ======================
اگه خودت زحمتشو بکشی خیلی ممنونت می شم....

پیداش کردم...در هر صورت ممنونم....
http://tr-net.tucows.com/files3/emulator.zip

Smart User
چهارشنبه 13 تیر 1386, 16:43 عصر
سلام.
ممکنه روی بعضی کارت گرافیک ها نتونی مد گرافیک داشته باشی.
یادم میاد برای پروژه اسمبلی که داشتم ، روی چند تا کامپیوتر که برنامه رو اجرا می کردم رو هر کدوم جوابهای مختلفی میداد. روی بعضی ها اصلا نشون نمیداد. رو بعضی ها خیلی سریع کار میکرد. رو بعضی ها هم همه چی جابجا میشد یعنی باید مود رو عوض میکردم . البته محیط برنامه نویسی asm4.5 تحت داس استفاده بود.
ولی با Emulator تست نکردم.

mountainking
پنج شنبه 11 مرداد 1386, 17:46 عصر
اینا مشکل استفاده از وقفه است. باید از API استفاده کنید. وقفه ها مدتهاست که با این مکانیزم سادهء استفاده از INT ممکنه منجر به کرش بشن تازه اگه کرش نشه معلوم نیس برناه اونطوری که شما می خواین کار کنه یا نه. تا اونجایی هم که وقفه ها اجرا میشن سیستم عامل بهتون لطف کرده حال داده یه جورایی یه دسترسی الکی به جدول وقفه الکی که اونم ادرس واقعی رو نداره داده. هر کدوم از مراحل حال دادن سیستم عامل دچار مشکل بشه یعنی بابای!

Smart user اون شعرتو تصحیح کن. درستش اینه:
زندگی صحنهء یکتای هنرمندی ماست. هرکسی نغمهء خود خواند و از صحنه رود. صحنه پیوسته بجاست. خرم آن نغمه که مردم بسپارند به یاد!

Inprise
پنج شنبه 11 مرداد 1386, 19:49 عصر
تا اونجایی هم که وقفه ها اجرا میشن سیستم عامل بهتون لطف کرده حال داده

سیستم عامل "حال" داده ؟ سیستم عامل را برای حال دادن طراحی نکردن .
وقتی پردازنده در وضعیت Protected Mode است دسترسی مستقیم به پورت ها ( in/out ) ممکن نیست و امکان استفاده از hardware interrupt ها هم وجود نداره ( int‌ ) . ویندوزهای 32 بیتی از حالت Protected Mode پردازنده استفاده میکنن بنابراین وقتی یک کد User Mode مینویسی چون در Ring3 اجرا میشه نمیتونه به وقفه ها دسترسی داشته باشه . معنی اش این است که اساسا" در ویندوز برنامه های سطح کاربر دسترسی به وقفه ها ندارن . برای دسترسی به وقفه ها یا باید کدتون در Ring0 اجرا بشه ( یعتی High Privilege باشه ) که یعنی باید کرنل درایور بنویسید یا با استفاده از ntvdm از حالت داس شبیه سازی شده ای که داخل ویندوز وجود داره برای اجرای برنامه های قدیمی داستون استفاده کنین .

اگر مشغول پاس کردن اسمبلی هستین و با فهمیدن این مفاهیم بدیهی مشکل دارین علتش بی سوادی استادتون و کم بودن منبع در مورد اسمبلی 32 بیتی و ساختار ماشین و ...مسائلی از این دست هستش .

illegalyasync
پنج شنبه 11 مرداد 1386, 23:22 عصر
تا اونجایی هم که وقفه ها اجرا میشن سیستم عامل بهتون لطف کرده حال داده یه جورایی یه دسترسی الکی به جدول وقفه الکی که اونم ادرس واقعی رو نداره داده

این سیستم عاملی که در موردش توضیح دادی رو من میشناسم ! اسمش OSOS هستش !
Oskol OS :لبخند::لبخند:

سیستم عاملهای عادی که ما میشناسیم الکی جدول وقفه تولید نمیکنن و آدرس غیر واقعی به کسی نمیدن که طرف بره و سرش گرم باشه و حالشو ببره پسر بابا :لبخند:

راهنمای برنامه نویسی سیستم اینتل 32 بیت رو از سایتش بگیر و بخون ؛ معنی Real Mode و Protected Mode رو که بفهمید نصف مشکلات اسمبلیتون حل میشه ! بعدش میتونین به استادتون بگین سر کلاس به شاگردا بگن که چون بی سواد بوده و هنوز داره همون اسمبلی 16 بیتی تحت داس که جزوه هاش رو از زمان دانشجوئی خودش داره تدریس میکنه باید کدهاتون رو روی داس اسمبل و اجرا کنین و بعدش سواد اسمبلیتون رو بریزین دور چون دیگه کسی از سیستم عامل Real Mode 16 بیتی استفاده نمیکنه و معماری سیستمهای 32 و 64 بیتی خیلی متفاوت هست

:چشمک:

mountainking
شنبه 13 مرداد 1386, 14:13 عصر
برای اونهایی که واردن خیلی واضحه که "حال" دادن یعنی تهیهء چیزی که از توقعات بیشتر باشه! و این یعنی تهیهء قطعه ای در سیستم عامل برای اجرای اون چیزی که مال این سیستم عامل نیست! و این یعنی یه پروسه ای در ویندوز برای اجرای برنامه های طراحی شده برای real mode تحت خودش! که خیلی مکانیزم مطمئنی نیست! پس یه چیز "الکیه " و فقط دل خوش کنکه! illegallyasync این رو بدون که منظورم از "الکی" اینه که "یه چیز قابل اطمینان نیست". و خوب میدونی که این توان اجرای تحت ویندوزه برنامه های مذکور یه چیز "الکیه" و به همین دلیل در بعضی سیستمها جواب میده و در برخی جواب نمیده!

illegalyasync
شنبه 13 مرداد 1386, 14:54 عصر
خوب میدونی که این توان اجرای تحت ویندوزه برنامه های مذکور یه چیز "الکیه" و به همین دلیل در بعضی سیستمها جواب میده و در برخی جواب نمیده!

ما در منطق سیستم عامل "چیز الکی" نداریم . همانطور که تو صفحه قبلی نوشته شده و کاملترشو میتونی تو همون راهنمائی که گفتم بخونی وقتی از ویندوز 32 بیتی استفاده میکنی و کدت user mode هستش در واقع در ring 3 اجرا میشه پردازنده در حالت Protected mode هست ! real mode تحت خودش یعنی چی ؟ Protected mode و real mode دو وضعیت CPU هستن نه سیستم عامل ! بنابراین وقتی CPU در وضعیت PM هستش نمیتونه کد RM اجرا کنه . برای تغییر وضعیت به RM باید کد Privileged اجرا بشه که برای اینکار اون کد باید در ring 0 اجرا بشه . در ویندوز فقط درایورها در ring 0 اجرا میشن . پس اگه بخوام برات خلاصه کنم برای هندل کردن اینتراپت تحت ویندوز باید درایور نوشته بشه . در کل درایورها رو به همین دلیل مینویسن !! و این مسئله به منطق طراحی سیستم عامل مربوطه و ساختمان ماشین . چیز "الکی" نیست که یه جا اجرا بشه و یه جا نشه

Inprise
شنبه 13 مرداد 1386, 15:59 عصر
یعنی یه پروسه ای در ویندوز برای اجرای برنامه های طراحی شده برای real mode تحت خودش! که خیلی مکانیزم مطمئنی نیست! پس یه چیز "الکیه " و فقط دل خوش کنکه!

چنین چیزی وجود خارجی نداره که بخواد واقعی باشه یا الکی . اساسا روی User Mode جدول وقفه وجود نداره . چیزی بنام وقفه وجود نداره . اصلا این مفهوم وجود نداره .

mountainking
دوشنبه 15 مرداد 1386, 08:06 صبح
چنین چیزی وجود خارجی نداره که بخواد واقعی باشه یا الکی . اساسا روی User Mode جدول وقفه وجود نداره . چیزی بنام وقفه وجود نداره . اصلا این مفهوم وجود نداره .

ok ok ok . درست. خوب توضیح بده دسترسی به مثلا int 3 چطور در یه اپلیکیشن امکان پذیره؟ تا . . .

illegal تو میگی:
چیز "الکی" نیست که یه جا اجرا بشه و یه جا نشه.

من میگم:
ببین همیشه تو طراحی نرم افزار شرکتها یه چیزایی رو قول میدن و یه چیزایی رو ادعا میکنن و یه چیزایی رو پیاده میکنن و یه چیزایی رو میفروشن! همهء این "یه چیزایی" مرحله به مرحله از میزان اعتماد به چیزی که نهایتا به دستت میرسه کم میکنن. در ضمن همیشه یه راهی توی تولید نرم افزار در نظر گرفته میشه که بعضی چیزها معلوم نشه که نهایتا چیه و بعضی چیزها طوری جلوه داده بشه که انگار شاهکاره! و شرکتها تلاش میکنن کاربر رو قانع کنن که چیزی رو که اونا پیشنهاد کردن بهتر از چیزیه که دیگران فروختن! و این یعنی هل دادن کاربر به سمت استفاده از استانداردهای تعریف شده توسط اونها.( توجه کن وقتی میگم کاربر یعنی هر کسی که به واسطهء هر مکانیزم یا ساختاری از سیستم استفاده میکنه ویا تحت استانداردهای سطح بالا سیستم رو دیولوپ میکنه. کسی که تهیه کنندهء استاندارده ویا دیولوپ کنندهء سیستم در سطوح پایینه "کاربر" نیست). اینجاس که یه چیزه "الکی" معنی پیدا میکنه. چون شرکت با ارائهء دست و پا شکستهء یه چیزی که خودش میخواد معادل اون چیز رو جا بندازه سعی به اثبات غیر اصولی بودن چیزی میکنه که مجبوره ارائه بده ولی دوست داره اون رو با مال خودش عوض کنه. در این شرایط بعضی چیزا به قسمتهای آنداکیومنتد اضافه میشه و بعضی چیزها پررنگ میشه. و من هروقت با یه چنین چیزایی برخورد میکنم چه جزو قولها باشه چه جزو ادعاها باشه چه جزو چیزایی که قراره جایگزین بشه و . . . چون از نظر من غیرقابل اطمینانه "الکیه". ok?. البته تابلوئه که الان بازم تو و اینپرایز داد و هوار را میندازین که ای وای دانش بشری با جملات هشو بی معنی چه بکنه! ای وای اینایی که میگی هیچ جا نیست! ای وای چرا اراجیف میگی! ای وای پس فلان و بهمان چی میشه و . . .. دیگه ببخشید اگه من دوست ندارم اصولی حرف بزنم!!!

illegalyasync
دوشنبه 15 مرداد 1386, 09:35 صبح
مسائلی که گفتی شاید گاهی در بیزینس نرم افزار درست باشن
اما اصلا ربطی به بحثی که الان میکنیم ندارن چون مسئله Protected mode و Real mode و مدیریت حافظه و مدل دسترسی به سخت افزار جزو مسائل خیلی ابتدائی و زیرساختی ساختمان ماشین و طراحی سیستم عامل هستن . تو نمیتونی با یه بحث عمومی در مورد فریب دادن مشتری و امکاناتی که در سیستم عامل وجود نداره و ......( که ممکنه در جای دیگه ای صحیح باشه ) یه مسئله خیلی پایه رو ندیده بگیری .

دوست من . علت حرفهائی که میزنی اینه که اطلاعاتت در مورد موضوعی که دربارش حرف میزنیم خیلی خیلی کمه . باور کن اگر یه مقدار خیلی کمی در مورد IA32 مطالعه کنی خودت متوجه میشی این بحث چقدر بدیهی و ابتدائی هستش و اصلا جای گفت و گو نداره .
همونطور که اینپرایز گفتش مسئله ما این نیستش که وجود دسترسی به سخت افزار و اینتراپت و .... بقول تو "الکی" یا "غیر قابل اعتماد" باشه ......مسئله این هستش که اصلا این ماجرا مفهوم نداره ! بی معنی هستش ! نه مایکروسافت نه هیچ کس دیگه ای نمیتونه در حالت پراتکتد مود کدی که دسترسی به سخت افزار داره به تو بده ! نه حالا و نه در آینده ! میدونی چرا ؟ چون که سخت افزار یا ماشین یا همون معماری IA32 رو اصلا دیزاین کردن که این اتفاق نیفته ! یعنی اصلا چنین چیزی وجود نداره ! ده سال دیگه هم وجود نداره . صد سال دیگه هم روی این معماری وجود نداره . چون نباید وجود داشته باشه .

Younes
دوشنبه 15 مرداد 1386, 09:42 صبح
سلام
بعضی از شما بزرگواران در بعضی از پیامهایتان از بیسوادی اساتید و ارائه درس اسمبلی منسوخ شده و غیره صحبت کرده اید میخواستم اگر اشکالی ندارد سوال کنم شما کدام دانشگاه در س میخوانید و استاد اسمبلی تان چه کسی است و آیا این مطالب را برای درس ساختمان و زبان ماشین ارائه میکنند ویا تحت عنوان دیگری ؟ چون به ما هم اسمبلی 8086 را ارائه کرده اند میخواهم اطلاعات اضافه تری داشته باشم.

illegalyasync
دوشنبه 15 مرداد 1386, 10:06 صبح
استاد و دانشگاه رو ول کن
معماری 8086 مال بیست سال قبله ! اگر میخای اسمبلی رو بر اساس ماشینهای امروز و سیستم عاملهائی که بر اساس اونها طراحی شدن یاد بگیری باید IA32 و AMD64 رو یاد بگیری . هر کدومشون یه راهنمای خیلی خفن تو سایتشون دارن . وقتی هنوز تو دانشگاه ها اساتید بی سواد دارن 8086 روی داس 16 بیتی Real Mode درس میدن نبایدم از بچه ها انتظار داشته باشیم تفاوت RM و PM و مسائل حافظه و دسترسی به سخت افزار و .....رو خوب بفهمن

mountainking
دوشنبه 15 مرداد 1386, 10:06 صبح
مسائلی که گفتی شاید گاهی در بیزینس نرم افزار درست باشن
اما اصلا ربطی به بحثی که الان میکنیم ندارن چون مسئله Protected mode و Real mode و مدیریت حافظه و مدل دسترسی به سخت افزار جزو مسائل خیلی ابتدائی و زیرساختی ساختمان ماشین و طراحی سیستم عامل هستن . تو نمیتونی با یه بحث عمومی در مورد فریب دادن مشتری و امکاناتی که در سیستم عامل وجود نداره و ......( که ممکنه در جای دیگه ای صحیح باشه ) یه مسئله خیلی پایه رو ندیده بگیری .

دوست من . علت حرفهائی که میزنی اینه که اطلاعاتت در مورد موضوعی که دربارش حرف میزنیم خیلی خیلی کمه . باور کن اگر یه مقدار خیلی کمی در مورد IA32 مطالعه کنی خودت متوجه میشی این بحث چقدر بدیهی و ابتدائی هستش و اصلا جای گفت و گو نداره .
همونطور که اینپرایز گفتش مسئله ما این نیستش که وجود دسترسی به سخت افزار و اینتراپت و .... بقول تو "الکی" یا "غیر قابل اعتماد" باشه ......مسئله این هستش که اصلا این ماجرا مفهوم نداره ! بی معنی هستش ! نه مایکروسافت نه هیچ کس دیگه ای نمیتونه در حالت پراتکتد مود کدی که دسترسی به سخت افزار داره به تو بده ! نه حالا و نه در آینده ! میدونی چرا ؟ چون که سخت افزار یا ماشین یا همون معماری IA32 رو اصلا دیزاین کردن که این اتفاق نیفته ! یعنی اصلا چنین چیزی وجود نداره ! ده سال دیگه هم وجود نداره . صد سال دیگه هم روی این معماری وجود نداره . چون نباید وجود داشته باشه .


کاملا تابلوئه که با این وضع حرف زدن من گیر بدید که با ... آشنا نیستم. عزیزم هستم. مسلمه که اگه خودمو خفه کنم به گرد پای اینپرایز و ایلگال نمیرسم. ولی تمام این چیزایی که شما میگید رو میدونم و با هاشون آشنا هستم. حد اقل اونقدری آشنا هستم که این چیزایی که که شما میگید رو بدونم. عزیز میدونم که IA32 چه معماری داره و چرا اینطوری طراحی شده ولی لطف کن برو رفرنس های مایکروسافت رو از زمان windows 3.0 (شروع PM ) تا حالا نگاه بنداز. ببین چه طور دسترسی برنامه نویس رو بر اساس نظر خودش دسته بندی کرده. یه چیزی رو که نیاز نیست چون خودش تهیه کرده به زور میخواد بقبولونه که درسته و عکسش(دقیقا در راستای طراحی درایورها و دسترسی به ایتراپشنها و سرویسها). یه کتاب بسیار قدیمی ولی جالب هم بود حالا پیداش میکنم بخشی از متنشو اینجا میزارم. بعد همون چیزایی که توش گفته رو تو روی windows xp تست کن. میبینی همونیه که تو 3.1 بود( بازم دقیقا در راستای طراحی درایورها و دسترسی به ایتراپشنها و سرویسها)!!!

illegalyasync
دوشنبه 15 مرداد 1386, 10:09 صبح
خیلی خوب . اگر میدونی در مورد چی حرف میزنی که قطعا داری حرفای منو تائید میکنی

اگرم اشتباه میکنی که خیلی راحت میتونی اینو خودت تست کنی و بفهمی . هر چی داری و دم دستته کپی کن اینجا هر نمونه کدی هم داری بذار اینجا تا مسئله روشنتر بشه

Inprise
دوشنبه 15 مرداد 1386, 10:11 صبح
لطفا سعی کنید اگر هم بحثی هست فنی نگهش دارید و مجادله و کل کل نکنید .

Inprise
دوشنبه 15 مرداد 1386, 10:32 صبح
ok ok ok . درست. خوب توضیح بده دسترسی به مثلا int 3 چطور در یه اپلیکیشن امکان پذیره؟ کامپایلرها برای INT 3 آپکد CC رو تولید میکنن که یک جور توافق هست تا دیباگرها بتونن Soft BreakPoint رو پیدا کنن ( و اصلا بهش میگن Trap ) چون استفاده از Hardware breakPoint ها همیشه جوابگو نیست . این مسئله با Interrupt Handling که بحث جاری این تاپیک است فرق میکند و کاملا بی ربط هستند

SMRAH1
چهارشنبه 31 مرداد 1386, 03:15 صبح
سلام...

;change into graphic mode :
MOV AH,00H
MOV AL,13H
INT 10H


[/code]

سلام
تا اینجا رو خوندم ولی کسی به دلیل اصلی اشاره نکرده.
در واقع دلیل اصلی اینه که برنامه می خواهد به مود 256 رنگی برود ( MOV AL,13H).
این فقط وقتی انجام میشه که کارت گرافیک از نوع VGA پشتیبانی کنه (هیچ ربطی به ویندوز یا سیستم عامل هم نداره - روی سیستمهای زیادی که XP رو راحت بالا میارن هم ممکنه نباشه چون تقریبا از دور خارج شده)
بهتره از مود 16 رنگی یعنی از حالتهای 11H به قبل استفاده کنی.
من قبلا برنامه ای نوشتم که قبل از نمایش صفحه انتخاب سیستم عامل،پرچم ایران رو نشون بده.البته در مود 256 رنگی .اول دیدم روی بعضی کامپیوتر ها جواب نمیده و بعدا نکته بالا رو فهمیدم.(توجه کنید که هیچ ربطی به کارت گرافیکی شما نداره و فقط از VGA که یک تکنولوزی جدید در یال های 1990 بوده دیگه استفاده نمیکنه)


اگر توضیح بیشتر هم می خواهید بگید تا بنویسم
موفق باشید

illegalyasync
جمعه 02 شهریور 1386, 10:41 صبح
در واقع دلیل اصلی اینه که برنامه می خواهد به مود 256 رنگی برود ( MOV AL,13H).

نه ! دلیل اصلی همون هست که من توضیح دادم . ربطی به مد و رنگ نداره
مسئله ای که درباره رنگ و ساپورت وی جی ای میگی درسته اما ربطی به این بحث نداره

mountainking
یک شنبه 11 شهریور 1386, 12:37 عصر
ببخشید سوال غیر فنی میپرسم!
آقای ایلگالی منظورتون از "دلیل اصلی همون هست که من توضیح دادم" real mode و protected mode هستش و تفاوتها و ... این دو؟