برای اموزش و یاد گرفتن کلی مطالب و دانلود کردن ابزار مهندسی معکوس یا دیباگر ها یا هر چی میتونید از این چند تا سایت استفاده کنید
https://legend.octopuslabs.io/
https://www.tuts4you.com/
https://www.dr-farfar.com/
#Reverseengineering
https://legend.octopuslabs.io/
https://www.tuts4you.com/
https://www.dr-farfar.com/
#Reverseengineering
👍3
سینتکس در زبان اسمبلی:
یک برنامه اسمبلی می تونه به سه بخش زیر تقسیم شه:
بخش data این بخش برای اعلام داده ها های اولیه یا ثابت استفاده میشه این داده در زمان اجرا تغییر نمیکنه سینتکس به صورت زیره
section.data
بخش bss این بخش برای اعلام متغیر ها استفاده میشه سینتکس به سورت زیره
section.bss
بخش tetx این بخش برای نگه داشتن کد اصلی استفاده میشه این بخش با اعلام متغیر سراسری _start شروع میشه که به هسته (core ) میگه که اجرای برنامه از کجا باید شروع بشه سینتکس به صورت زیره
section.text
section_start
:start_
کامنت ها در زبان اسمبلی با (;) شروع میشن
مثال
This program a good;
برنامه های نوشته شده با زبان اسمبلی به سه دستور تقسیم میشن:
دستورالعمل اجرایی: یا دستور العمل های ساده
به پردازنده (CPU) میگن چه کاری انجام بده
هر دستورالعمل شامل یک نوع کد عملیاتیه که
بهش میگن opcode هر دستورالعمل اجرایی
یک دستورالعمل زبان ماشین تولید میکنه
دستورالعمل های اسمبلر:
در مورد جنبه ها مختلف روند مونتاژ به اسمبلر میگن که این دستورات غیر قابل اجران و دستورالعمل زبان ماشین تولید نمی کنن
ماکروها:
ماکروها اساسا مکانیسم جایگزینی متن هستن
هر کدام از دســتورات زبان اســمبلی در یک
سطر جدا نوشته میشن همه ی اون ها از قالب زیر استفاده میکنن
[lable] mnemonic operands
[comment]
یک دستورالعمل شامل دو بخش هست یکی قسمت اول نام دستورالعمل mnemonic که قراره اجرا بشه و دومی ان عملوند ها operands یا پارامتر های دستور هستن
#syntax
#command
#Assembly
#CPU
یک برنامه اسمبلی می تونه به سه بخش زیر تقسیم شه:
بخش data این بخش برای اعلام داده ها های اولیه یا ثابت استفاده میشه این داده در زمان اجرا تغییر نمیکنه سینتکس به صورت زیره
section.data
بخش bss این بخش برای اعلام متغیر ها استفاده میشه سینتکس به سورت زیره
section.bss
بخش tetx این بخش برای نگه داشتن کد اصلی استفاده میشه این بخش با اعلام متغیر سراسری _start شروع میشه که به هسته (core ) میگه که اجرای برنامه از کجا باید شروع بشه سینتکس به صورت زیره
section.text
section_start
:start_
کامنت ها در زبان اسمبلی با (;) شروع میشن
مثال
This program a good;
برنامه های نوشته شده با زبان اسمبلی به سه دستور تقسیم میشن:
دستورالعمل اجرایی: یا دستور العمل های ساده
به پردازنده (CPU) میگن چه کاری انجام بده
هر دستورالعمل شامل یک نوع کد عملیاتیه که
بهش میگن opcode هر دستورالعمل اجرایی
یک دستورالعمل زبان ماشین تولید میکنه
دستورالعمل های اسمبلر:
در مورد جنبه ها مختلف روند مونتاژ به اسمبلر میگن که این دستورات غیر قابل اجران و دستورالعمل زبان ماشین تولید نمی کنن
ماکروها:
ماکروها اساسا مکانیسم جایگزینی متن هستن
هر کدام از دســتورات زبان اســمبلی در یک
سطر جدا نوشته میشن همه ی اون ها از قالب زیر استفاده میکنن
[lable] mnemonic operands
[comment]
یک دستورالعمل شامل دو بخش هست یکی قسمت اول نام دستورالعمل mnemonic که قراره اجرا بشه و دومی ان عملوند ها operands یا پارامتر های دستور هستن
#syntax
#command
#Assembly
#CPU
👍2
بخش های مختلف حافظه (memory) را به سه بخش تقسیم میکنیم:
* ســگمنت داده ( data segment)
با ســگمنت data. و .bss
نمایش داده میشــه از سگمنت data. برای اعلام منطقه حافظه که عناصر داده برای برنامه ذخیره میشن استفاده میشه این سگمنت بعد از اعلام عناصر داده قابل گسترش نیست و در طول برنامه مون ایستا میمونه یعنی نمیشه تغییرش داد ثابته
* سگمنت bss. یک سگمنت حافظه استاتیکه که
شامل بافر برای داده ها در برنامه است که بعدا اعلام میشه
* ســگمنت کد(code segment) توسط سگمنت text. اعلام میشه این یک فضا از حافظه را تعریف میکنه که کدهای
دستورالعمل را ذخیره میکنه این بخش ثابته
* سگمنت پشــته یا Stack – این سگمنت شامل مقادیر داده هست که به توابع و رویه های درون برنامه منتقل میشه
#memory
👍1
ثبات ها (Registeres) در زبان اسمبلی
عملیات انجام شــده توسط پردازنده بیشتر شامل پردازش داده هاست این داده ها
میتوانند داخل حافظه ذخیره شن و از اون جا به اونا دسترسی داشت خوندن داده و ذخیره داده ها داخل حافظه فرایند پردازنده را کند میکنه چون این کار فرآیندهای پیچیده ای برای ارسال درخواست داده از طریق باس کنترل و به
واحد ذخیره سازی حافظه و گرفتن اطلاعات از طریق همون کاناله
برای سرعت بخشیدن به عملیات پردازنده، پردازنده شامل برخی از مکان های ذخیره
سازی داخلی به نام ثبات یا رجیستر هست
رجیسترها عناصر داده را برای پردازش بدون نیاز به دسترسی به حافظه اصلی، ذخیره
میکنن تعداد ثبات ها در تراشه پردازنده محدوده
ده معماری 32 بیتی و 6 پردازنده 16 بیتی در معماری IA32- وجود دارد. ریجستر
ها به سه دسته تقسیم میشن:
1- ثبات های عمومی Registers General
2- ثبات های کنترل Registers Control
3- ثبات های سمگنت Registers Segment
حالا خود ریجستر های عمومی به سه دسته تقسیم میشن
ثبات داده Registers Data
ثبات های اشاره گر Registers Pointer
ثبات های ایندکس Registers Index
Registers Data ثبات داده
چهار رجیستر داده 32 بیتی برای عملیات محاسباتی، منطقی و سایر موارد استفاده
میشه این رجیسترهای 32 بیتی به سه روش قابل استفاده ان
به عنوان ثبات 32 بیتی کامل EAX، EBX، ECX، EDX
بخش کم ارزش از رجیسترهای 32 بیتی میتوانند به عنوان چهار رجیستر داده
16 بیتی استفاده شن AX، BX، CX و DX.
بخــش کم ارزش و پر ارزش از چهــار ثبات 16 بیتی به عنوان
هشت ثبات داده 8 بیتی استفاده شود:
AH، AL، BH، BL، CH، CL، DH و DL.
#Registers
#Assembly
عملیات انجام شــده توسط پردازنده بیشتر شامل پردازش داده هاست این داده ها
میتوانند داخل حافظه ذخیره شن و از اون جا به اونا دسترسی داشت خوندن داده و ذخیره داده ها داخل حافظه فرایند پردازنده را کند میکنه چون این کار فرآیندهای پیچیده ای برای ارسال درخواست داده از طریق باس کنترل و به
واحد ذخیره سازی حافظه و گرفتن اطلاعات از طریق همون کاناله
برای سرعت بخشیدن به عملیات پردازنده، پردازنده شامل برخی از مکان های ذخیره
سازی داخلی به نام ثبات یا رجیستر هست
رجیسترها عناصر داده را برای پردازش بدون نیاز به دسترسی به حافظه اصلی، ذخیره
میکنن تعداد ثبات ها در تراشه پردازنده محدوده
ده معماری 32 بیتی و 6 پردازنده 16 بیتی در معماری IA32- وجود دارد. ریجستر
ها به سه دسته تقسیم میشن:
1- ثبات های عمومی Registers General
2- ثبات های کنترل Registers Control
3- ثبات های سمگنت Registers Segment
حالا خود ریجستر های عمومی به سه دسته تقسیم میشن
ثبات داده Registers Data
ثبات های اشاره گر Registers Pointer
ثبات های ایندکس Registers Index
Registers Data ثبات داده
چهار رجیستر داده 32 بیتی برای عملیات محاسباتی، منطقی و سایر موارد استفاده
میشه این رجیسترهای 32 بیتی به سه روش قابل استفاده ان
به عنوان ثبات 32 بیتی کامل EAX، EBX، ECX، EDX
بخش کم ارزش از رجیسترهای 32 بیتی میتوانند به عنوان چهار رجیستر داده
16 بیتی استفاده شن AX، BX، CX و DX.
بخــش کم ارزش و پر ارزش از چهــار ثبات 16 بیتی به عنوان
هشت ثبات داده 8 بیتی استفاده شود:
AH، AL، BH، BL، CH، CL، DH و DL.
#Registers
#Assembly
👍2
ثبات AX انباشــتگر اصلی accumulator primary در ورودی
خروجی و بیش تر دستور های محاسباتی استفاده میشه به عنوان مثال
عملیات ضرب یک operands با اســتفاده از رجیستر EAX یا AX یا AL با توجه به
اندازه عملوند ذخیره میشه
ثبات BX به عنوان ثبات پایه Register Base شناخته میشه چون داخل ادرس دهی استفاده میشه
ثبات CX به عنوان ثبات شمارنده Register Count شناخته میشه ثبات
های ECX، CX تعداد تکرار حلقه ها را داخل عملیات های تکراری ذخیره میکنن
ثبات DX به عنوان ثبات داده Register Data شــناخته میشــه در عملیات
ورودی خروجی هم اســتفاده میشه همچنین با استفاده از ثبات AX به همراه DX
برای ضرب و تقسیم مقدار های بزرگ هم کاربرد داره
#accumalator_primary
#operands
خروجی و بیش تر دستور های محاسباتی استفاده میشه به عنوان مثال
عملیات ضرب یک operands با اســتفاده از رجیستر EAX یا AX یا AL با توجه به
اندازه عملوند ذخیره میشه
ثبات BX به عنوان ثبات پایه Register Base شناخته میشه چون داخل ادرس دهی استفاده میشه
ثبات CX به عنوان ثبات شمارنده Register Count شناخته میشه ثبات
های ECX، CX تعداد تکرار حلقه ها را داخل عملیات های تکراری ذخیره میکنن
ثبات DX به عنوان ثبات داده Register Data شــناخته میشــه در عملیات
ورودی خروجی هم اســتفاده میشه همچنین با استفاده از ثبات AX به همراه DX
برای ضرب و تقسیم مقدار های بزرگ هم کاربرد داره
#accumalator_primary
#operands
👍2
ثبات های اشاره گر Registers Pointer
رجیسترهای اشاره گر شامل ثبات های 32 بیتی EIP، ESP و EBP و ۱۶ بیتی SP،
هستن IP,BP سه دسته اشاره گر داریم:
اشاره گر دستورالعمل (IP) instruction pointer
ثبات 16 بیتی IP
آدرس افست دستورالعمل بعدی رو که باید اجرا شه ذخیره میکنه
ثبات های اشاره گر Registers Pointer)
رجیسترهای اشاره گر شامل ثبات های 32 بیتی EIP، ESP و EBP و ۱۶ بیتی SP،
هستن IP,BP سه دسته اشاره گر داریم:
1 اشاره گر دستورالعمل (IP) instruction pointer
ثبات 16 بیتی IP
آدرس افست دستورالعمل بعدی رو که باید اجرا شه ذخیره میکنه جمع IP با ثبات CS (به عنوان CS:IP) ادرس کاملی از دستور فعلی در سگمنت کد به ما میده
2 اشــاره گر پشــته یا Pointer Stack
ثبات 16 بیتی SP مقدار
افســت موجود در پشته برنامه رو میده اجتماع SP و SS به شکل SS:SP به موقعیت فعلی داده یا ادرس پشته در برنامه اشاره میکنه
3 اشاره گر پایه BP Pointer Base
ثبات 16 بیتی BP به طور زیاد
در اجرا متغیرهای پارامتری انتقال داده شده
به زیر مجموعه ها کمک میکنه در رجیستری SS با offset در BP برای به دست آوردن محل پارامتر
ترکیب میشــن BP همچنین میتونه با DI و SI به عنوان ثبات های پایه
برای آدرس دهی های ویژه استفاده شه.
#Registers
#register_pointer
رجیسترهای اشاره گر شامل ثبات های 32 بیتی EIP، ESP و EBP و ۱۶ بیتی SP،
هستن IP,BP سه دسته اشاره گر داریم:
اشاره گر دستورالعمل (IP) instruction pointer
ثبات 16 بیتی IP
آدرس افست دستورالعمل بعدی رو که باید اجرا شه ذخیره میکنه
ثبات های اشاره گر Registers Pointer)
رجیسترهای اشاره گر شامل ثبات های 32 بیتی EIP، ESP و EBP و ۱۶ بیتی SP،
هستن IP,BP سه دسته اشاره گر داریم:
1 اشاره گر دستورالعمل (IP) instruction pointer
ثبات 16 بیتی IP
آدرس افست دستورالعمل بعدی رو که باید اجرا شه ذخیره میکنه جمع IP با ثبات CS (به عنوان CS:IP) ادرس کاملی از دستور فعلی در سگمنت کد به ما میده
2 اشــاره گر پشــته یا Pointer Stack
ثبات 16 بیتی SP مقدار
افســت موجود در پشته برنامه رو میده اجتماع SP و SS به شکل SS:SP به موقعیت فعلی داده یا ادرس پشته در برنامه اشاره میکنه
3 اشاره گر پایه BP Pointer Base
ثبات 16 بیتی BP به طور زیاد
در اجرا متغیرهای پارامتری انتقال داده شده
به زیر مجموعه ها کمک میکنه در رجیستری SS با offset در BP برای به دست آوردن محل پارامتر
ترکیب میشــن BP همچنین میتونه با DI و SI به عنوان ثبات های پایه
برای آدرس دهی های ویژه استفاده شه.
#Registers
#register_pointer
👍3
ثبات ایندکس Register Index
ثبات ایندکس 32 بیتی ESI و EDI و بخش های راســت 16 بیتی SI و DI برای
آدرس دهی ایندکس شده استفاده میشن و بعضی وقت ها داخل جمع و تفریق استفاده
میشه. دو مجموعه ثبات ایندکس Register Index وجود دارد
#registerindex
#sourceindex
#destinationindex
ثبات ایندکس 32 بیتی ESI و EDI و بخش های راســت 16 بیتی SI و DI برای
آدرس دهی ایندکس شده استفاده میشن و بعضی وقت ها داخل جمع و تفریق استفاده
میشه. دو مجموعه ثبات ایندکس Register Index وجود دارد
Source index شاخص مبدا برای عملیات روی رشته ها انجام میشه#Registers
Destination index شاخص مقصد برای عملیات روی رشته ها انجام میشه
#registerindex
#sourceindex
#destinationindex
👍2
ثبات کنترلی Register Control
ثبات اشــاره گر دستورالعمل 32 بیتی و ثبات flag 32 بیتی در کنار هم به عنوان
ثبات کنترلی در نظر گرفته میشن
بسیاری از دستورها مقایسه و محاسبات ریاضی و تغییر وضعیت flag
ها و برخی دیگر از دستورالعمل های شرطی مقدار این flag ها را برای انتقال جریان
به بقیه مکان ها بررسی میکند
میخایم در مورد فلگ ها حرف بزنیم خب اصن فلگ چیه ؟
برای کنترل جریان اجرای برنامه استفاده میشه این مقادیر در حقیقت نشون دهنده ی وضعیت خاصی که برنامه به ما میگه که چه کاری باید انجام بدیم
میخایم چند تا فلگ مهم رو نام ببریم و این که بگیم کارایی شون چیه
Overflow flag
نشان دهنده ی یک بیت پر ارزش سر ریز چپ ترین بیت از داده ها بعد از یک عملیات محاسباتی هست
Direction flag
جهت چپ یا راســت را برای حرکت یا مقایسه داده های رشته تعیین میکنه وقتی مقدار DF 0 باشد عملیات رشته ای از چپ به راست
و وقتی مقدار 1 باشه عملیات رشته ها از راست به چپ انجام میشه
Interupt flag
تعییــن میکند کــه آیا وقفه های خارج از برنامه مثل ورودی صفحه کلید رو باید نادیده گرفت یا پردازش کرد وقتی مقدار 0 باشه وقفه خارجــی را غیرفعال میکنه و اگر روی 1 تنظیم باشه وقفه خارجی را فعال میکنه
Flag Trap
این امکان را میده که عملکرد پردازنده را به حالت پلکانی تنظیم کنیم و برای debug کردن برنامه ها استفاده میشه
Sign flag
این علامت توسط چپ ترین بیت نشان داده میشه اگر SF صفر باشه نتیجه مثبت
است و اگر یک باشد نتیجه منفیه
Zero flag
نشــان دهنده نتیجه یک عملیات ریاضی است در نتیجه غیر صفر flag با صفر تنظیم میشه و نتیجه اگر صفر شد 1 میشه
Auxiliary flag
انتقال بیت 3 به 4 است وقتی
تنظیم میشه که در یک عملیات حسابی 1 بایت باعث انتقال از بیت 3 به بیت 4 شه
Partiy flag
به تعداد کل 1 های موجود در نتیجه ی به دســت اومده از یک عملیات محاســباتی تنظیم میشه در صورتی که تعداد زوج بشه صفر اگر تعداد فرد باشه یک
Cary flag
مقدار نقلی از بیت پر ارزش تر (چپ ترین بیت) هست
#flag
#flags
#registercontrol
ثبات اشــاره گر دستورالعمل 32 بیتی و ثبات flag 32 بیتی در کنار هم به عنوان
ثبات کنترلی در نظر گرفته میشن
بسیاری از دستورها مقایسه و محاسبات ریاضی و تغییر وضعیت flag
ها و برخی دیگر از دستورالعمل های شرطی مقدار این flag ها را برای انتقال جریان
به بقیه مکان ها بررسی میکند
میخایم در مورد فلگ ها حرف بزنیم خب اصن فلگ چیه ؟
برای کنترل جریان اجرای برنامه استفاده میشه این مقادیر در حقیقت نشون دهنده ی وضعیت خاصی که برنامه به ما میگه که چه کاری باید انجام بدیم
میخایم چند تا فلگ مهم رو نام ببریم و این که بگیم کارایی شون چیه
Overflow flag
نشان دهنده ی یک بیت پر ارزش سر ریز چپ ترین بیت از داده ها بعد از یک عملیات محاسباتی هست
Direction flag
جهت چپ یا راســت را برای حرکت یا مقایسه داده های رشته تعیین میکنه وقتی مقدار DF 0 باشد عملیات رشته ای از چپ به راست
و وقتی مقدار 1 باشه عملیات رشته ها از راست به چپ انجام میشه
Interupt flag
تعییــن میکند کــه آیا وقفه های خارج از برنامه مثل ورودی صفحه کلید رو باید نادیده گرفت یا پردازش کرد وقتی مقدار 0 باشه وقفه خارجــی را غیرفعال میکنه و اگر روی 1 تنظیم باشه وقفه خارجی را فعال میکنه
Flag Trap
این امکان را میده که عملکرد پردازنده را به حالت پلکانی تنظیم کنیم و برای debug کردن برنامه ها استفاده میشه
Sign flag
این علامت توسط چپ ترین بیت نشان داده میشه اگر SF صفر باشه نتیجه مثبت
است و اگر یک باشد نتیجه منفیه
Zero flag
نشــان دهنده نتیجه یک عملیات ریاضی است در نتیجه غیر صفر flag با صفر تنظیم میشه و نتیجه اگر صفر شد 1 میشه
Auxiliary flag
انتقال بیت 3 به 4 است وقتی
تنظیم میشه که در یک عملیات حسابی 1 بایت باعث انتقال از بیت 3 به بیت 4 شه
Partiy flag
به تعداد کل 1 های موجود در نتیجه ی به دســت اومده از یک عملیات محاســباتی تنظیم میشه در صورتی که تعداد زوج بشه صفر اگر تعداد فرد باشه یک
Cary flag
مقدار نقلی از بیت پر ارزش تر (چپ ترین بیت) هست
#flag
#flags
#registercontrol
👍5
ثبات های سگمنت Registers Segment
سگمنت ها قسمت های خاصی هستند که در یک برنامه برای محتوی داده، کد و
پشته تعریف میشن سه نوع سگمنت اصلی وجود داره
ســگمنت کد Segment Code
شامل کلیه دستورالعمل هایی است که باید
اجرا شــه یک ثبات 16 Segment Code بیتی یــا ثبات CS آدرس آغازین
سگمنت کد رو ذخیره میکنه
سگمنت داده segment Data
شامل داده ها، ثابت ها هستن
یک رجیســتری 16 Segment Data بیتی یا ثبات DS آدرس شــروع data segment رو ذخیره میکنه.
سگمنت پشته segment Stack
این شامل داده ها و آدرس های بازگشت
رویه ها یا زیر برنامه هاست. این به عنوان یک ساختار داده ”stack ”پیاده سازی
شده ثبات Segment Stack یا SS آدرس شروع پشته رو ذخیره میکنه
جدای از رجیســترهای DS، CS و SS، ثبات های اضافی دیگری نیز وجود دارن
segment Extra سگمنت اضافه
FS و GS، که سگمنت های دیگری
را برای ذخیره داده ها ارائه میدن رجیسترهای سگمنت آدرس های شروع یک
سگمنت رو ذخیره میکنه. برای به دست آوردن مکان دقیق داده ها یا دستورالعمل ها
در یک سگمنت، مقدار offset مورد نیازه برای ارجاع هر مکان حافظه در یک
سگمنت پردازنده آدرس سگمنت در ثبات بخش را با مقدار offset مکان ترکیب میکنه
#segmentcode
#segmentextra
#segmentdata
#registerssegment
سگمنت ها قسمت های خاصی هستند که در یک برنامه برای محتوی داده، کد و
پشته تعریف میشن سه نوع سگمنت اصلی وجود داره
ســگمنت کد Segment Code
شامل کلیه دستورالعمل هایی است که باید
اجرا شــه یک ثبات 16 Segment Code بیتی یــا ثبات CS آدرس آغازین
سگمنت کد رو ذخیره میکنه
سگمنت داده segment Data
شامل داده ها، ثابت ها هستن
یک رجیســتری 16 Segment Data بیتی یا ثبات DS آدرس شــروع data segment رو ذخیره میکنه.
سگمنت پشته segment Stack
این شامل داده ها و آدرس های بازگشت
رویه ها یا زیر برنامه هاست. این به عنوان یک ساختار داده ”stack ”پیاده سازی
شده ثبات Segment Stack یا SS آدرس شروع پشته رو ذخیره میکنه
جدای از رجیســترهای DS، CS و SS، ثبات های اضافی دیگری نیز وجود دارن
segment Extra سگمنت اضافه
FS و GS، که سگمنت های دیگری
را برای ذخیره داده ها ارائه میدن رجیسترهای سگمنت آدرس های شروع یک
سگمنت رو ذخیره میکنه. برای به دست آوردن مکان دقیق داده ها یا دستورالعمل ها
در یک سگمنت، مقدار offset مورد نیازه برای ارجاع هر مکان حافظه در یک
سگمنت پردازنده آدرس سگمنت در ثبات بخش را با مقدار offset مکان ترکیب میکنه
#segmentcode
#segmentextra
#segmentdata
#registerssegment
👍2
فراخوان های سیستمی Systsem Calls ها چین ؟
فراخوان های سیســتمی API هایی برای برقرار کردن رابطه بین فضای کاربر و فضای هسته (core) هستن فراخوان های سیستمیCalls System در لینوکس
می توانید در برنامه های اســمبلی خود از فراخوان های سیستمی لینوکس استفاده
کنید
#systemcalls
#API
فراخوان های سیســتمی API هایی برای برقرار کردن رابطه بین فضای کاربر و فضای هسته (core) هستن فراخوان های سیستمیCalls System در لینوکس
می توانید در برنامه های اســمبلی خود از فراخوان های سیستمی لینوکس استفاده
کنید
#systemcalls
#API
👍2
خب حالا دستور mov در اسمبلی برا چی استفاده میشه برای انتقال دادن مثلا
mov ebx,2
این یعنی 2 رو بریز یا انتقالش بده تو ریجستر ebx
انتقال داده ها از یک فضای
ذخیره سازی به فضای دیگه استفاده میشه
دستور mov به پنج شکل انجام میشه:
نکته: هر دو عملوند (operand) داخل عملیات mov باید هم اندازه باشن
#mov
#operand
#assembly
#اسمبلی
این یعنی 2 رو بریز یا انتقالش بده تو ریجستر ebx
انتقال داده ها از یک فضای
ذخیره سازی به فضای دیگه استفاده میشه
دستور mov به پنج شکل انجام میشه:
mov register,register
mov register,immediate
mov memory,immediate
mov register,memory
mov memory,register
نکته: هر دو عملوند (operand) داخل عملیات mov باید هم اندازه باشن
#mov
#operand
#assembly
#اسمبلی
⚡3
Review of addressing modes بررسی مد های ادرس دهی
(آدرس دهی فوری) یا آدرس در (ثبات یا حافظه) داده هایی است که به طور کلی
داده های منبع پس از عملیات بدون تغییر باقی میمونن
سه حالت اصلی آدرس دهی وجود داره:
#memory
#addressingmodes
#مدهای_ادرس_دهی
(آدرس دهی فوری) یا آدرس در (ثبات یا حافظه) داده هایی است که به طور کلی
داده های منبع پس از عملیات بدون تغییر باقی میمونن
سه حالت اصلی آدرس دهی وجود داره:
1 آدرس دهی ثباتی register addressing
2 آدرس دهی فوری immediate addressing
3 آدرس دهی حافظه memory addressing#memory
#addressingmodes
#مدهای_ادرس_دهی
👍4
ادرس دهی ثباتی register addressing
یک رجیســتر محتواش عملونده بســته به دستورالعمل رجیستر میتونه اولین عملوند دومین عملوند یا هر دو باشه از اون جا که پردازش داده ها بین ثبات ها شامل حافظه نیست،سریع ترین پردازش داده ها رو فراهم میکنه.
آدرس دهی فوری immediate addressing
یک عملوند فــوری یک مقدار ثابت یا یک عبــارت داره وقتی که یک دســتورالعمل با دو عملوند، از آدرس دهی فوری اســتفاده میکنه اولین عملوند ممکن است یک رجیستری یا یک مکان حافظه باشد و عملوند دوم
یک ثابت فوریه اولین عملوند طول داده را مشخص میکنه.
Direct memory addressing ادرس دهی حافظه مستقیم
هنگامی که عملوندها در حالت آدرس دهی حافظه مشــخص میشن دسترسی مســتقیم به حافظه اصلی، معمولا به segment data لازم هست. این روش
آدرس دهی، به پردازش کندتر داده میشه برای قرار دادن مکان دقیق داده هــا در حافظه، به آدرس start segment نیاز داریم که معمولا در ثبات DS و یک مقدار offset وجود داره به این مقدار افست آدرس موثر میگیم در حالت آدرس دهی مستقیم، مقدار افست مستقیما به عنوان بخشی از دستورالعمل مشــخص میشه که معموال با نام متغیر مشخص میشه اسمبلر مقدار افست رو محاسبه میکنهو یک جدول symbol رو نگه میداره که مقادیر جبران کلیه متغیرهای مورد استفاده در برنامه رو ذخیره میکنه در آدرس دهی مســتقیم حافظه، یکی از عملوندها به یک مکان حافظه و عملوند
دیگری به یک ثبات اشاره میکنه.
آدرس دهی افست مستقیم Direct offset addressing
در این حالت آدرس دهی از عملگرهای حسابی برای مدیریت آدرس استفاده میشه
به عنوان مثال به مثال های زیر توجه کنید که جداول داده data of tables رو تعریف میکنه
آدرس دهی غیر مستقیم حافظه
این حالت آدرس دهی از قابلیت کامپیوتر از آدرس دهی Offset:Segment استفاده
میکنــه به طور کلی ثبات های پایه EBX، EBP( یا BX، BP )و رجیســترهای ایندکــس DI،SI که داخل اسکوئر براکت هستن برای رفرنس های حافظه کدگذاری شدن برای این استفاده میشن آدرس دهی غیر مســتقیم به طور کلی برای متغیرهای دارای چند تا عنصر مثل آرایه ها استفاده میشن
#Registers
#registeraddresing
آدرس دهی فوری immediate addressing
یک ثابت فوریه اولین عملوند طول داده را مشخص میکنه.
Direct memory addressing ادرس دهی حافظه مستقیم
آدرس دهی، به پردازش کندتر داده میشه برای قرار دادن مکان دقیق داده هــا در حافظه، به آدرس start segment نیاز داریم که معمولا در ثبات DS و یک مقدار offset وجود داره به این مقدار افست آدرس موثر میگیم در حالت آدرس دهی مستقیم، مقدار افست مستقیما به عنوان بخشی از دستورالعمل مشــخص میشه که معموال با نام متغیر مشخص میشه اسمبلر مقدار افست رو محاسبه میکنهو یک جدول symbol رو نگه میداره که مقادیر جبران کلیه متغیرهای مورد استفاده در برنامه رو ذخیره میکنه در آدرس دهی مســتقیم حافظه، یکی از عملوندها به یک مکان حافظه و عملوند
دیگری به یک ثبات اشاره میکنه.
آدرس دهی افست مستقیم Direct offset addressing
به عنوان مثال به مثال های زیر توجه کنید که جداول داده data of tables رو تعریف میکنه
آدرس دهی غیر مستقیم حافظه
میکنــه به طور کلی ثبات های پایه EBX، EBP( یا BX، BP )و رجیســترهای ایندکــس DI،SI که داخل اسکوئر براکت هستن برای رفرنس های حافظه کدگذاری شدن برای این استفاده میشن آدرس دهی غیر مســتقیم به طور کلی برای متغیرهای دارای چند تا عنصر مثل آرایه ها استفاده میشن
#Registers
#registeraddresing
👍4