(Two's Complement 1/2)
شاید براتون سوال شده باشه
کامپیوتر جمع رو میتونه راحت جمع انجام بده اما تفریق رو وقتی بهش میدی دیگه مثل حالت عادی عملیات رو انجام نمیده.
بر فرض مثال داریم:
انسان راحت میتونه حساب کنه که میشه
اما کامپیوتر چطور حساب میکنه؟
کامپیوتر میاد همین عملیات رو تبدیل به جمع میکنه، اما چطوری؟ (باید بگم ممنون شما چطوری؟)
واسه اینکه این عملیات تفریق تبدیل به عملیات جمع بشه عدد دوم که تو مثال ما
خب
بریم ببینیم چطوری
خیلی سادست. یه چیزی داریم به اسم مکمل 1 که با
کامپیوتر برای انجام هر عملیات تفریقی از روش
از اونجایی که میدونیم زبان ماشین فقط و فقط
واسه تبدیل کردن عدد
از اونجایی که میخوام تا
خب حالا میام میگم کدوم یکی از این توانهای
منطقا میشه
حالا این عدد
خب حاصل
خب حالا که تبدیل رو انجام دادیم، 25 رو هم تبدیل میکنیم چون به هر دو عدد برای تفریق نیاز داریم:
گفتیم کامپیوتر میاد علامت عدد دومی که تو مثال ما
اول میایم
چطوری؟ باید بیایم عدد
حالا معکوس یعنی چی؟ یعنی به جای
پس معکوس ما شد
حالا که مرحله
چطوری؟ به معکوس شده میایم یکی اضافه کنیم یعنی
جمع دو عدد
از سمت راست به سمت چپ.
سمت راست داریم
خب منطقا در ریاضیات میدونیم جمع
برای راحتی در گفتار میتونیم بگیم
حالا
پس بعدی میشه
دیگه چیزی نداریم پس بقیه اعداد رو خودش رو مینویسیم:
حالا که عدد
@ZeroX_0Day
شاید براتون سوال شده باشه
Computer چطوری میاد عملیات Subtract یا همون تفریق رو انجام میده؟کامپیوتر جمع رو میتونه راحت جمع انجام بده اما تفریق رو وقتی بهش میدی دیگه مثل حالت عادی عملیات رو انجام نمیده.
بر فرض مثال داریم:
25 - 18
انسان راحت میتونه حساب کنه که میشه
7اما کامپیوتر چطور حساب میکنه؟
کامپیوتر میاد همین عملیات رو تبدیل به جمع میکنه، اما چطوری؟ (باید بگم ممنون شما چطوری؟)
واسه اینکه این عملیات تفریق تبدیل به عملیات جمع بشه عدد دوم که تو مثال ما
18 هست باید منفی بشه. پس کامپیوتر چنین کاری میکنه:25 + (-18)
خب
25 که همونه، یه عملیات Operator عوض شده و یه علامت 18 که شده 18-بریم ببینیم چطوری
18 میشه 18-خیلی سادست. یه چیزی داریم به اسم مکمل 1 که با
One's Complement شناخته میشه. یه چیز دیگه هم داریم به مکمل دو که با Two's Complement شناخته میشه.کامپیوتر برای انجام هر عملیات تفریقی از روش
Two's Complement استفاده میکنه.از اونجایی که میدونیم زبان ماشین فقط و فقط
0 و 1 رو درک میکنه پس باید عدد رو تبدیل به Binary کنیم. خب 18- رو که بلد نیستیم حساب کنیم، بزار اول بیایم روی 18 کار کنیم. (نتیجه: پس هر عددی به ما دادن منفی بود در نظر نمیگیریم و میریم سراغ همون عدد اما از نوع مثبتش)واسه تبدیل کردن عدد
18 به Binary راحت ترین حرکت استفاده از توان های 2 یا به عبارت دیگهای Two Powers هست. (تقسیم چکشی متوالی 2 هم هست اما روش به درد نخوری هست) از اونجایی که میخوام تا
bit 8 حساب کنم پس تا 7^2 رو مینویسم که میشه 128128 64 32 16 8 4 2 1
خب حالا میام میگم کدوم یکی از این توانهای
2 از 18 کمتره؟منطقا میشه
16. پس میام یه تفریق ریز انجام میدم.18 - 16 = 2
حالا این عدد
2 که حاصل تفریق ما شد به کدوم یکی از این توانهای دو میخوره؟ یه توان 2 داریم پس منها میکنیم.2 - 2 = 0
خب حاصل
0 شد، در نتیجه بریم سراغ توان 2هایی که ازشون استفاده کردیم. 16 و 2 رو برابر با 1 قرار میدیم، توان 2هایی که استفاده نکردیم رو همه رو 0 میزاریم. بنابراین میشه:128 64 32 16 8 4 2 1
0 0 0 1 0 0 1 0
(00010010)
خب حالا که تبدیل رو انجام دادیم، 25 رو هم تبدیل میکنیم چون به هر دو عدد برای تفریق نیاز داریم:
128 64 32 16 8 4 2 1
0 0 0 1 1 0 0 1
(00011001)
گفتیم کامپیوتر میاد علامت عدد دومی که تو مثال ما
18 هست رو تغییر میده میکنه -18، چطوری؟اول میایم
One's Competent انجام میدیم. چطوری؟ باید بیایم عدد
Binary که به دست اوردیم رو به اصطلاح Invert کنیم یا معکوس کنیم. حالا معکوس یعنی چی؟ یعنی به جای
0 عدد 1 بگذاریم و به جای 1 عدد 0.18 in Binary:
00010010
Inverted:
11101101
پس معکوس ما شد
00010010حالا که مرحله
One's Complement رو انجام دادیم، میریم سراغ مرحله Two's Complement: چطوری؟ به معکوس شده میایم یکی اضافه کنیم یعنی
1+:11101101
+ 1
-----------
جمع دو عدد
Binary:از سمت راست به سمت چپ.
سمت راست داریم
1+1. خب منطقا در ریاضیات میدونیم جمع
1+1 میشه 2 اما اینجا دنیای Binary هست و رنج اعدادی که داریم فقط 0 و 1 هست.برای راحتی در گفتار میتونیم بگیم
1 + 1 شده 10.حالا
0 رو میزاریم و 1 باقی مانده رو میدیم سمت چپی که اصطلاحا میگن این 1 اینجا Carry شده.پس بعدی میشه
0 + 1 Carry که میشه خود 1.دیگه چیزی نداریم پس بقیه اعداد رو خودش رو مینویسیم:
1
11101101
+ 1
---------------------
11101110
حالا که عدد
18 رو ماهم مثل کامپیوتر کردیم 18- میریم سراغ جمع کردنش:00011001 —> 25
+ 11101110 —> -18
————————————----
1000000111
@ZeroX_0Day
👍1
(Two's Complement 2/2)
چطوری اینطوری شد؟
خب میایم اول میگیم
بعدش باز میگیم
باز دوباره
حالا اینجا داریم
حالا داریم
بعدش میرسیم به
در اخر میرسیم به
میبینیم که تعداد ارقام شده
حالا میایم با استفاده از توان های
پس داریم (اونایی که
خب
@ZeroX_0Day
چطوری اینطوری شد؟
خب میایم اول میگیم
0 + 1 که می شود 1 پس قرار میگیره اون پایین.بعدش باز میگیم
0 + 1 که می شود 1 پس قراره میگیره اون پایین.باز دوباره
0 + 1 که می شود 1 پس قرار میگیره اون پایین.حالا اینجا داریم
1 + 1 که گفتیم فرض میکنیم تو گفتار داریم میگیم میشه 10 پس 0 رو مینویسیم پایین 1 می شود Carry میدیم به سمت چپی.حالا داریم
0 + 1 که می شود 1 اما یه 1 Carry هم بالاش داریم پس میشه 10 که باز 0 رو مینویسیم 1 می شود Carry میدیم به سمت چپی.بعدش میرسیم به
0 + 1 که می شود 1 اما باز داریم میبینم بالاش یه 1 Carry هست که باز می شود 10 که باز 0 رو مینویسیم همچنان 1 Carry میشه میدیم به سمت چپی.در اخر میرسیم به
0 + 1 که میدونیم میشه 10 اما یه 1 Carry داریم که میشه 10 و اینجا میبینم دیگه سمت چپ تمومه پس چیزی نداریم که بخوایم 0 رو بنویسیم و 1 رو دوباره Carry کنیم. بنابراین خود 10 رو کامل مینویسیم که میشه:100000111
میبینیم که تعداد ارقام شده
9 در حالی که قبلا 8 بود. پس اون 9امی که اینجا 1 هست رو خط میزنیم و در نظر نمیگیریم:00000111
حالا میایم با استفاده از توان های
2 حساب میکنیم ببینم این عدد چنده:128 64 32 16 8 4 2 1
0 0 0 0 0 1 1 1
پس داریم (اونایی که
1 هست خونههاش رو جمع میکنیم):4 + 2 + 1 = 7.
خب
(18-)+25 می شود 7. جوابی که انسان هم یکی در میاد و دیدیم که کامپیوتر چطوری حساب میکنه و به این عدد میرسه.References:
- https://en.wikipedia.org/wiki/Two%27s_complement
- https://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html#:~:text=Two's%20complement%20is%20the%20way,add%20one%20to%20the%20result.
- https://stackoverflow.com/questions/1049722/what-is-twos-complement
- https://www.freecodecamp.org/news/microprocessors-romance-with-integers/#:~:text=The%20leftmost%20or%20the%20most,tells%20us%20the%20actual%20magnitude.
@ZeroX_0Day
اگه براتون سوال هست
@ZeroX_0Day
Bit و Byte چی هستند میتونید به این مطلب از بیشتر بدانیم فیزیک (1) - صفحه 13 از رشته ریاضی فیزیک پایه دهم یه نگاهی بندازید.@ZeroX_0Day
(Matrix 1/5)
ماتریکس چیست و کاربرد آن در Computer Science چه چیزی است؟
- اول بیایم یک تعریف از
ماتریکس به یک آرایش مستطیل (به آرایش مستطیلی
به اعداد یا عبارت یا به طور کلی هر چیزی که داخل
به هر یک از عناصر داخل ماتریکس به زبان فارسی دِرایه گویند.
سطر رو
از حرف m برای سطر و حرف n برای ستون استفاده میکنیم که در نتیجه برسیم به m×n
بنابراین: m میشود
کاربرد
@ZeroX_0Day
ماتریکس چیست و کاربرد آن در Computer Science چه چیزی است؟
- اول بیایم یک تعریف از
Matrix داشته باشیم تا بهتر بتونیم درکش کنیم:ماتریکس به یک آرایش مستطیل (به آرایش مستطیلی
Rectangular Array هم گویند) شکلی از اعداد یا عبارتهای ریاضی گویند که به صورت سطر و ستون نوشته بشه - یعنی جوری که هر ستون یا هر سطر در ماتریکس، یک بردار را تشکیل بده.به اعداد یا عبارت یا به طور کلی هر چیزی که داخل
Matrix قرار گیرد یک عنصر یا یک Element گویند که برای نشان دادن یک Mathematical Object یا Property Of An Object استفاده میشود.به هر یک از عناصر داخل ماتریکس به زبان فارسی دِرایه گویند.
سطر رو
Rows نشان میدهیم و ستون رو Columns مینامیم.از حرف m برای سطر و حرف n برای ستون استفاده میکنیم که در نتیجه برسیم به m×n
بنابراین: m میشود
Rows که به صورت افقی یا همان Horizontal و همچنین n میشود Columns که به صورت عموی یا همان Vertical است.Rows —> HorizontalColumns —> Verticalکاربرد
Matrix رو میشه توی یک سری از Algorithmsهای مهم تو زمینه CS دونست. برای مثال یکی از کاربردهای Matrix زمانی هست که Graphic از Matrix برای Process و پردازش عکس مورد نظر ما به عنوان نتیجه نهایی میکنه.@ZeroX_0Day
🔥4
0xDay
(Matrix 3/5) چگونه یک عنصر یا Element در ماتریکس A را تشخیص دهیم؟ @ZeroX_0Day
(Matrix 4/5)
نحوه پیاده سازی ماتریکس A که تو مثال بالا داشتیم در
@ZeroX_0Day
نحوه پیاده سازی ماتریکس A که تو مثال بالا داشتیم در
C با استفاده از آرایههای 2 بعدی. (2D Arrays)@ZeroX_0Day
0xDay
(Matrix 4/5) نحوه پیاده سازی ماتریکس A که تو مثال بالا داشتیم در C با استفاده از آرایههای 2 بعدی. (2D Arrays) @ZeroX_0Day
(Matrix 5/5)
خروجی کد.
@ZeroX_0Day
خروجی کد.
References:
- https://en.wikipedia.org/wiki/Matrix_(mathematics)
- https://www.youtube.com/watch?v=yRwQ7A6jVLk
- https://www.youtube.com/watch?v=lQ2DB5TPH1o
- https://www.w3schools.com/c/c_arrays_multi.php
- https://users.cs.utah.edu/~germain/PPS/Topics/matrix.html
- https://www.cs.swarthmore.edu/~newhall/unixhelp/C_arrays.html
- http://electron9.phys.utk.edu/optics421/modules/Numerical/matrix.htm
- https://ocw.mit.edu/courses/6-s096-effective-programming-in-c-and-c-january-iap-2014/295f17e070b66cbec4a88de25ff3694f_MIT6_S096IAP14_ass1_p2.pdf
@ZeroX_0Day
(Register Flags 1/1)
ثبات پرچم یا همان
رجیستر فلگ چیزی هست که داخل
حالا در معماری
رجیستر فلگهای مهمی داریم مثل:
1 -🫥
2 -🫥
3 -🫥
4 -🫥
5 -🫥
6 -🫥
حالا که با فلگهای مهم آشنا شدیم، باید بدونیم نسبت به هر عملیاتی که توسط
توضیح هر
1 - اگر در فلگ
2 - اگر در فلگ
3 - اگر در فلگ
4 - اگر در فلگ
5 - اگر در فلگ
6 - اگر در فلگ
References:
@ZeroX_0Day
ثبات پرچم یا همان
Register Flag چیست؟رجیستر فلگ چیزی هست که داخل
Central Processing Unit (CPU) یا همون پردازنده هست که یک سری Bit رو نگهداری میکنه که این Bitها نمایش دهنده وضعیت عملیلتهای مختلفی هست که CPU انجام داده.حالا در معماری
X86 رجیستر فلگ 16 بیت (Bit) هست که شامل اطلاعاتی هست که پس از انجام یک کاری انجام شده. به این اطلاعات وضعیت پرچم یا Status Register هم گویند به این دلیل که نتیجه آخرین عملیات اجرا شده توسط CPU رو نشون میده. حالا این فلگها به بیتهای مختلفی تقسیم میشن که هر Bit نشان دهنده یک Flag یا به اصطلاح نشان دهنده وضعیت است.رجیستر فلگهای مهمی داریم مثل:
1 -
Carry Flag CF2 -
Zero Flag ZF3 -
Sign Flag SF4 -
OverFlow Flag OF 5 -
Parity Flag PF6 -
Auxiliary Carry Flag AFحالا که با فلگهای مهم آشنا شدیم، باید بدونیم نسبت به هر عملیاتی که توسط
CPU مثل عملیات حسابی (Arithmetic) - عملیات منطقی (Logical Operations) انجام میشه مقدار اون Flagها به 0 یا 1 تغییر میکند.توضیح هر
Register Flag:1 - اگر در فلگ
Carry Flag که آن را با CF نشان میدهیم، یک Carry از Most Significant Bit (MSB) هنگام جمع (Addition) به دست آوریم یا همینطور تفریق (Subtraction) که یک Borrow در MSB داریم مقدار CF را 1 قرار میدهیم اما در غیر این صورت مقدار CF برابر با 0 خواهد بود.2 - اگر در فلگ
ZF نتیجه برابر با 0 بود مقدار ZF می شود 1 اما برای نتیجهای که 0 نیست یا به اصطلاح Non-Zero است مقدار ZF برابر با 0 است.3 - اگر در فلگ
SF مقدار MSB برابر 1 باشد بنابراین مقدار SF هم 1 است اما اگر مقدار MSB برابر با 0 قرار گرفت مقدار SF هم 0 می شود.4 - اگر در فلگ
OF سر ریز بافر رخ دهد مقدار OF برابر با 1 است اما در غیر این صورت مقدار OF برابر با 0 خواهد بود.5 - اگر در فلگ
PF تعداد Low Byte زوج یا همان Even باشد مقدار PF برابر با 1 است اما اگر تعداد Low Byte فرد یا Odd بود بنابراین مقدار PF هم برابر با 0 خواهد بود.6 - اگر در فلگ
AF عملیات حسابی یا همان (Arithmetic Operations) یک Carry یا یک Borrow رخ دهد مقدار AF برابر با 1 است در غیر این صورت مقدار AF برابر با 0 خواهد بود.References:
- https://en.wikipedia.org/wiki/FLAGS_register
- https://www.geeksforgeeks.org/flag-register-8086-microprocessor/
- https://www.cs.princeton.edu/courses/archive/fall09/cos375/IA32StatusFlags.pdf
- https://stackoverflow.com/questions/73362953/how-is-the-overflow-flag-not-set-after-this-addition
- https://www.eecg.toronto.edu/~amza/www.mindsec.com/files/x86regs.html
- https://www.cs.uaf.edu/2009/fall/cs301/lecture/12_07_flags.html
@ZeroX_0Day
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
ممکنه براتون سوال پیش بیاد در معماری ❓
همینطور که میدونید
1.
2.
3.
4.
5.
6.
7.
8.
رجیسترهای (
1.
2.
3.
4.
5.
6.
7.
8.
رجیسترهای (
1.
2.
3.
4.
References:
@ZeroX_0Day
X86 چه نوع Registerهایی وجود داره؟ همینطور که میدونید
X86 به معنی 32 بیت (Bits) هست که چنین Registerهایی داریم که 8تای آنها رجیسترهای عمومی 32 بیتی (Bits) یا General Purpose Registers نام دارند. (نکته: در عکس اول RAX رو برای مثال آوردم که مربوط به معماری X64 هست و بنابراین 64 Bits هست.)1.
EAX2.
EBX3.
ECX4.
EDX5.
ESI6.
EDI7.
ESP (Stack Pointer)8.
EBP (Base Pointer)رجیسترهای (
Registers) 16 بیتی (Bits):1.
AX2.
BX3.
CX4.
DX5.
SI6.
DI7.
SP8.
BPرجیسترهای (
Registers) 8 بیتی (Bits):1.
AH AL2.
BH BL3.
CH CL4.
DH DLReferences:
- https://www.cs.virginia.edu/~evans/cs216/guides/x86.html
- https://www.nayuki.io/page/a-fundamental-introduction-to-x86-assembly-programming
- https://www.geeksforgeeks.org/general-purpose-registers-8086-microprocessor/
- https://www.eejournal.com/article/mastering-x86-memory-segmentation/
- https://www.tutorialspoint.com/what-are-the-cpu-general-purpose-registers
@ZeroX_0Day
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM