نمایش نتایج 1 تا 6 از 6

نام تاپیک: کامپایلر خط فرمان برای کاربران اسمبلی

  1. #1
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    کامپایلر خط فرمان برای کاربران اسمبلی

    سلام به همگی.
    اکثر دوستان داخل کامپایل برنامه های اسمبلی مشکل داشته و یا هماهنگی جهت پاسخگویی نسبت به سوالات همدیگر ندارند لذا کامپایلر خط فرمان زیر را برای کامپایل برنامه های اسمبلی بصورت exe و یا com به کار ببرید.
    طرز استفاده خیلی راحته - پس از دانلود بسته میتوانید بصورت زیر برنامه com یا exe را در خط فرمان خودتان بسازید.

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

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

  2. #2
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: کامپایلر خط فرمان برای کاربران اسمبلی

    نمونه کد
    برای فایلهای 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
    //-------------------------------------------------------------------------

  3. #3
    کاربر دائمی آواتار shahmohammadi
    تاریخ عضویت
    فروردین 1390
    محل زندگی
    کلیبر
    پست
    475

    نقل قول: کامپایلر خط فرمان برای کاربران اسمبلی

    ممنون از راهنماييتون.
    من مرجع دستورات اسمبليم رو نگاه كردم و دستور ORG رو نديدم.
    آيا منظور از دستور ORG 100H اينه كه برنامه از آفست 0100:0000 اجرا بشه.

  4. #4
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: کامپایلر خط فرمان برای کاربران اسمبلی

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

  5. #5
    کاربر دائمی آواتار shahmohammadi
    تاریخ عضویت
    فروردین 1390
    محل زندگی
    کلیبر
    پست
    475

    نقل قول: کامپایلر خط فرمان برای کاربران اسمبلی

    بازم ممنون.
    الان مي دونم كه نحوه نوشتن فايل هاي كام اينطوريه.
    اما مطالبي كه توضيحشو دادين برخلاف اون چيزاييه كه من خوندم.(توي اين لينك)

    1.مگر نه اينكه سيستم عامل فايل هاي كام رو هميشه از آفست 0X100 به بعد قرار مي ده و اجرا مي كنه و دليلش اينه كه اونها جدولي ندارند كه آدرس توابع و كد هاشو نگه داره و بار گذار سيستم عامل از اونها استفاده كنه.(در حالي كه گفتيد اونها در سگمنت كد كه يه آدرس ديگه هست قرار مي گيرند)
    Since it lacks relocation information, it is loaded by the operating system at a pre-set address, at offset 0x0100, where it is executed

    به علاوه ساختار فايل هاي كام فكر كنم اينطور باشه كه هدر ندارن (و شما كفتيد 256 بايت اولش هدرش مي شه) و براي اينكه از فايلهاي ديگه شناخته بشند فقط دو بايت اولشون مقدار خاص MZ رو داره.
    It is very simple; it has no header, and contains no 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 at the start of the file. For example, the COMMAND.COM file in DR-DOS 6 is actually in DOS executable format, indicated by the first two bytes being MZ (0x4D 0x5A), the initials of Mark Zbikowski.


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

  6. #6
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: کامپایلر خط فرمان برای کاربران اسمبلی

    1.مگر نه اينكه سيستم عامل فايل هاي كام رو هميشه از آفست 0X100 به بعد قرار مي ده و اجرا مي كنه و دليلش اينه كه اونها جدولي ندارند كه آدرس توابع و كد هاشو نگه داره و بار گذار سيستم عامل از اونها استفاده كنه
    قسمت رنگی شده زمانی درست خواهد بود که این آفست نسبت یه cs برنامه تنظیم شده باشه نه ram.
    .(در حالي كه گفتيد اونها در سگمنت كد كه يه آدرس ديگه هست قرار مي گيرند)
    منظور اینه که باید از cs یک پرش 256 بایتی داشته باشید تا به برنامه اصلی یا کد اصلی برسید.
    به علاوه ساختار فايل هاي كام فكر كنم اينطور باشه كه هدر ندارن (و شما كفتيد 256 بايت اولش هدرش مي شه) و براي اينكه از فايلهاي ديگه شناخته بشند فقط دو بايت اولشون مقدار خاص MZ رو داره.
    درسته فایلهای com در حالتی که داخل hard یا دیسک قرار میگیرن ظاهرا هدر ندارن اما وقتی لود میشن باید فضایی برای هدر رو در cs داشته باشن هر چن این فضا چندان قابل استفاده نیست اما یک حقیقته و باید قبول که میشه این رو به نوعی هدر حساب کرد.
    ضمن اگه دستور ORG نمي گذاشتيم برنامه از آدرس 0000:0100 (كه در جدول وقفه ها قرار داره)(يا نمي دونم شايد منظورش 0100:0000 باشه)اجرا مي شد؟ و آيا اين دستور در فايل هاي كام ضروريه؟
    org دستور نیست فقط به لودر میفهمونه که باید کد رو از فاصله 256 بایتی از cs قرار بده.
    این کار میتونه برای طراحی درایور ها به کار برده بشه که اساسا میتونن در هر فاصله ای از ram که در حالت استاندارد مقدار cs:0000 را میتواند باشد

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •