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

نام تاپیک: ساختار دستور db در اسمبلی....

  1. #1

    ساختار دستور db در اسمبلی....

    قبل از دیدن سورس کرنل چند سییتم عامل فکر میکردم db فقط برای تخصیص مقدار است ...

    ولی با تعجب کد های پیچیده ای دیدم مانند زیر:


    DB 66H,0FH,$BC,$C8

    و متوجه شدم تمامی دستورات اسمبلی را میتوان با db,dw,... نوشت ......!!!!!

    لطفا اگر کسی ساختار کلی این دستور را بلده , توضیح بده تا بیش از این گییچ نشدم...

    از همکاریتون بی نهایت ممنون

  2. #2
    کاربر دائمی آواتار Delphi Skyline
    تاریخ عضویت
    دی 1383
    محل زندگی
    شیراز
    پست
    1,174

    نقل قول: ساختار دستور db در اسمبلی....

    نگاه کنید دوست عزیز پردازنده یا همون CPU یک سری عدد از حافظه میکشه و اونا رو اجرا می کنه . مثلا عدد 98 برای جمع و 95 برای تفریق است مثلا . پس در واقع داده ها با کد ها هیچ فرقی نمی کنن . پس مثلا دستور MOV AX,6 خودش به چند عدد تقسیم میشه . که حتی این دستور رو می توان به صورت DB B8h,05h,00h نوشت . پس این دستور برای تعریف یک مقدار در خونه هایی از حافظه است . اگه این خونه ها طوری تعریف بشن که سی پی یو اونا رو بخونه میشن کد و اگر به سی پی یو گفته بشه که از روی اونا بپر دیتا میشن .
    امیدوارم منظور رو فهمیده باشی. خوش و خرم باشی .
    آخرین ویرایش به وسیله Delphi Skyline : چهارشنبه 12 تیر 1387 در 20:33 عصر

  3. #3

    نقل قول: ساختار دستور db در اسمبلی....

    از اینکه راهنماییم کردید متشکرم ,....
    جناب دلفی اسکای لاین , آیا مرجعی برای این نمونه کد نویسی بلد هستید ..؟؟؟
    لطفا اگر میتونید قواعد این دستور را بنویسید متشکر میشوم , مثلا چگونه کد

    db B8h,05h,00h = mov ax,6 میشود؟

  4. #4
    کاربر دائمی آواتار Delphi Skyline
    تاریخ عضویت
    دی 1383
    محل زندگی
    شیراز
    پست
    1,174

    نقل قول: ساختار دستور db در اسمبلی....

    سلام و خسته نباشید عرض می کنم .
    بستگی به پردازنده تو داره . چون پردازنده های ما معماری x86 است mov ax,6 میشه BBh,06h,00h . یعنی کلا نگاه کن :
    پردازنده برای اینکه یک دستور رو اجرا کنه مراحل زیر رو انجام می ده .
    اول یک خونه حافظه رو از حافظه واکشی (Fetch) می کنه .
    این خونه حافظه یک سری 0 و 1 است که در مبنای 16 نیز میشود بیان کرد .
    پردازنده این عدد رو decode می کنه تا بفهمه که این دستور چیه .
    بعد که فهمید دستور چیه اونو اجرا می کنه .
    اکثر دستورات چند عملوند (Operation) دارند . پردازنده این عملوند ها رو هم از حافظه واکشی می کنه و دستور رو اجرا می کنه .
    بعد دستور بعدی رو واکشی می کنه و تا آخر .
    مثلا:
    حالا اینجا پردازنده یک خانه حافظه رو واکشی می کنه .
    این خونه حافظه مقدار B8h رو داره پردازنده این عدد رو دیکد می کنه و می فهمه که این دستور یعنی (این عدد می تونه برای پردازنده هایی با معماری متفاوت مثلا Cell و یا power معنی دیگه ای داشته باشه یا حتی می تونه اصلا معنی نداشته باشه ) :
    mov ax,a number
    بعد عملوند این دستور رو واکشی می کنه که بایت های 06h و 00h باشند .
    بعد که عملوند ها رو هم گرفت محتویات ax رو می کنه 00006h بعد میره دستور بعدیو اجرا می کنه .

    در واقع ببین اسمبلر mov ax,06h رو میکنه BBh,06h,00h .
    موفق باشید .

  5. #5

    نقل قول: ساختار دستور db در اسمبلی....

    از توضيحاتت ممنون....
    فكر كنم منظورت رو فهميدم ....
    منظورت اينه كه در اصل BBh,06h,00h همان آپكد mov ax,06h است؟

  6. #6
    کاربر دائمی آواتار Delphi Skyline
    تاریخ عضویت
    دی 1383
    محل زندگی
    شیراز
    پست
    1,174

    نقل قول: ساختار دستور db در اسمبلی....

    آفرین ... خودشه . کد اصلی و قابل فهم برای پردازنده BBh هست . دو بایت بعدی عملوند ها هستند .

  7. #7

    نقل قول: ساختار دستور db در اسمبلی....

    بسيار ممنون از راهنمايي هات.....!!!!!

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

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