Самый примитивный язык программирования

Машинный код

Машинный код (платформенно-ориентированный код), машинный язык — система команд (набор кодов операций) конкретной вычислительной машины, которая интерпретируется непосредственно процессором или микропрограммами этой вычислительной машины. [1]

Каждая инструкция выполняет определённое (обычное элементарное) действие, такое как операция с данными (например, сложение или копирование; в регистре или в памяти) или переход к другому участку кода (изменение порядка исполнения; при этом переход может быть безусловным или условным, зависящим от результатов предыдущих инструкций). Каждая исполнимая программа состоит из последовательности таких атомарных инструкций.

Машинный код можно рассматривать как примитивный язык программирования или как самый низкий уровень представления скомпилированных или ассемблированных компьютерных программ. Хотя вполне возможно создавать программы прямо в машинном коде, сейчас это делается редко в силу громоздкости кода и трудоёмкости управления ресурсами процессора, за исключением ситуаций, когда требуется экстремальная оптимизация. Поэтому подавляющее большинство программ пишется на языках более высокого уровня и транслируется в машинный код компиляторами. Машинный код иногда называют нативным кодом (также собственным или родным кодом — от англ. native code ), когда говорят о платформенно-зависимых частях языка или библиотек. [2]

Программы на интерпретируемых языках (таких как Бейсик или Python) не транслируются в машинный код, вместо этого они либо исполняются непосредственно интерпретатором, либо транслируются в псевдокод (байт-код). Однако интерпретаторы этих языков (которые сами можно рассматривать как процессоры) как правило представлены в машинном коде.

Каждая модель процессора имеет свой собственный набор команд, хотя во многих моделях эти наборы команд сильно перекрываются. Говорят, что процессор A совместим с процессором B, если процессор A полностью «понимает» машинный код процессора B. Если процессор A знает несколько команд, которых не понимает процессор B, то B несовместим с A.

Читайте также:  Программирование фанука чпу токарные

Раньше процессоры просто выполняли инструкции одну за другой, но новые суперскалярные процессоры способны выполнять несколько инструкций за раз.

Также инструкции бывают постоянной длины (у RISC-, MISC-архитектур) и диапазонной (у CISC-архитектур; например, для архитектуры x86 команда имеет длину от 8 до 120 битов).

Микрокод

В некоторых компьютерных архитектурах поддержка машинного кода реализуется ещё более низкоуровневым слоем программ, называемых микропрограммами, что позволяет обеспечить единый интерфейс машинного языка у всей линейки или семейства компьютеров, которые могут иметь значительные структурные отличие между собой. Это делается для облегчения переноса программ в машинном коде между разными моделями компьютеров. Примером этого является семейство компьютеров IBM System/360 и их преемников: несмотря на разные шины шириной от 8 до 64 бит и выше, тем не менее у них общая архитектура на уровне машинного языка.

Использование слоя микрокода для реализации эмулятора позволяет компьютеру представлять архитектуру совершенно другого компьютера. В линейке System/360 это использовалось для переноса программ с более ранних машин IBM на новое семейство — например, эмулятор IBM 1401/1440/1460 на IBM S/360 model 40.

Абсолютный и позиционно-независимый код

Абсолютный код (англ. absolute code ) — программный код, пригодный для прямого выполнения процессором [1] , то есть код, не требующий дополнительной обработки (например, разрешения ссылок между различными частями кода или привязки к адресам в памяти, обычно выполняемой загрузчиком программ). Примерами абсолютного кода являются исполнимые файлы в формате .COM и загрузчик ОС, располагаемый в MBR. Часто абсолютный код понимается в более узком смысле как позиционно-зависимый код (то есть код, привязанный к определённым адресам памяти).

Позиционно-независимый код (англ. position-independent code ) — программа, которая может быть размещена в любой области памяти, так как все ссылки на ячейки памяти в ней относительные (например, относительно счётчика команд). Такую программу можно переместить в другую область памяти в любой момент, в отличие от перемещаемой программы, которая хотя и может быть загружена в любую область памяти, но после загрузки должна оставаться на том же месте. [1]

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

Программа «Hello, world!»

Программа «Hello, world!» для процессора архитектуры x86 (ОС DOS, вывод при помощи BIOS Int 10h (англ.) выглядит следующим образом (в шестнадцатеричном представлении побайтно):

BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21

Данная программа работает при её размещении по смещению 10016. Отдельные инструкции выделены цветом:

  • BB 11 01 , B9 0D 00 , B4 0E , 8A 07 — команды присвоения значений регистрам.
  • 43 — инкремент регистра BX.
  • CD 10 , CD 20 — вызов программных прерываний 1016 и 2016.
  • E2 F9 — команда для организации цикла.
  • Малиновым показаны данные (строка «Hello, world!»).
XXXX:0100 mov bx, 0111h ; поместить в bx смещение строки HW XXXX:0103 mov cx, 000Dh ; поместить в cx длину строки HW XXXX:0106 mov ah, 0Eh ; поместить в ah номер функции прерывания 10h XXXX:0108 mov al, [bx] ; поместить в al значение ячейки памяти, адрес которой находится в bx XXXX:010A inc bx ; перейти к следующему байту строки (увеличить смещение на 1) XXXX:010B int 10h ; вызов прерывания 10h XXXX:010D loop 0108 ; если cx≠0, то уменьшить cx на 1 и перейти по адресу 0108 XXXX:010F int 20h ; прерывание 20h: завершить программу XXXX:0111 HW db 'Hello, World!' ; строка, которую требуется напечатать

См. также

Примечания

  1. 123 Толковый словарь по вычислительным системам = Dictionary of Computing / Под ред. В. Иллингуорта и др.: Пер. с англ. А. К. Белоцкого и др.; Под ред. Е. К. Масловского. — М .: Машиностроение, 1990. — 560 с. — 70 000 (доп,) экз. — ISBN 5-217-00617-X (СССР), ISBN 0-19-853913-4 (Великобритания)
  2. Kate Gregory.Managed, Unmanaged, Native: What Kind of Code Is This? (28 апреля 2003). Архивировано из первоисточника 30 мая 2012.Проверено 27 марта 2012.

Источник

Какой самый простой язык программирования?

Самый простой или даже простейший язык программирования, который подразумевает написание кода (а не перетаскивание блоков), это Microsoft Small Basic. Он создан в 2009 году и рекомендован даже детям с 7-8 лет. Вот русскоязычный сайт с описанием и учебными материалами: http://small-basic.ru

embedded Linux Raspberry Cortex ARM MIPS Python Django Flask разработка языков программиро. · 28 янв 2022

если по изучению — я всегда Python рекомендую: логичный, простой, достаточно быстрый, куча библиотек если как сам язык — Форт — https://www.forth.com/starting-forth/ — https://www.ozon.ru/product/nachalnyy-kurs-programmirovaniya-na-yazyke-fort-31266758 если для какой-то своей программы нужен язык для написания конфигураций или простеньких скриптов — самое то. Читать далее

Попробуй глянуть в сторону python. Довольно таки простой язык программирования, тем более он сейчас востребован. Не прогадаешь, если для тебя будет сложно, то попробуй сначала на CodeBlock (вот с этой штукой поаккуратней, лучше так самые азы понять), Basic, Pascal

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

Я более 20 лет программирую на VBA и считаю что для автоматизации бизнес процессов он лучший, особенно если учесть. Читать дальше

Самый простой ЯП- это HTML. Есть и более простые ЯП но они более старые и в сегодняшнее время мало кто нуждается старыми ЯП(поправьте если я ошибаюсь). Изучайте HTML вместе CSS т.к. эти ЯП дополняют друг друга, эти ЯП нужны чтобы вы делали сайты и многие начинающие программисты начинают именно с неё.

HTML это hypertext MARKUP language и не является как таковым языком программирования. CSS также относится к. Читать дальше

Буду говорить со своей колокольни. Профессионально и ежедневно я применяю golang, php, js, есть некоторые задачки на python, но его экспертом я не являюсь.

Если вопрос заключается именно в «сложности» языка программирования, то ответ про small basic — самый корректный. Там очень мало языковых конструкций.

Но если вопрос касается порога вхождения, то здесь появляются трудности. Во-первых, выбор языка исходя из его порога вхождения является неудачным, так как выбирать надо себе сферу по душе, а не по простоте языка.

Во-вторых, внешняя простота языка иногда является подводным камнем. Легко написать код, который будет понят машиной, но сложно такой, который с легкостью будет поддерживаться человеком.

Давайте я скажу критерии, которые использую для определения простого для вхождения новичка языка: небольшое количество языковых конструкций, большая библиотека и экосистема инструментов, малое количество способов выстрелить себе в ногу, развитое коммьюнити. Под эти критерии подходит, к примеру, golang. Он прост в освоении — gobyexample.com — всего три-четыре десятка синтаксических структур. У него огромная своя библиотека и для своей области применения — веб-сервисы, у него есть все необходимое внутри. Он прямо физически мешает стрелять себе в ногу, хоть это и реально. Правда, коммьюнити у него не самое развитое — это серьезный недостаток для начинающего.

Подходит и python. Выучить синтаксис языка несложно — несколько уроков на ютуб и можно писать первые проекты. У него наверное, наиболее развитая внутренняя библиотека и экосистема для решения любых задач его области применения. Но он позволяет стрельнуть себе в ногу десятками разных способов и стать его экспертом не простая задача. Коммьюнити довольно большое и можно найти ответы на любые вопросы.

А вообще — любой язык подойдет — главное, чтобы вам лична была интересна область его применения. Нет смысла учить go, если вы хотите писать игры для мобилок и C#, если вам нужны нейронные сети.

Источник

Оцените статью