Вот как аппаратное обеспечение читает программное обеспечение

Как разработчики, мы изучили разработку программного обеспечения с использованием таких языков программирования, как javascript, java, ruby, golang, python и т. д. Но на самом деле мы никогда не задумывались о том, как программное и аппаратное обеспечение взаимодействуют/общаются друг с другом, чтобы фактически создавать желаемый результат.

ИСТОРИЯ

Что ж, чтобы понять, как это на самом деле работает, нам нужно вернуться в 1883 год, когда первый компьютер был создан отцом компьютеров Чарльзом Бэббиджем. Он с помощью Ады Лавлейс создал то, что считается первым компьютером под названием «Аналитическая машина». Алгоритмы, представленные Адой Лавлейс, стали первым языком программирования, хотя они предназначались только для работы аналитической машины и не были представлены в коммерческих целях. Таким образом, Ада Лавлейс считалась первым программистом в истории. Написанные алгоритмы считывались с перфокарт, бумажной ленты или магнитной ленты, интерпретировались локальной машиной и формально выполнялись. Да, именно так зародились языки программирования. Перенесемся через 60 лет. Джон Мочли представил первый мощный современный компьютер в 1943 году под названием ENIAC (электронный числовой интегратор и компьютер). Он был более чем в 1000 раз мощнее любого другого предыдущего компьютера. ENIAC не был компьютером с хранимой программой. Вместо этого это было больше похоже на набор электронных арифмометров, управляемых паутиной электрических кабелей. Его нужно было запрограммировать с помощью коммутационной панели и трех «переносных функциональных таблиц» для ввода таблиц чисел. Да, ENIAC не использовал правильный язык программирования для разработки своей операционной системы, но все же использовал современный системный подход, который привел к разработке UNIAC. Это был компьютер, который был частично запрограммирован на PAL-11R, языке ассемблера и ассемблере для дисковой операционной системы PDP-11. , ДОС-11.

А вот как работал язык ассемблера PAL:

/PDP-8 PAL ASSEMBLY LANGUAGE PROGRAM TO PRINT HELLO WORLD!

        *200                    /LOCATE PROGRAM STARTING AT ADDR 200
        AIX1=10                 /SETUP AUTOINDEX REGISTER 1

        CLA                     /CLEAR ACCUMULATOR
        CLL                     /CLEAR AC LINK
        TAD CHRSTR              /LOAD 1ST WRD OF CHRSTR (WHICH IS
                                /THE ADDR OF CHRSTR)
        DCA AIX1                /STORE THAT IN AUTOINDEX REG 1

LOOP,   NOP                     /TOP OF LOOP TO READ AND PRINT STRING
                                /I USE A NOP JUST TO MAKE IT EASIER TO
                                /INSERT CODE BELOW THE LABEL.
        TAD I AIX1              /INCR ADDR IN AIX1, THEN LOAD AC FROM THAT
        SNA                     /IF AC IS NOT ZERO, SKIP NEXT INSTRUCTION
        JMP I [7600             /EXIT PROGRAM (BACK TO MONITOR)
        JMS TTYO                /CALL OUTPUT ROUTINE
        JMP LOOP                /REPEAT LOOP

TTYO,   0                       /TTY OUTPUT ROUTINE. THE FIRST WORD OF
                                /A SUBROUTINE MUST BE EMPTY (0) BECAUSE
                                /THE JMS INSTRUCTION INSERTS THE RETURN
                                /ADDR IN THIS WORD.
        TLS                     /WRITE AC TO THE OUTPUT DEVICE (TTY)
        TSF                     /IF TTY IS READY, SKIP NEXT INSTRUCTION.
        JMP .-1                 /TTY IS NOT READY, SO CHECK AGAIN
        CLA                     /CLEAR AC
        JMP I TTYO              /RETURN TO CALLER

CHRSTR, .                       /1ST WORD IS ADDR OF STRING
        110                     /H
        105                     /E
        114                     /L
        114                     /L
        117                     /O
        040                     /
        127                     /W
        117                     /O
        122                     /R
        114                     /L
        104                     /D
        041                     /!
        000                     /<EOT>

Я знаю, что это выглядит странно по сравнению с языками программирования нового поколения, но так было раньше.

Вам нужна конфиденциальность в Интернете с лучшим VPN, но по низким ценам? Попробуйте NordVPN по нашей партнерской ссылке и получите максимальную скидку 65%!

ПЕРВЫЙ ЯЗЫК ПРОГРАММИРОВАНИЯ

Да, хотя PAL Assembler был «языком программирования», он не был коммерчески доступен для всех. Fortran (Formula Translation) был первым «коммерчески» доступным языком программирования, созданным командой под руководством Джона Бэкуса из IBM (International Business Machines). Он имел функциональную реализацию современного интерпретатора (Синтаксис -> Машинный язык) и широко использовался ранними разработчиками. Вскоре параллельно были созданы COBOL (общий бизнес-ориентированный язык) и другие современные языки программирования.

КАК ЯЗЫК ПРОГРАММИРОВАНИЯ ВЗАИМОДЕЙСТВУЕТ С ОБОРУДОВАНИЕМ?

Давайте представим пример для более легкого понимания. У вас есть код на python, который должен быть скомпилирован компилятором pythonic. Компиляция — это процесс перевода одного языка на другой. Python должен перевести свою концепцию кода в ассемблерный код для аппаратной интерпретации. Это байт-код, хранящийся в файле pyc или pyo. Ассемблерный код, как обсуждалось ранее, очень близок к аппаратному обеспечению машины, поскольку он зависит от наборов команд, которые затем преобразуются в двоичные числа, то есть 0 и 1, которые фактически представляют цифровую подачу напряжения на транзисторы внутри микросхемы. Так как есть искра цифрового напряжения, созданная байт-кодом, необходимая машине. Эти напряжения фактически подключают правильную схему внутри чипа и выполняют эту конкретную задачу, например, сложение, вычитание и т. д. Все эти операции выполняются комбинацией маленьких транзисторов, если мы переходим на низкий уровень или триггеры, которые представляют собой комбинацию вентилей и вентилей. комбинация транзисторов. Чип имеет множество цепей внутри него для выполнения различных задач, таких как арифметические и логические задачи. Аппаратное обеспечение компьютера также содержит ОЗУ, которое является еще одним чипом, который может временно хранить данные, и жесткий диск, который может постоянно хранить данные. Да, python не компилируется в байт-код напрямую, вместо этого он имеет так называемый интерпретатор pythonic на языке программирования C, известный как python. Существует также Java-реализация интерпретатора Python, называемая Jython.

Нужен хороший хостинг? Попробуйте Bluehost!

Чтобы попробовать это самостоятельно, создайте файл с именем generate_bytecode.py или с любым другим именем. И добавьте в него какой-нибудь код, например:

#generate_bytecode.py
print("hello world")

затем в командной строке введите:

python -m py_compile generate_bytecode.py

Это создает generate_bytecode.pyc, содержащий скомпилированный байт-код python. Чтобы проверить, работает ли байт-код так же, как неинтерпретируемый python, вы можете запустить

python generate_bytecode.pyc

Который по-прежнему будет давать тот же результат. Вы можете увидеть инструкции байт-кода, используя встроенный модуль Python с именем dis.

1           0 LOAD_CONST               0 ('Hello World')
              3 PRINT_ITEM          
              4 PRINT_NEWLINE       
              5 LOAD_CONST               1 (None)
              8 RETURN_VALUE

ВЫВОД

Язык уровня ассемблера — это единственный способ, с помощью которого язык программирования взаимодействует с оборудованием, используя цифровую связь по напряжению, которая генерируется нулями и единицами. Невероятно узнать о впечатляющей концепции напряжения, цепей и транзисторов, которые помогают нам создавать превосходное программное обеспечение.

Если вам понравилась эта статья, почему бы вам не присоединиться к нашему сообществу в discord, чтобы обсудить другие интересные темы!!