ورود

View Full Version : خبر: کامپایلر خط فرمان برای کاربران اسمبلی



tdkhakpur
چهارشنبه 14 بهمن 1388, 21:23 عصر
سلام به همگی.
اکثر دوستان داخل کامپایل برنامه های اسمبلی مشکل داشته و یا هماهنگی جهت پاسخگویی نسبت به سوالات همدیگر ندارند لذا کامپایلر خط فرمان زیر را برای کامپایل برنامه های اسمبلی بصورت exe و یا com به کار ببرید.
طرز استفاده خیلی راحته - پس از دانلود بسته میتوانید بصورت زیر برنامه com یا exe را در خط فرمان خودتان بسازید.


مثال
demo.asm فایل مورد نظر شما
ce demo اینتر
cc demo اینتر

دو بچ فایل ce برای ساخت exe و cc برای ساخت فایل com به کار برده شود(توجه داشته باشد که اسم فایل را بدون پسوند asm به کار ببرید)
از مدیران محترم هم اگر مشکلی از لحاظ سایت برایشان وجود نداشته باشد این تاپیک را در معرض عموم قرار بدید تا احتیاج به بروز رسانی نداشته باشد.
موفق باشید.

tdkhakpur
جمعه 16 اردیبهشت 1390, 23:01 عصر
نمونه کد
برای فایلهای exe


//-------------------------------------------------------------------------
stacksg segment para stack 'stack'
stacksg ends
datasg segment para 'data'
msg db "hello my friends. $", 0
datasg ends
codes segment para 'code'
main proc far
assume ss:stacksg, ds:datasg, cs:codes
mov ax, datasg
mov ds, ax
;------------ ur programm
mov ah, 9
mov dx, offset msg
int 21h
;------------ end of program
mov ax, 4c00h
int 21h
main endp
codes ends
end main
//-------------------------------------------------------------------------

برای فایلهای com


.model small
codesg segment
assume cs:codesg, ds:codesg
org 100h
start:
jmp begin
msg db "hello my friends. $", 0
begin proc
; push cs becuse you use assume d:codesg
; pop ds
mov ah, 9
mov dx, offset msg
int 21h
exit:
int 20h
begin endp
codesg ends
end start
//-------------------------------------------------------------------------

shahmohammadi
شنبه 17 اردیبهشت 1390, 09:32 صبح
ممنون از راهنماييتون.
من مرجع دستورات اسمبليم رو نگاه كردم و دستور ORG رو نديدم.
آيا منظور از دستور ORG 100H اينه كه برنامه از آفست 0100:0000 اجرا بشه.

tdkhakpur
شنبه 17 اردیبهشت 1390, 14:08 عصر
آيا منظور از دستور ORG 100H اينه كه برنامه از آفست 0100:0000 اجرا بشه.

تا حدودی اصل مطلب همینی هست که ارسال کردید اما org 100h برای اعمال تغییر در پرش به محدوده سگمنت نیست فقط برای اینه که بتونه 256 بایت یعنی همون 100h از ابتدار سگمنت کد به طرف اصل کدهای فایل com پرش کند یعنی آفست از سگمنت تحت تاثیر قرار میگیره و مابین 0 تا 100h از فایل com هدر فایل com قرار میگیره و این تفاوت عمده بین فایلهای com و exe هست که این محدودیت برای exe وجود نداره و نقطه پرش برای شروع فایلهای exe نقطه cs:000h هست درصورتی که برای com نقطه cs:0100h در نظر گرفته میشود.

shahmohammadi
شنبه 17 اردیبهشت 1390, 21:17 عصر
بازم ممنون.
الان مي دونم كه نحوه نوشتن فايل هاي كام اينطوريه.
اما مطالبي كه توضيحشو دادين برخلاف اون چيزاييه كه من خوندم.(توي اين لينك (http://en.wikipedia.org/wiki/COM_file#MS-DOS_binary_format))

1.مگر نه اينكه سيستم عامل فايل هاي كام رو هميشه از آفست 0X100 به بعد قرار مي ده و اجرا مي كنه و دليلش اينه كه اونها جدولي ندارند كه آدرس توابع و كد هاشو نگه داره و بار گذار سيستم عامل از اونها استفاده كنه.(در حالي كه گفتيد اونها در سگمنت كد كه يه آدرس ديگه هست قرار مي گيرند)
Since it lacks relocation (http://en.wikipedia.org/wiki/Relocation_%28computer_science%29) information, it is loaded (http://en.wikipedia.org/wiki/Loader_%28computing%29) by the operating system at a pre-set address, at offset 0x (http://en.wikipedia.org/wiki/Hexadecimal)0100, where it is executed

به علاوه ساختار فايل هاي كام فكر كنم اينطور باشه كه هدر ندارن (و شما كفتيد 256 بايت اولش هدرش مي شه) و براي اينكه از فايلهاي ديگه شناخته بشند فقط دو بايت اولشون مقدار خاص MZ رو داره.
It is very simple; it has no header, and contains no metadata (http://en.wikipedia.org/wiki/Metadata), only code and data.

Files may have names ending in .COM, but not be in the simple format described above; this is indicated by a magic number (http://en.wikipedia.org/wiki/Magic_number_%28programming%29) at the start of the file. For example, the COMMAND.COM (http://en.wikipedia.org/wiki/Command.com) file in DR-DOS (http://en.wikipedia.org/wiki/DR-DOS) 6 is actually in DOS executable (http://en.wikipedia.org/wiki/DOS_executable) format, indicated by the first two bytes being MZ (0x4D 0x5A), the initials of Mark Zbikowski (http://en.wikipedia.org/wiki/Mark_Zbikowski).

در ضمن اگه دستور ORG نمي گذاشتيم برنامه از آدرس 0000:0100 (كه در جدول وقفه ها قرار داره)(يا نمي دونم شايد منظورش 0100:0000 باشه)اجرا مي شد؟ و آيا اين دستور در فايل هاي كام ضروريه؟
بازم ممنون.

tdkhakpur
یک شنبه 18 اردیبهشت 1390, 15:04 عصر
1.مگر نه اينكه سيستم عامل فايل هاي كام رو هميشه از آفست 0X100 به بعد قرار مي ده و اجرا مي كنه و دليلش اينه كه اونها جدولي ندارند كه آدرس توابع و كد هاشو نگه داره و بار گذار سيستم عامل از اونها استفاده كنه

قسمت رنگی شده زمانی درست خواهد بود که این آفست نسبت یه cs برنامه تنظیم شده باشه نه ram.

.(در حالي كه گفتيد اونها در سگمنت كد كه يه آدرس ديگه هست قرار مي گيرند)
منظور اینه که باید از cs یک پرش 256 بایتی داشته باشید تا به برنامه اصلی یا کد اصلی برسید.

به علاوه ساختار فايل هاي كام فكر كنم اينطور باشه كه هدر ندارن (و شما كفتيد 256 بايت اولش هدرش مي شه) و براي اينكه از فايلهاي ديگه شناخته بشند فقط دو بايت اولشون مقدار خاص MZ رو داره.

درسته فایلهای com در حالتی که داخل hard یا دیسک قرار میگیرن ظاهرا هدر ندارن اما وقتی لود میشن باید فضایی برای هدر رو در cs داشته باشن هر چن این فضا چندان قابل استفاده نیست اما یک حقیقته و باید قبول که میشه این رو به نوعی هدر حساب کرد.

ضمن اگه دستور ORG نمي گذاشتيم برنامه از آدرس 0000:0100 (كه در جدول وقفه ها قرار داره)(يا نمي دونم شايد منظورش 0100:0000 باشه)اجرا مي شد؟ و آيا اين دستور در فايل هاي كام ضروريه؟

org دستور نیست فقط به لودر میفهمونه که باید کد رو از فاصله 256 بایتی از cs قرار بده.
این کار میتونه برای طراحی درایور ها به کار برده بشه که اساسا میتونن در هر فاصله ای از ram که در حالت استاندارد مقدار cs:0000 را میتواند باشد