PDA

View Full Version : سوال: چرا این کد نه با MASM اسمبل میشه و نا با NASM ؟



H_afkhami60
شنبه 01 آذر 1393, 15:21 عصر
سلام
کدی که دوستمون توی لینک
http://barnamenevis.org/showthread.php?473628-کمک-در-مورد-رسم-لوزی
گذاشته را می خوام اسمبل کنم اما هم با MASM و هم با NASM خطا میده؟ باید چکار کنم؟ و سوال دیگه اینکه آیا تحت ویندوز میشه کدهایی را که می خواند مد متن را به مد گرافیک تغییر بدهند و روی پیکسل ها مدیریت داشته باشند را اجرا کرد؟ چون ی بار اینکارا انجام دادم توی محیط ویندوز که نشد. بعد ی سی دی بوتیبل ویندوز Me گذاشتم و توی داس تست کردم بازم نشد و کامپیوتر هنگ می کرد. کاری که می خواستم انجام بده تغییر مد متن به مد گرافیک و بعد رسم یک مربع بود. دوستان اگه کسی می تونه کمک کنه. پیشاپیش تشکر می کنم از راهنماییتون .

masoud.8086
شنبه 01 آذر 1393, 17:30 عصر
سلام
كد مشكلي نداره.اون كدي كه من نوشتم تو محيط 8086 اجرا ميشه.حالا اگه ميخواي تو محيط masmاجراش كني بايد يكم تغييرات توش انجام بدي
اول اينكه بياي از دات مدل استفاده كني و ماكرويي كه نوشتمو بياري اول(قبل از تعريف دات مدل) و همچنين اخر برنامه قبل وقفهint21h /ax,4ch بياي وقفه int 21h/ah,01اضافه كن به قسمتاي كه با " رنگ قرمز"مشخص كردم دقت كن و اضافه كن به برنامت.



;;;;;;;;;;;;;;;;;;;;;;;;;
ماكروي تعريف شده
model small.
stack 100h.


data.


x dw 50
y dw 50


code.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
كد هاي برنامه لوزي
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov ah,01
int 21h

mov ax,04ch
int 21h


در مورد سوال دومتم بايد بگم تو مد متني نميشه پيكسل چاپ كرد.اگر ميخواي ي مربع رسم كني داخل مد متني بايد از ي كاركتر كه كد اسكي داره استفاده كني و شكا مربع رو در بياري همچنين ميتوني از وقفه هاي int 21h/ah,02 ,int 10h,ah,13 استفاده كني.
موفق باشي.

H_afkhami60
یک شنبه 02 آذر 1393, 07:19 صبح
مسعودجان تشکر می کنم ازت که جوابمو دادی. اول توضیح بدم که از دیروز که این سوال کردم تا الان به اینترنت دسترسی نداشتم که زودتر ازت تشکر کنم.
تازه اسمبلی را بطور جدی شروع کردم و قبلاً فقط در حد پاس کردن درس، خونده بودم.
اینکه شما فرمودید کدی که شما نوشتید توی محیط 8086 اجرا میشه یعنی چه؟ ی کم توضیح بدید. مگه وقتی با MASM اسمبل می کنی توی ی محیط دیگه اجرا میشه؟
در مورد سوال دومم که دیروز پرسیدم، فکر می کنم شما درست متوجه نشدید. بنده اول با همین وقفه شماره 10، مد را به مد گرافیک تغییر می دهم، اما باز هم نه در محیط ویندوز اجرا میشه و نه در محیط داس (سی دی ویندوز Me بوتیبل). اگه توضیح بدید ممنون می شم.

masoud.8086
یک شنبه 02 آذر 1393, 07:39 صبح
سلام
8086 ي نرم افزار براي نوشتن و اجراي كدهاي اسمبلي بكار ميره كه به مراتب راحتر از محيط داسي masm و... هست.ميتوني از نت دانلود كني و همچنين خطايابي بهتري داره. همچنين فرقي نميكنه توي كدوم محيط اسمبل بشه شما توي محيط masm فقط نتيجه كلي رو ميبيني ولي توي محيط emu 8086 چاپ تك تك پيكسل ها رو مشاهده ميكني.(يعني داره داخل cpu رو برات شبيه سازي ميكنه)
در مورد سوال دومت بايد بگم شما وقتي مد برنامه رو تغيير ميدي و مثلا از متني به گرافيكي بعد كه برنامت تموم ميشه و كنترل به سيستم عامل برميگرده ديگه به اون دسترسي نداري و خود سيستم عامل مدو به حالت اوليه تغير ميده..تنها راه براي اينكار اينه كه بياي برنامه اي كه نوشتي رو مقيم در حافظه كني كه اينم خودش خيلي خيلي سخته..
موفق باشي.

H_afkhami60
یک شنبه 02 آذر 1393, 08:14 صبح
1- آیا توی محیط 8086، امکان دیدن نتیجه برنامه ای که شما برای رسم لوزی نوشتید، وجود دارد؟ 2- اگه آخر برنامه بعد از اینکه شکل مورد نظر ما رسم شد، بیایم و برنامه را مثلاً برای گرفتن یک کاراکتر از صفحه کلید معطل کنیم، باز هم امکان دیدن نتیجه کار وجود ندارد؟ 3- آیا سیستم عامل ویندوز هم از همین مد گرافیک استفاده می کنه یا قضیش فرق داره؟ منظورم اینکه مثلاً ما می خواهیم که یک سیستم عامل طراحی کنیم و می خواهیم که این سیستم عامل دارای ظاهر گرافیکی با کیفیتی مثل ویندوز باشه، آیا همین که ما مد را به مد گرافیکی تغییر دهیم و پیکسل ها را مدیریت کنیم به هدف خود خواهیم رسید؟ اگه لطف کنید به این 3 سوال تک تک جواب بدید ممنون میشم.

masoud.8086
یک شنبه 02 آذر 1393, 08:32 صبح
سوال يك:بله نتيجه برنامه لوزي در 8086 داخل ديدن هست(حتي به صورت پيكسل به پيكسل)
سوال دو:بله داخل 8086 نيازي به معطل كردن برنامه براي گرفتن ي كاركتر نيست(البته بسته به شرايط داره)
سوال سوم:اولا اينكه با اسمبلي نميشه ي سيستم عامل گرافيكي نوشت.(فقط برخي از قسمتاي هسته)و اينكه سيستم عاملي مثل ويندوزو با زباني مثل c ,...نوشتن و بعدشم داخل ويندوز هم مد گرافيكي هست و هم مد پيكسل يعني ويندوز از هر دوي اينا استفاده ميكنه.و همچنين كه عرض كردم شما فقط ميتوني وقت اجراي برنامت مد سيستمو هر جور كه دوست داري تنظيم كني بعد اون مد سيستم به حالت اوليه برميگرده.
موفق باشي.

H_afkhami60
یک شنبه 02 آذر 1393, 08:44 صبح
مسعود جان منظورم از سوال سوم این بود که فرض کنید اصلاً سیستم عاملی مثل داس و ویندوز و ... هنوز اخترع نشده و ما خودمون می خواهم ی سیستم عامل طراحی کنیم. اگه ما بیایم بریم تو مد گرافیکی، می تونیم یک محیطی را طراحی کنیم که گرافیکش مثل ویندوز خیلی تمیز و با کیفیت باشه؟

masoud.8086
یک شنبه 02 آذر 1393, 13:57 عصر
نه هر چقدم تو محیط گرافیکی خوب کار کنی هیچوقت نمیتونی با اسمبلی اون کیفیتی که میگی رو تولید کنی..
موفق باشی.

xman_1365_x
پنج شنبه 06 آذر 1393, 10:22 صبح
مسعود جان منظورم از سوال سوم این بود که فرض کنید اصلاً سیستم عاملی مثل داس و ویندوز و ... هنوز اخترع نشده و ما خودمون می خواهم ی سیستم عامل طراحی کنیم. اگه ما بیایم بریم تو مد گرافیکی، می تونیم یک محیطی را طراحی کنیم که گرافیکش مثل ویندوز خیلی تمیز و با کیفیت باشه؟

دوست عزیز برای نوشتن سیستم عامل گرافیکی مثل ویندوز باید معماری سیستم رو مطالعه کرد نباید تصویر ذهنی شما فقط دستورالعمل های اسمبلی باشه باید بدونید پردازنده چطور با محیط خارج از خودش ارتباط برقرار میکنه و... ،برای نوشتن یه محیط گرافیکی باید یه درایور VBE (http://en.wikipedia.org/wiki/VESA_BIOS_Extensions)بنویسید که برین تو این مد(البته Bochs (http://wiki.osdev.org/Bochs_VBE_Extensions)آمادش رو نوشته میتونید استفاده کنید) بعد با استفاده از openGl میتونید طراحی دوبعدی و سه بعدی داشته باشید.
موفق باشید