PDA

View Full Version : ساختار دستور db در اسمبلی....



kameltareen
چهارشنبه 12 تیر 1387, 09:21 صبح
قبل از دیدن سورس کرنل چند سییتم عامل فکر میکردم db فقط برای تخصیص مقدار است ...

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


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

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

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

از همکاریتون بی نهایت ممنون:خجالت::خجالت:

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

kameltareen
شنبه 15 تیر 1387, 07:44 صبح
از اینکه راهنماییم کردید متشکرم ,....
جناب دلفی اسکای لاین , آیا مرجعی برای این نمونه کد نویسی بلد هستید ..؟؟؟
لطفا اگر میتونید قواعد این دستور را بنویسید متشکر میشوم , مثلا چگونه کد

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

Delphi Skyline
شنبه 15 تیر 1387, 16:14 عصر
سلام و خسته نباشید عرض می کنم .
بستگی به پردازنده تو داره . چون پردازنده های ما معماری 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 .
موفق باشید .

kameltareen
سه شنبه 18 تیر 1387, 08:27 صبح
از توضيحاتت ممنون....
فكر كنم منظورت رو فهميدم ....
منظورت اينه كه در اصل BBh,06h,00h همان آپكد mov ax,06h است؟

Delphi Skyline
سه شنبه 18 تیر 1387, 21:27 عصر
آفرین ... خودشه . کد اصلی و قابل فهم برای پردازنده BBh هست . دو بایت بعدی عملوند ها هستند .

kameltareen
چهارشنبه 19 تیر 1387, 11:11 صبح
بسيار ممنون از راهنمايي هات.....!!!!!