پیوند و اجرای اسمبلی

Arman_BTC

New Member
سلام دوستان
من تو اجرا گرفتن از برنامه های اسمبلی خیلی اشکال دارم .یعنی در واقع چیزی اصلا نمی دونم.برنامه های micro assembler,Masm.611,Masm32 assembler0.6,turbo assembler2,3,4,5 رو دارم به نظر شما کدوم رو استفاده کنم
اگه میشه مراحل نصب و لینک .کلا اجرا گرفتن رو برام توضیح بدید.مثلا تو Micro Assembler وقتی روی debug کلیک میکنم یه صفحه میاد زود هم میره اصلا نمیشه چیزی نوشت.
ممنون میشم اگه راهنمایی کنید.
 

saalek110

Well-Known Member
سلام آرمان جان.
خوبيد؟مشتاق ديدار.
من با tasm راحتم .
شما اول فايل اسمبلي را با پسوند asm بساز. بعد برو به محيط پرومپت داس. بعد بنويس tasm example.asm بعد link example.obj . همين.
البته در پرومپت داس بايد وارد پوشه اي بشويد كه سورس و tasm و link كنار هم موجود است.
من الان فايل زير را با پسوند asm ذخيره كردم و با روش بالا كامپايل كردم. بي مشكل بود.
کد:
.model small

.stack
.code

test proc

mov ah,2h
mov dl,41h
int 21h

mov ah,4ch
int 21h

test endp

        end test
http://saalek110.250free.com/rars/Tasm.rar
http://saalek110.250free.com/rars/Link.rar

سال 98: دو لینک بالا سوخته. دو فایل شمیمه پست شد. ولی در وندوز 64 بیت کار نمی کند.

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

یک برنامه برای راحت تر کار کردن اسمبلی:
دانلود:
برای دانلود به پست زیر بروید:
نرم افزارهای ساخته شده با دلفی یا زبانهای دیگر
لینک دانلود رزرو کمی پایین تر.
چون ممکنه بخوام آپدیت و رفع اشکال کنم نرم افزار را . بهتره لینک یک جا باشد.

پوشه ای که دانلود می کنید شامل 4 فایل است. که بگذارید کنار هم باشند تا نرم افزار بتواند اجرا شود.

a8.gif


حجم دانلود : 370 کیلو.

تصویر برنامه:

b2.gif

فایل sample.asm موقع اجرای برنامه به عنوان یک نمونه برنامه داخل برنامه باز میشه برای تست اولیه شما.
با زدن دکمه بزرگ ابتدا از کدهای داخل برنامه فایل test.asm ساخته میشه و بعد ازش test.obj و بعد test.exe و بعد هم همان test.exe اجرا میشه و شما می توانید نتیجه اجرا را ببینید.
با وجودی که بین مراحل من مکث هایی گذاشتم. ممکنه یک مرحله نرسه محصول مرحله بعد را تولید کند. دکمه را دو بار بزنید.


چون divshare از سوی دولت بسته شده برای دانلود فایل به این پست مراجعه کنید:
http://saalek110.freeforums.org/post1329.html#p1329
======================
راهنمایی اسمبلی:
فرض کنید نرم افزار بالا نباشد و ما این 3 فایل را داریم:

a6.gif


یعنی سورس اسمبلی و دو تا تبدیل گر خود را.

باید از start در ویندوز xp به All Programs و سپس Accessories رفته و Command Prompt را باز کنید. بعد به پوشه مورد نظر بروید. برای من:
F:\lab

a7.gif

و هدف من از ساختن این نرم افزار این بود که این باز کردن Command Prompt و آن تایپ ها داخل محیط داسی را نکنیم و سریع فایل exe ساخته بشه.

برنامه من همین برنامه بود:
کد:
.model small

.stack
.code

test proc

mov ah,2h
mov dl,41h
int 21h

mov ah,4ch
int 21h

test endp

        end test

در هارد اگر روی exe ساخته شده از کد بالا کلیک کنیم زود بسته میشه.
پس من دو خط کد اضافه می کنم تا برنامه بعد اجرا منتظر گرفتن کلیدی باشد و زود بسته نشود:
کد:
.model small

.stack
.code

test proc

mov ah,2h
mov dl,41h
int 21h
[COLOR="Blue"]
;--------wait for a key
MOV AH,00H
INT 16H
[/COLOR]
mov ah,4ch
int 21h

test endp

        end test

حالا دیگه میشه مستقیم روی فایل در هارد کلیک کرد و نتیجه اجرا را دید.
 

پیوست ها

  • Tasm.rar
    73.2 کیلوبایت · بازدیدها: 0
  • Link.rar
    23.7 کیلوبایت · بازدیدها: 0
آخرین ویرایش:

Arman_BTC

New Member
سلام اقا سالک
شما خوب هستید ؟
راستش من لینک هایی که دادید رو دانلود کردم وقتی روی tasm.exe کلیک میکنم باز یه صفحه باز میشه و زود بسته میشه.
منظورتون از پرومپت داس command prompt?چون من فقط اینو پیدا کردم
ممنون از راهنمایی تون
 

saalek110

Well-Known Member
ممنون.

اين فايلها همين جوري است يعني روي آن كليك كني زود مي آيد و مي رود.
بايد از داخل داس باهاشون كار كني.
از منوي استارت به پروگرم برو. در ويندوز 98 همان جاست در ايكس پي شايد بايد بروي يك قدم جلو تا برسي به ام اس داس پرومپت.
يا نامي شبيه آن.
قربانت.
 
آخرین ویرایش:

saalek110

Well-Known Member
البته در ايكس پي هم همونه . من الان با 98 كار مي كنم و ايكس پي در دسترسم نيست وگرنه مي گفتم. ولي فكر كنم همان كامنت پرومپت باشه كه خودتان پيدا كرديد.
در مورد كدنويسي اسمبلي هم من يه چيزايي بلدم اگر مكانيسمي را طرز كارش را مشكل داشتيد بگيد تا هم فكري كنيم.
 

Arman_BTC

New Member
سلام اقا سالک

ببخشید که وقتتون رو میگیرم.راستش من ویندوز 98 نصب کردم و از طریق دیباگر توMS-DOSو ثبات ها رو دیدم و با هاشون کار کردم.
بعد یه بر نامه نوشتم تو نت پد و با پسوند .asm ذخیره کردم ولی با MASM نتونستم بازش کنم.راستش اصلا نتونستم Micro Assembeler یا trubo Assemblerنصب کنم Micro Assembler که اصلا چیزی به اسم instull نداشت.حالا حتما باید نصب بشن؟یعنی از طریق دیباگر داس نمیشه برنامه نوشت و اجرا گرفت حتما باید کار هایی که گفتین انجام داد؟
اگه میشه بیشتر توضیح بدید.یعنی بعد از اینکه من فایلی رو که با پسوند .asm ذخیره کردم باید کجا بازش کنم؟
تو کتاب مزیدی یه چیزایی توضیح داده ولی من درست نفهمیدم.
ببخشید اگه سوالام خیلی ابتدایی اخه من هیچ اطلاععی در مورد اسمبلی ندارم.
ممنون.
 

saalek110

Well-Known Member
سلام.
زياد نفهميدم مشكل شماچيست. حالا توضيح مي دهم شايد درست فهميده باشم.
ببينيد همه كار را ما در يك اديتور انجام مي دهيم.
من همين الان تلاش كردم با نت پد فايل با پسوندasm بسازم ولي نشد. همه با پسوند txt ذخيره شد. شايد بشه ولي من نتوانستم. روي فايل كليك راست كنيد و پراپرتي بگيريد تا ببينيد پسوندش چيه. به نظرم از يك اديتور استفاده كنيد.
جالبه الان با توربو سي 3 توانستم فايل را با پسوند asm بسازم.

بعد كه فايل با پسوند asm ساختيد با tasm و link كامپايل كنيد. ديگه باز كردن در اين برنامه ها معني نداره. فقط اينها تبديل كننده اند و كارها همه در اديتور انجام ميشه.
در همين تالار تاپيكهاي سنجاق شده بالا در تاپيك ((ابزار های مورد نیاز -))
http://forum.majidonline.com/showthread.php?t=42630
در پست 5 :
http://forum.majidonline.com/showpost.php?p=336812&postcount=5
لينك دانلود كدوايز هست.
من هم اسمبلي در اين كار مي كنم هم سي هم php . ازش راضيم. كد رجيستر هم همراهش هست.
در ديباگ ميشه كار كرد. Debug . ولي فرض كن شما بخواهيد يك خط وسط خطها اضافه كني. مجبوري همه را از اول بنويسي. چون نميشه اينتر كرد و وسطش نوشت . با اضافه كردن يك خط شماره خط ها همه عوض ميشه و بايد برنامه از اول بازسازي بشه.كپي پيست نداريد در اين حالت . و فقط بايد فايل com بسازيد.
البته من خودم علاقه دارم در ديباگ كار كنم چون كار ملموسه ولي اين شماره خطها نمي گذارد وقتي برنامه بزرگ بشه.
در اديتور همه اين كارها را مي شود كرد. ولي كدهايي كه در اديتور مي نويسيم و كدهايي كه در ديباگ مي نويسيم يكي است.
فقط يك سري راهنما مي گذاريم اول و آخر كدها براي راهنمايي كامپايلر. اون قالب را اگر خواستيد براتون مي فرستم. همه جا هم پيدا ميشه.
يك راه ديگه اينه كه يك asm وسط برنامه سي بنويسيد و شروع كنيد به نوشتن اسمبلي.سينتكس را در هاردم دارم خواستيد بگيد بفرستم. شايد اين راه ساده تر باشه.
راههاي مختلفي هست.
يكسري اموليتور هم هست كه شبيه سازي مي كند رجيسترها و پشته را كه مثل ديباگ مي كنه محيط را و از نظر بعد آموزشي خيلي خوبه. ولي برخلاف ديباگ ويندوزي است محيط. و دلچسب تره كار. اگر خواستيد بگيد كمك كنم براي پيدا كردنشان. الان لينكي ندارم.
برنامه هايي كه گفتيد هم دارم ولي باهاشون كار نكرده ام. اگر خواستيد بگوييد باهاشون ور بروم شايد به جايي برسم. چون نياز نبوده هايشان كرده ام.
خلاصه راههاي مختلفي وجود داره براي كار . انتخاب كنيد تا من هم همراه شما بيام جلو.
كتاب مزيدي راهم تعريفش را زياد شنيده ام. اگر شد توضيحاتش را نقل كنيد تا اگر توانستم توضيح بدهم.
موفق باشيد.
 
آخرین ویرایش:

Arman_BTC

New Member
اقا سالک از توضیحاتتون ممنون تازه داره یه چیزایی دست گیرم میشه
در مورد نت پد حق با شماست ولی از اونجایی که یادم بود که در پرشین تولز اسمبلی هم کمی بحث شد پیداش کردمو خوندم توی این ادرس http://forum.persiantools.com/showthread.php?t=37385&highlight=اسمبلی
پست شماره 9 شما گفته بودید که در نت پد هم میشه من هم روی همین حساب توی نت پد نوشتم.اون 9 قسمت رو هم دانلود کردم ولی ویندوز اونارو نشناخت فکر میکنید اگه از ویندوز 98 دانلود کنم درست میشه اخه من الان از xpدانلود کردم.
اون یکی لینک هم دلیت شده بود.
در مورد دیباگ چرا من وقتی برنامه مینویسم از همه چیز ایراد میگیره.مثلا همون اول برنامه که می نویسم
stseg segment اینتر که میزنم خطا میگیره.
راستش در مورد برنامه هایی که شما گفتین من اطلاعات زیادی ندارم هر کدوم که راحت تره از نظر شما بگید من توی اون محیط کار کنم.
یه قسمت از کتاب مزیدی به این صورت:
فرض بر این است که برنامه های MASM LINKو DEBUGدر دیسک گردان Aو برنامه زبان اسمبلی در دیسک گردان B می باشد.
بعد یه قسمت از برنامه رو چاپ کرده به این صورت:
کد:
ََA>MASM B:MYFILE.ASM
Object filename[B:MYFILE.OBJ]:B:<CR>
Source Listing[NULL.LST]:B:MYFILE.LST<CR>
Cross-reference[NULL.CRF]:<CR>
47962+413345 Bytes symbol spase free
0 warning Errors
0 Severe Errors
A>LINK B:MYFILE.OBJ<CR>
البته ادامه داره ولی چیزایی که کامپیوتر چاپ میکنه.
اگه اشتباه نکنم MYFILE فایلیه که در ادیتور نوشته و با با پسوند ASM ذخیره کرده.ولی این کدها رو کجا نوشته؟توی دیباگ؟بعد این <CR> منظورش چیه؟
شما برنامه Micro Assembler 4.0 رو دارید؟اگه میشه کار کردن با اینو بگید.
فعلا سوالام تموم شد.
باز هم ممنون
 

saalek110

Well-Known Member
راجع به نت پد نمي دونم اون موقع كه اونجا نوشتم چك كرده بودم يا نه ولي الان گفتم باسعي مختصر نتوانستم با نت پد فايل با پسوند asm بسازم.

در مورد اون 9 فايل بايد هم نشناسه. چون تكه هاي فايلند در كنار قطعه 9 يك فايل هست كه اسمش را فكر كنم چسب گذاشتم كه اين قطعات را ميشناسه و بهم وصل مي كنه. قطعه 9 زيپ است فكر كنم كه اول بايد زيپ آن راباز كنيد تا قطعه 9 و فايل چسب ازش بياد بيرون ولي قضيه ماهها پيشه. اگر مشكل حل نشد بگو تا خودم دانلود كنم و بعد توضيح بدهم. اين قطعات با winnc از فايل اصلي ساخته شده.

اون يك لينك هم كه مي دانيد چرا ديلت شده . چون رپيدشير يك ماه نگه مي داره. الان مي روم آن پست را اديت مي كنم تا وقت كسي تلف نشود.

بقيه قسمتها را الان مي خوانم و جواب مي دهم.
-------------------------
ادیت ماهها بعد: 9 فایلی موجود نیست انگار. یک تکه است. انگار از بین رفته و دوباره در رپیدشیر آپلود کرده ام.
 

saalek110

Well-Known Member
اولا من بايد بفهمم منظور شما از ديباگ چيه . نمي خواهم سو تفاهم بشه. چون خيلي نرم افزارها با اين اسم وجود دارد.
حالا خودم مي گم منظورم از ديباگ چيه.
در ويندوز 98 با زدن استارت و انتخاب گزينه run از همان منوي بالارونده استارت و نوشتن debug و زدن اينتر ميشه به اون رسيد. يا در پرومپت داس كه در پستهاي قبلي گفتم چه طوري بهش برسيد ميشه در هر پوشه اي كه هستيم بنويسيم bebug و اينتر كنيم و وارد محيط ديباگ بشيم كه با نمايش يك منهاي چشمك زن معلوم ميشه داخلش هستيم و با نوشتن حرف q و زدن اينتر ازش خارج مي شويم.
= = = =
منظور من از ديباگ اين بود. اگر منظور شما چيز ديگري بود بنويسيد.كه فكر كنم همين باشه.
حالا برسيم به بحث error :
در محيط ديباگ فراموش نكنيد كه فقط دستورات خالص اسمبلي مي خواهد نه راهنماهايي كه براي كامپايلره. شما داريد راهنماهاي كامپايلر را برايش مي نويسيد. كامپايلري فرض كنيد اينجا وجود نداره. البته ديباگ هم نوعي كامپايلره ولي اون راهنماها را نمي خواهد. دستورات اسمبلي فقط بنويسيد. مثل mov ah,02 و int 21 و غيره.

راجع به توضيحات كتابكه گفته ديسك گردان : يك پوشه بساز و tasm و link را بگذار داخلش و هر سورس اسمبلي با پسوند asm هم ساختي بگذار كنارشان. فعلا همه در يك پوشه. اين ميشه ديسك گردان شما. يعني اين پوشه. حالا در هر درايوي باشه . c يا f فرقي نمي كنه. ولي چون مي خواهيد با پرومپت داس برويد tasm و link رااجرا كنيد نزديك به root درايو بگذاريد كه مدام لازم نباشه با cd directoryname وارد پوشه ها بشويد. كار كردن داخل داس سخته پس پوشه را نزديك root بگذار. مثلا در d: بگذار. چون c: يكسري خرده فايل هميشه توشه كه وقتي dir بزنيد ليست طولاني ميشه.

= == = =
راجع به اين چيزهايي كه داخل تگ كد مرقوم فرموديد بايد بگم كه وقتي tasm example.asm بزنيد هم همين ها مياد. هر جا چيزي خواست اينتر كنيد. چه در مورد tasm و چه در مورد link اين طوري ديفالتش برگزيده ميشه كه مناسب است.
بعدا مي فهميد كه اين هاچيزهاي ساده اي است. حتي مثل انتخاب اسم فايل.
بله myfile.asm همونيه كه من example.asm نام بردم. اين كدها را در پرومپت داس نوشته. اين كدها همان است كه گفتم بنويسيد tasm example.asm . جاي ديگري وجود نداره. در ديباگ اينها را بنويسيد error ميده.
منظور از ميكرو اسمبلر اگر masm است كه زياد با tasm فرقي نداره. Masm چون زياد گير ميده من با tasm كار مي كنم. ولي اگر منظورتان از ميكرو اسمبلر چيز ديگه اي است بفرماييد. البته من به جز tasm با هيچ كدام كار نكردم. مثلا masm11 را دارم ولي اصلا باهاش كار نكردم. يكي دو تا كامپايل باهاش كردم البته.
كلا زياد روي اينها وقت نگذاريد. .
براي اين كه منظور من را بفهميد بايد بدانيد كه اگر در اديتور يك سري كد بنويسيد و با tasm كامپايل كنيد و بعد برويد با ديباگ ببينيد مي بينيد كه كاري كه شده اينه كه فقط راهنماها حذف شده و كد خالص اسمبلي برجامونده. البته تنظيم قطعه ها segment توسط راهنماها انجام ميشه ولي كدي كه در ديباگ مي بينيد فقط همون كدهاي خالص اسمبلي است. منظورم از كد خالص اسمبلي همان مثلا mov ah,02 و int 21 و غيره است.
.
 
آخرین ویرایش:

Arman_BTC

New Member
سلام اقا سالک
من تو TC 3.0کد ها رو نوشتم و توی همون پوشهای گذاشتم که masm بود شکل ظاهریش شبیه همون نت پد میشه ولی type file :َُASM fileبوقتی تو پرومپت داس مینویسم و اینتر میزنم Bad Command مینویسه اینو باید چیکار کنم؟
ممنون
 

saalek110

Well-Known Member
دستوري كه در پرومپت داس نوشتيد را بنويسيد.
منظورتان از شكل ظاهري را نفهميدم. فكر كنم در ويندوز ايكس پي هستيد. چون در ويندوز 98 كه فايلهاي تكست با فايلهايي كه با چيزي باز نمي شوند كاملا فرق دارند از لحاظ آيكون. ايكس پي را الان ياد نيست.
-------
براي احتياط وقتي داخل پوشه خود شدي يك dir بگير و پسوند فايل را مطمئن شو ولي فكر كنم درست ساختي.
 
آخرین ویرایش:

saalek110

Well-Known Member
كدوايز را آپلود كردم. حجم 900 كيلو. يك فايل است و تكه تكه نيست.
موقع ذخيره با اين اديتور هم اسم فايل را بايد داد هم بعد نقطه پسوند را بايد نوشت. خيلي ساده است.
با اين اديتور به راحتي ميشه با هر پسوندي ذخيره كرد و محيطش هم خلوت است و براي كدهاي حجيم خوبه.
كد رجيستر هم دارد كه راحت تر است كه رجيستر كنيد تا يك پنجره هميشه موقع باز كردن اديتور نيايد.
اگر دانلود بي نقص بود بگوييد تا در تاپيك نرم افزارهاي مورد نياز هم لينكش را بگذارم.
=====================
ادیتور کدوایز را مجددا آپلود کردم. به تاپیک ابزار های مورد نیاز - عمومی مراجعه کنید.
=====================
اين هم اديتور ديگري است كه ديشب دانلود كردم و هنوز باهاش كار نكردم.
سفارش يكي ازدوستان براي php است:
با تشكر از ايشان.

http://www.inet.hr/~edkirin/ConTEXTsetup.exe

حجم : يك مميز 6.
 
آخرین ویرایش:

Arman_BTC

New Member
ممنون
لینک اولی اررور میداد چند بار امتحان کردم ولی دومی رو دانلود کردم.اگه میشه طرز کارشو بگین چون من وقتی با پسوند asmذخیره میکنم باز به صورت نت پد saveمیشه .
تو پرمپت داس همون چیزی که شما گفتید نوشتم ولی چون از masm استفاده کردم بجای tasmنوشتم masm.
باز هم ممنون
 

saalek110

Well-Known Member
متن خطا و كد برنامه خود را بي زحمت بنويسيد.
ممنون از امتحان لينكها.
با اديتور لينك دوم الان كار مي كنم و خبرمي دهم.
.
-------------------------
موضوع دوم:

كامپايلر tasm با masm با هم فرقهايي دارند. يا با tasm كار كنيد يا masm را اتچ پست كنيد. يا جايي آپلود كنيد. يا از جايي كه دانلود كرده ايد لينك بدهيد.
اين طوري با هم هماهنگ ميشيم. هر چند من با masm مشكل داشتم و زياد خطا ميداد و بايد كلي وقت بگذارم و از سايتش طريقه كار كردن باهاش را ياد بگيرم.
 
آخرین ویرایش:

saalek110

Well-Known Member
من الان اديتور را چك كردم .
البته ويندوزم احتمالا خرابش كرده بود. آنيستال و دوباره اينستال كردم.
وقتي از منوي فايل گزينه save as رابزنيد ، در پنجره save كه مي آيد ، در انتخاب save as type (درست زير قسمت نوشتن اسم فايل) خوشبختانه گزينه .asm هم داره كه براحتي مي توانيد آن را انتخاب و استفاده كنيد.

بعد ساختن فايل با پسوند asm با اين اديتور(به نام context ) با نوشتن tasm myfile.asm درداس پرومپت توانستم فايل را به myfile.obj تبديل كنم. پس فايل درست بود. بعد هم با نوشتن link myfile.obj در داس پرومپت به myfile.exe تبديل كردم و اين فايل exe هم كارش را درست انجام داد. يعني حرف A را چاپ كرد.همان برنامه پستهاي اول را كامپايل كردم.
.
 
آخرین ویرایش:

Arman_BTC

New Member
اقا سالک سلام
واقعا ازتون ممنونم بلاخره تونستم اجرا بگیرم وکلی از مشکلاتم حل شد.
خیلی خیلی ممنون.
 

saalek110

Well-Known Member
سلام . در اسمبلي مهم ترين كار همين اجرا گرفتن است. كه شما ردش كرديد.
بقيه اش مثل همه زبانهاست. يا حتي ساده تر از هر زباني.
من خيلي كدنويسي اش رادوست دارم و اگر خواستيد كدها را اينجا بگذاريد تا با هم تمرين كنيم.
 

Old User

Member
اینم برای علاقه مندان به اسمبلی:wink:

موفق باشید...
 

پیوست ها

  • ASM.rar
    124.2 کیلوبایت · بازدیدها: 103

جدیدترین ارسال ها

بالا