Здравейте, маниаци!! Всеки от нас на някакъв етап може би се е чудил как това програмиране работи зад кулисите. Нека да се потопим дълбоко и да разберем как работи нашата програма и да се заемем с въпроса дали нашата програма наистина работи върху пясък?

Компютърът разбира само 0s и 1s

Може да сме чували това изречение поне веднъж по време на програмирането от нашия преподавател или професор. И някои луди отговори може да се въртят в ума ни като: „Този ​​човек шегува ли се? Да не съм в грешния учител? Моят компютър може да стартира игра, да възпроизвежда музика, видеоклипове и много други неща. Как се случва всичко това с 0s и 1s”.

Но тъжната реалност е, че твърдението е вярно, компютърът е дъмп машина и знае само 0 и 1. Добре, тогава нека разберем как всичко се случва на компютър.

Ние всички пишем програми с някои езици за програмиране като C, C++, Java, C#, Python и т.н. След като програмата е написана, ние правим някаква магия (щракнете върху ▶️), която ни дава изпълним файл и когато стартираме това, компютърът разберете и ни дайте резултата.

каква е магията

Нека разберем това с няколко примера. Избрах езика C за това. Нека напишем няколко прости програми за добавяне.

int main() {
    int a=1;
    int b=2;
    int sum = a + b;
    return 0;
}

Тук сме написали програмата на език от високо ниво, който ние като хора разбираме. Но както вече обсъдихме, компютърът знае само 0 и 1. Тук идва вълшебният човек „Компилатор“, който ще вземе четим от човека код и ще го сложи в шапката си и ще получи разбираем за компютърния процесор Код за сглобяване (който по някакъв начин е четим от човека) .

main:
        push    rbp          ; push current address to base pointer register
        mov     rbp, rsp     ; move base pointer to stack pointer
        mov     DWORD PTR [rbp-4], 1     ; int a=1
        mov     DWORD PTR [rbp-8], 3     ; int b=3
        mov     edx, DWORD PTR [rbp-4]   ; move a to edx register
        mov     eax, DWORD PTR [rbp-8]   ; move b to eax register
        add     eax, edx                 ; a + b
        mov     DWORD PTR [rbp-12], eax  ; int sum = a + b
        mov     eax, 0                   ; move 0 to eax register
        pop     rbp                      ; pop the base pointer
        ret                              ; exit

Тук идва друг вълшебен човек „Асемблер“, който преобразува асемблерния код в машинен код (който компютърът разбира), представен в шестнадесетично (база16) представяне

0:  55
1:  48 89 e5
4:  c7 45 fc 01 00 00 00
b:  c7 45 f8 02 00 00 00
12: 8b 55 fc
15: 8b 45 f8
18: 01 d0
1a: 89 45 f4
1d: b8 00 00 00 00
22: 5d
23: c3

Raw Hex:

554889E5C745FC01000000C745F8020000008B55FC8B45F801D08945F4B8000000005DC3

Binary Representation:

010101010100100010001001111001011100011101000101111111000000000100000000
000000000000000011000111010001011111100000000010000000000000000000000000
100010110101010111111100100010110100010111111000000000011101000010001001
010001011111010010111000000000000000000000000000000000000101110111000011

Добре!! Обсъдихме целия процес на превод на език C на компютърен език. Но как компютърът изговаря тези числа? Нека да влезем в това.

Как компютърът говори числа?

Как говорим с числа? ние като хора използваме 10 (десетични) числа, което означава, че използваме 10 числа. така че първата цифра отляво е цифра*10⁰, втората е цифра*10¹, третата е цифра*10² и така нататък... Тъй като компютърът знае само две числа, първата цифра отляво е цифра*2⁰ , втората е цифра*2¹, третата е цифра*2² и така нататък...

Така че при десетично събиране 1+3 = 4, но за да направим това в двоично число, трябва да намерим двоичното представяне на 1 и 3, което е 0001 и 0011. 0001 + 0011 = 0100, което е 4 в десетично число. Направихме го, но как компютърът прави това? Да, за да направи тази двоична аритметика, компютърът има предварително дефинирана логика, вградена в него, която се наричаЛогически портове. Картината по-долу до голяма степен определя какво е логическа врата. Факт е, че можем да изградим всички тези порти с NAND или NOR порта. Вижте тук, където са изградили цял компютър само с NAND портове.

Но как това прави операция като добавяне? с някои уговорки можем да го накараме да прави добавяне като по-долу. И като ги свързваме паралелно, можем да създадем 4-битови или 8-битови суматори.

Какво ще кажете за изваждащите, умножителите и делителите? Чакай наистина ли имаме нужда от това, можем ли да правим изваждане като a+(-b), умножение като добавяне на a по b и деление като изваждане на a по b, n пъти? Добре, но как са направени тези логически порти?

Всичко е само включено или изключено...

Вместо да мислим в двоични числа, можем ли да мислим за това като състояние като включено (1) или изключено (0)? Да, компютърът е просто машина за състояния, която обработва милиарди състояния в секунда. И така, какво ни трябва, за да изградим тази държавна машина? Да, прав си, просто превключвател.

Човек не може да включва и изключва превключвател милиард пъти, но електрическият импулс го прави. Кой ще управлява превключвателя с електрически импулси? Ето го и нашият спасител „Транзистор“. Транзисторът е устройство, което позволява преминаването на електрически заряд въз основа на входа.

Добре!! Могат ли логическите порти да бъдат направени от транзистори? Да, диаграмата по-долу показва как NAND гейтът е направен от транзистори. Както вече обсъдихме, цял компютър може да бъде изграден от NAND порта.

С правилното подреждане на милиарди и трилиони транзистори можем да създадем напълно функционален компютър. И така, най-накрая научихме как е изграден компютърът и как изпълнява нашата програма за добавяне.

Нашата програма работи ли в пясъка?

Както всички знаем, транзисторите са направени от полупроводници, които от своя страна са направени от силиций. Нека попитаме Google „Основен източник на силиций“.

Ето ни!! Получихме отговора. Моля те, не ми крещи😜

Морален

На тамилски език има текст на песен

வெறும் கம்பங்களி தின்னவனும் மண்ணுக்குள்ளே
அட தங்கபஸ்பம் தின்னவனும் மண்ணுக்குள்ளே

Превод

Какъвто и начин на живот да следваме, в крайна сметка сме заровени в пясъка.

Същото важи и за програмирането, ако направим проста програма за добавяне или дори направим програма за изстрелване на сателит, тя ще изчезне в пясъка. Така че, продължавайте да кодирате!! Каквото и да е!! Насладете се на занаята, който изграждаме.

Наздраве!!