دستورالعمل XOR
عملیات XOR بیتی را اجرا میکند عملیات XOR مقدار بیت حاصل رو به یک تنظیم میکنه و فقط اگر بیت های مربوط به عملوند Operand متفاوت باشن اگر بیت های مربوط به عملوند ها یکسان باشن هر دو صفر میشن یا هر دو یک بیت حاصل 0 میشه مثال:
Operand1: 0101
Operand2: 0011
After XOR -> Operand1 0110
نکته: XOR کردن یک عملوند به خودی خود عملوند را به 0 تغییر میده این برای پاک
کردن یک رجیستر استفاده میشه
XOR EAX,EAX
#xor
#command
#operand
عملیات XOR بیتی را اجرا میکند عملیات XOR مقدار بیت حاصل رو به یک تنظیم میکنه و فقط اگر بیت های مربوط به عملوند Operand متفاوت باشن اگر بیت های مربوط به عملوند ها یکسان باشن هر دو صفر میشن یا هر دو یک بیت حاصل 0 میشه مثال:
Operand1: 0101
Operand2: 0011
After XOR -> Operand1 0110
نکته: XOR کردن یک عملوند به خودی خود عملوند را به 0 تغییر میده این برای پاک
کردن یک رجیستر استفاده میشه
XOR EAX,EAX
#xor
#command
#operand
👍5
ساختار شرطی در زبان اسمبلی
اجرای شرط ها به زبان اسمبلی توسط چندین دستورالعمل حلقه و branching
پرش انجام میشه این دستورالعمل ها میتونن جریان کنترل رو داخل یک برنامه
تغییر بدن اجرای شرط ها در دو سناریو مشاهده میشن مثال:
#اسمبلی
#jump_conditional
#jump_unconditional
#loop
#حلقه
اجرای شرط ها به زبان اسمبلی توسط چندین دستورالعمل حلقه و branching
پرش انجام میشه این دستورالعمل ها میتونن جریان کنترل رو داخل یک برنامه
تغییر بدن اجرای شرط ها در دو سناریو مشاهده میشن مثال:
روش غير شرطی Jump unconditional
توسط دســتورالعمل JMP انجام میشه اجرای شرط ها اغلب شامل انتقال
كنترل به آدرس دستورالعملیه كه از دستورالعمل اجرای الان پیروی
نمی کنه انتقال کنترل ممکنه رو به جلو باشه برای اجرای مجموعه
جدیدی از دستورالعمل یا قبلی اجرای دوباره همون مراحل
پرش شرطی jump Conditional#assembly
بســته به شــرایط توســط مجموعــه ای از دســتورالعمل هــای پرش j condition انجام میشه دستورالعمل های شرطی کنترل رو با
شکستن جریان پی در پی انتقال میدن و اونا رو با تغییر مقدار افست در IP انجام میدن
#اسمبلی
#jump_conditional
#jump_unconditional
#loop
#حلقه
👍7
دستورالعمل CMP
دو عملوند رو مقایســه میکنه معمولا در اجرای شرطی مورد اســتفاده قرار میگیره این دستورالعمل اساسا برای مقایسه این که آیا عملوند برابره یا نه یک عملوند رو از عملوند دیگه کم میکنه که باعث اختلال در عملوند های منبع یا مقصد نمیشه از اون به همراه دستورالعمل پرش شرطی برای تصمیم گیری استفاده میشه مثال CMP:
خب حالا CMP چکار میکنه دو فیلد داده عددی رو مقایسه میکنه عملوند مقصد میتونه در ثبات یا در حافظه باشه عملوند منبع میتونه یک داده ثابت فوری ثبات یا حافظه باشه بیش تر برای مقایسه این که یک مقدار شمارنده به تعداد دفعاتی که یک حلقه برای اجرا نیاز داره رسیده استفاده میشه
#cmp
#command
#operand
دو عملوند رو مقایســه میکنه معمولا در اجرای شرطی مورد اســتفاده قرار میگیره این دستورالعمل اساسا برای مقایسه این که آیا عملوند برابره یا نه یک عملوند رو از عملوند دیگه کم میکنه که باعث اختلال در عملوند های منبع یا مقصد نمیشه از اون به همراه دستورالعمل پرش شرطی برای تصمیم گیری استفاده میشه مثال CMP:
CMP operand1,operand2Operand1 = 10
Operand2 = 20
CMP 10,5خب حالا CMP چکار میکنه دو فیلد داده عددی رو مقایسه میکنه عملوند مقصد میتونه در ثبات یا در حافظه باشه عملوند منبع میتونه یک داده ثابت فوری ثبات یا حافظه باشه بیش تر برای مقایسه این که یک مقدار شمارنده به تعداد دفعاتی که یک حلقه برای اجرا نیاز داره رسیده استفاده میشه
#cmp
#command
#operand
👍15🔥1
دوستان ری اکشن بزنید که قوی تر بریم جلو و اگه میتونید لطفا کانال رو Share کنید
👍15
پرش غير شرطی Jump Unconditional
همان طور که قبلا گفتیم این کار با دستور JMP انجام میشه اجرای شرط ها
اغلب شــامل انتقال كنترل به آدرس دستورالعملی اســت كه از دستورالعمل اجرای
كنونی پیروی نمی کنه انتقال کنترل ممکنه رو به جلو باشــه برای اجرای مجموعه جدیدی از دستورالعمل یا قبلی اجرایی دوباره همان مراحل دســتورالعمل JMP اسم لیبلی رو در اختیار شما قرار میده که سریعا جریان کنترل
انتقال داده بشه سینتکس دستورالعمل JMP به شکل زیر است:
JMP label
#jmp
#unconditional
#پرش
#غیرشرطی
همان طور که قبلا گفتیم این کار با دستور JMP انجام میشه اجرای شرط ها
اغلب شــامل انتقال كنترل به آدرس دستورالعملی اســت كه از دستورالعمل اجرای
كنونی پیروی نمی کنه انتقال کنترل ممکنه رو به جلو باشــه برای اجرای مجموعه جدیدی از دستورالعمل یا قبلی اجرایی دوباره همان مراحل دســتورالعمل JMP اسم لیبلی رو در اختیار شما قرار میده که سریعا جریان کنترل
انتقال داده بشه سینتکس دستورالعمل JMP به شکل زیر است:
JMP label
#jmp
#unconditional
#پرش
#غیرشرطی
👍5
پرش شرطی Jump Conditional
اگر برخی از شــروط مشــخص در پرش شرطی براورده شن جریان کنترل به
دستورالعمل هدف منتقل میشه بسته به شرایط و داده ها دستورالعمل های پرش شــرطی متعددی وجود داره برخی از اونا رو در عکس زیر میتونید ببینید
#شرطی
#conditional
#jmp
اگر برخی از شــروط مشــخص در پرش شرطی براورده شن جریان کنترل به
دستورالعمل هدف منتقل میشه بسته به شرایط و داده ها دستورالعمل های پرش شــرطی متعددی وجود داره برخی از اونا رو در عکس زیر میتونید ببینید
#شرطی
#conditional
#jmp
👍4
در عکس زیر دســتورالعمل های پرش شرطی مورد اســتفاده در داده های بدون علامت
استفاده شدن برای عملیات منطقی کاربرد دارن
استفاده شدن برای عملیات منطقی کاربرد دارن
❤🔥6👍2
اعداد در زبان اسمبلی
داده های عددی به طور کلی در سیستم دودویی نمایش داده میشن دستورالعمل
های حسابی روی داده های باینری عمل میکنن وقتی اعداد روی صفحه نمایش
داده میشن یا از صفحه کلید وارد میشن به شکل ASCII هستن
داده های عددی به طور کلی در سیستم دودویی نمایش داده میشن دستورالعمل
های حسابی روی داده های باینری عمل میکنن وقتی اعداد روی صفحه نمایش
داده میشن یا از صفحه کلید وارد میشن به شکل ASCII هستن
👍3
اعداد دودویی را میتوان به چند شکل نشان داد:
فرم ASCII
فرم دهی (BCD) Binary Coded Decimal
نمایش ASCII
فرم ASCII
فرم دهی (BCD) Binary Coded Decimal
نمایش ASCII
👍4
نمایش ASCII اعداد دهدهی به عنوان رشته ای از کاراکترهای ASCII ذخیره
میشن به عنوان مثال مقدار دهدهی 1234 به صورت زیر ذخیره میشه
34H 33 32 31
که 31H مقدار ASCII برای 1 اســت H32 مقدار ASCII برای ۲ است و غیره
چهار دستورالعمل برای پردازش اعداد در نمایش ASCII وجود دارد
میشن به عنوان مثال مقدار دهدهی 1234 به صورت زیر ذخیره میشه
34H 33 32 31
که 31H مقدار ASCII برای 1 اســت H32 مقدار ASCII برای ۲ است و غیره
چهار دستورالعمل برای پردازش اعداد در نمایش ASCII وجود دارد
*AAA - Ascii Adjust After Addition
*AAS - Asciii Adjust After Subtraction
*AAM - Asciii Adjust After Multiplication
*AAD - Ascii Adjust Before Division
👍3
نمایش BCD
دو نمایش BCD وجود داره
نمایش BCD بسته بندی نشده Unpacked BCD
نمایش BCD بسته بندی شده packed BCD
در نمایش BCD بسته بندی نشــده هر بایت معادل دودویی یک رقم دسیمال را
ذخیره میکنه به عنوان مثال اعداد 1234 به صورت زیر ذخیره میشه
04H 03 02 01
برای پردازش این اعداد دو دستورالعمل وجود داره
چهار دستورالعمل تنظیم اسکی AAD و AAM و AAS و AAA با نمایش BCD بسته بندی نشده (Unpacked BCD) قابل استفاده ان در نمایش BCD بسته بندی شده هر رقم با استفاده از 4 بیت ذخیره میشه دو رقم دهدهی در یک بایت بسته بندی میشن مثال 1234به صورت زیر ذخیره میشه
برای پردازش این اعداد دو دستورالعمل وجود داره
نکته: در نمایش BCD بسته بندی شده هیچ پشتیبانی برای ضرب و تقسیم وجود نداره
دو نمایش BCD وجود داره
نمایش BCD بسته بندی نشده Unpacked BCD
نمایش BCD بسته بندی شده packed BCD
در نمایش BCD بسته بندی نشــده هر بایت معادل دودویی یک رقم دسیمال را
ذخیره میکنه به عنوان مثال اعداد 1234 به صورت زیر ذخیره میشه
04H 03 02 01
برای پردازش این اعداد دو دستورالعمل وجود داره
AAM - Ascii Adjust After Multiplication
AAD - Ascii Adjust Before Division
چهار دستورالعمل تنظیم اسکی AAD و AAM و AAS و AAA با نمایش BCD بسته بندی نشده (Unpacked BCD) قابل استفاده ان در نمایش BCD بسته بندی شده هر رقم با استفاده از 4 بیت ذخیره میشه دو رقم دهدهی در یک بایت بسته بندی میشن مثال 1234به صورت زیر ذخیره میشه
34H 12
برای پردازش این اعداد دو دستورالعمل وجود داره
DAA - Decimal Adjust After Addition
DAS - Decimal Adjust After Subtractionنکته: در نمایش BCD بسته بندی شده هیچ پشتیبانی برای ضرب و تقسیم وجود نداره
👍3
بیت ها (bit) در مهندسی معکوس
در مهندسی معکوس بیت ها که کوتاه شده از "binary digit" استفاده میشن مهمترین نقش رو دارن از اونجا که اطلاعات در سیستمها و فایلها به صورت بیتی ذخیره میشن مهندسین معکوس برای تحلیل و بازسازی اطلاعات از بیتها استفاده میکنن
بیتها به عنوان واحدهای کوچیکتر دادهها که معمولا با مقادیر 0 و 1 هستن و در قالب رشتههای بیتی در فایلها و حافظههای سیستم ذخیره میشن به مهندسین معکوس کمک میکنند تا اطلاعات رو تحلیل کنن و به حالت اولیه اون برگردن این فرایند از تحلیل فایلهای باینری یا کدگذاری دیجیتالی تا بازگشت دادههای اصلی با بهرهگیری از بیتها انجام میشه
جا به جایی بیت ها در دو مرحله انجام میشه اول به صورت پایین جا به جا میشن و بعد به صورت بالا
در مهندسی معکوس بیت ها که کوتاه شده از "binary digit" استفاده میشن مهمترین نقش رو دارن از اونجا که اطلاعات در سیستمها و فایلها به صورت بیتی ذخیره میشن مهندسین معکوس برای تحلیل و بازسازی اطلاعات از بیتها استفاده میکنن
بیتها به عنوان واحدهای کوچیکتر دادهها که معمولا با مقادیر 0 و 1 هستن و در قالب رشتههای بیتی در فایلها و حافظههای سیستم ذخیره میشن به مهندسین معکوس کمک میکنند تا اطلاعات رو تحلیل کنن و به حالت اولیه اون برگردن این فرایند از تحلیل فایلهای باینری یا کدگذاری دیجیتالی تا بازگشت دادههای اصلی با بهرهگیری از بیتها انجام میشه
جا به جایی بیت ها در دو مرحله انجام میشه اول به صورت پایین جا به جا میشن و بعد به صورت بالا
👍3
طول رشته های متغیر میتونن به اندازه لازم کاراکتر داشته باشن به طور کلی طول رشته را با دو روش مشخص میکنیم
* معمولا طول رشته ذخیره میشه
* با استفاده از یک کاراکتر sentinel
میتونیم طول رشته رو با استفاده از نماد $ که نشون دهنده مقدار فعلی ذخیره کنیم مثال:
msg db َ Hello,Friendَ ,0xa
len equ $ - msg
اشــاره به بایت بعد از آخرین کاراکتر متغیر رشته msg بنابراین msg-$ طول رشته رو به ما میده
* معمولا طول رشته ذخیره میشه
* با استفاده از یک کاراکتر sentinel
میتونیم طول رشته رو با استفاده از نماد $ که نشون دهنده مقدار فعلی ذخیره کنیم مثال:
len equ $ - msg
اشــاره به بایت بعد از آخرین کاراکتر متغیر رشته msg بنابراین msg-$ طول رشته رو به ما میده
👍4
(Shadow space) فضای سایه چیست ؟
فضای سایه به عنوان یک مکان موقت برای ذخیرهسازی آرگومانهای ورودی عمل میکنه این فضا معمولاً به اندازهی 128 بایته و برای نگهداریه مقادیر ورودی به توابع استفاده میشه
فضای سایه به عنوان یک مکان موقت برای ذخیرهسازی آرگومانهای ورودی عمل میکنه این فضا معمولاً به اندازهی 128 بایته و برای نگهداریه مقادیر ورودی به توابع استفاده میشه
👍5