ReverseEngineering
1.25K subscribers
41 photos
10 videos
55 files
666 links
Download Telegram
سینتکس در‌ زبان اسمبلی:
یک برنامه اسمبلی می تونه به سه بخش زیر تقسیم شه:

بخش 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
متغیر variable ها در زبان اسمبلی

دستورالعمل های مختلف رو جهت گرفتن فضای حافظه برای ذخیره ســازی متغیرها ارائه میدن دستورالعمل define که به شکل D نوشته میشه برای اختصاص دادن فضای ذخیره سازی استفاده میشـه
#variable
#command
🔥3
دســتور TIMES

اجازه میده تا یک مقدار رو داخل متغیر چند بار قرار بدیم به عنوان مثال آرایه ای به نام arko و اندازه 8 را میتونیم با اســتفاده از عبارت زیر تعریف کنیم و با مقدار صفر مقداردهی کنیم
دستور TIMES برای ارایه ها و جدول ها کاربرد داره

arko TIMES 8 DW 0

#times
#variable
#command
👍3🔥2
دستورالعمل های منطقی در زبان اسمبلی

مجموعه دستورالعمل پردازشگر، دستورالعمل AND، OR، XOR، TEST و NOT
منطقی Boolean رو ارائه میدن که بیت ها را مطابق نیاز برنامه تســت، تنظیم
میکنه قالب این دستورالعمل ها به شکل زیره

#command
#not
#and
#or
#xor
#test
#assembly
🔥3
دستورالعمل AND

برای پشتیبانی از عبارات منطقی با انجام عملکرد بیتی و AND
اســتفاده میشه اگر بیت های که با هم مچ یعنی بیت هایی که با هم مطابق دارن از هر دو عملوند 1 باشن‌عملکرد AND
بیتی 1 رو برمی گردونه در غیر این صورت مقدار 0 برمی گرده مثال:

Operand1: 0101

Operand2: 0011

After AND -> Operand1: 0001

نکته:از روش AND میتونیم برای صفر کردن یک یا چند بیت اســتفاده کنیم
#and
#command
#operand
👍2
دستورالعمل OR

برای پشتیبانی از عبارت های منطقی، با انجام عمل بیتی OR استفاده میشه اگر بیت های مچینگ از هر یک یا هر دو عملوند یکی
باشه عملگر OR بیتی 1 رو برمیگردونه اگر هر دو بیت صفر باشن 0 برمی گرده مثال:

Operand1: 0101

Operand2: 0011

After OR -> Operand1: 0111

نکته:از OR میتونیم برای تنظیم یک یا چند بیت استفاده کنیم
#or
#command
#operand
👍5
دستورالعمل XOR

عملیات XOR بیتی را اجرا میکند عملیات XOR مقدار بیت حاصل رو به یک تنظیم میکنه و فقط اگر بیت های مربوط به عملوند Operand متفاوت باشن اگر بیت های مربوط به عملوند ها یکسان باشن هر دو صفر میشن یا هر دو یک بیت حاصل 0 میشه مثال:

Operand1: 0101

Operand2: 0011

After XOR -> Operand1 0110

نکته: XOR کردن یک عملوند به خودی خود عملوند را به 0 تغییر میده این برای پاک
کردن یک رجیستر استفاده میشه

XOR EAX,EAX


#xor
#command
#operand
👍5
دستورالعمل TEST

مثل عملیات AND کار میکنه، اما بر عکس دستور AND اولین عملکرد رو تغییر نمیده اگر بخایم بررسی کنیم ی عدد تو ریجستری زوج‌ یا فرده میتونیم این کار رو با استفاده از دستور TEST بدون تغییر عدد اصلی انجام بدیم مثال:

TEST AL,01H

JZ EVEN_NUMBER عدد زوج


#test
#command
#operand
👍6
دستورالعمل NOT

عملیات NOT بیتی رو انجام میده عملیات NOT بیت ها رو در یک عملوند معکوس میکنه این عملوند میتونه داخل یک ریجستر یا حافظه باشه مثال:

Operand1: 0101 0011

After NOT -> Operand1: 1010 1100


#not
#operand
#command
👍5
دستورالعمل CMP

دو عملوند رو مقایســه میکنه معمولا در اجرای شرطی مورد اســتفاده قرار میگیره این دستورالعمل اساسا برای مقایسه این که آیا عملوند برابره یا نه یک عملوند رو از عملوند دیگه کم میکنه که باعث اختلال در عملوند های منبع یا مقصد نمیشه از اون به همراه دستورالعمل پرش شرطی برای تصمیم گیری استفاده میشه مثال CMP:

CMP operand1,operand2

Operand1 = 10

Operand2 = 20

CMP 10,5



خب حالا CMP چکار‌ میکنه دو فیلد داده عددی رو مقایسه میکنه عملوند مقصد میتونه در ثبات یا در حافظه باشه عملوند منبع میتونه یک داده ثابت فوری ثبات یا حافظه باشه بیش تر برای مقایسه این که یک مقدار شمارنده به تعداد دفعاتی که یک حلقه برای اجرا نیاز داره رسیده استفاده میشه
#cmp
#command
#operand
👍15🔥1