Способность процессора выполнять набор машинных кодов

Обновлено: 04.07.2024

Умножение двух чисел в памяти
Справа представлена ​​диаграмма, представляющая схему хранения для обычного компьютера. Основная память разделена на ячейки, пронумерованные от (строка) 1: (столбец) 1 до (строка) 6: (столбец) 4. Исполнительный блок отвечает за выполнение всех вычислений. Однако исполнительный блок может работать только с данными, загруженными в один из шести регистров (A, B, C, D, E или F). Предположим, мы хотим найти произведение двух чисел, одно из которых хранится в ячейке 2:3, а другое — в ячейке 5:2, а затем сохранить произведение обратно в ячейку 2:3.

Подход CISC
Основной целью архитектуры CISC является выполнение задачи за минимально возможное количество сборочных линий. Это достигается созданием аппаратного обеспечения процессора, способного понимать и выполнять ряд операций. Для этой конкретной задачи процессор CISC должен быть подготовлен со специальной инструкцией (мы назовем ее «MULT»). При выполнении эта инструкция загружает два значения в отдельные регистры, перемножает операнды в исполнительном блоке, а затем сохраняет произведение в соответствующем регистре. Таким образом, всю задачу умножения двух чисел можно выполнить одной инструкцией:

MULT — это так называемая «сложная инструкция». Он работает непосредственно с банками памяти компьютера и не требует от программиста явного вызова каких-либо функций загрузки или сохранения. Это очень похоже на команду на языке более высокого уровня. Например, если мы допустим, что "a" представляет значение 2:3, а "b" представляет значение 5:2, то эта команда идентична оператору C "a = a * b."

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

Подход RISC
Процессоры RISC используют только простые инструкции, которые могут быть выполнены за один такт. Таким образом, описанную выше команду «MULT» можно разделить на три отдельные команды: «LOAD», которая перемещает данные из банка памяти в регистр, «PROD», которая находит произведение двух операндов, расположенных в регистрах, и « STORE», который перемещает данные из регистра в банки памяти. Чтобы выполнить точную серию шагов, описанных в подходе CISC, программисту потребуется закодировать четыре строки ассемблера:

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

< TD>Низкое количество циклов в секунду,
большой размер кода
CISC RISC
Упор на оборудование Упор на программное обеспечение
Включает многотактовые
сложные инструкции
Однотактовые,
уменьшенные только инструкция
Память в память:
"LOAD" и "STORE"
включены в инструкции
Регистрация для регистрации :
«ЗАГРУЗИТЬ» и «СОХРАНИТЬ»
являются независимыми инструкциями
Небольшой размер кода,
большое количество циклов в секунду
Транзисторы, используемые для хранения
сложных инструкций
Затрачивает больше транзисторов
в регистрах памяти
Однако стратегия RISC также дает некоторые очень важные преимущества. Поскольку для выполнения каждой инструкции требуется только один тактовый цикл, вся программа будет выполняться примерно за то же время, что и многотактовая команда «MULT». Эти «сокращенные инструкции» RISC требуют меньше транзисторов аппаратного пространства, чем сложные инструкции, оставляя больше места для регистров общего назначения. Поскольку все инструкции выполняются за одинаковое время (т. е. за один такт), возможна конвейерная обработка.

Разделение инструкций "LOAD" и "STORE" фактически уменьшает объем работы, которую должен выполнять компьютер. После выполнения команды «MULT» в стиле CISC процессор автоматически стирает регистры. Если один из операндов необходимо использовать для другого вычисления, процессор должен повторно загрузить данные из банка памяти в регистр. В RISC операнд остается в регистре до тех пор, пока на его место не будет загружено другое значение.

Уравнение производительности
Следующее уравнение обычно используется для выражения производительности компьютера:

Подход CISC пытается свести к минимуму количество инструкций на программу, жертвуя количеством циклов на инструкцию.RISC делает наоборот, сокращая количество циклов на инструкцию за счет количества инструкций на программу.

Препятствия RISC
Несмотря на преимущества обработки на основе RISC, чипам RISC потребовалось более десяти лет, чтобы закрепиться в коммерческом мире. Во многом это было связано с отсутствием поддержки программного обеспечения.

Хотя в линейке Power Macintosh от Apple использовались микросхемы на основе RISC, а Windows NT была совместима с RISC, Windows 3.1 и Windows 95 разрабатывались с учетом процессоров CISC. Многие компании не хотели рисковать с появляющейся технологией RISC. Без коммерческого интереса разработчики процессоров не могли производить микросхемы RISC в достаточно больших объемах, чтобы сделать их цену конкурентоспособной.

Еще одной серьезной неудачей стало присутствие Intel. Хотя их CISC-чипы становились все более громоздкими и трудными в разработке, у Intel были ресурсы, необходимые для разработки и производства мощных процессоров. Хотя чипы RISC могли превзойти усилия Intel в определенных областях, различия были недостаточно велики, чтобы убедить покупателей изменить технологии.

Раздел 404 Закона Сарбейнса-Оксли (SOX) требует, чтобы все публичные компании установили внутренний контроль и процедуры.

Закон о защите конфиденциальности детей в Интернете от 1998 года (COPPA) – это федеральный закон, который налагает особые требования на операторов доменов .

План North American Electric Reliability Corporation по защите критически важной инфраструктуры (NERC CIP) представляет собой набор стандартов.

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

Экранированная подсеть или брандмауэр с тройным подключением относится к сетевой архитектуре, в которой один брандмауэр используется с тремя сетями .

Метаморфное и полиморфное вредоносное ПО – это два типа вредоносных программ (вредоносных программ), код которых может изменяться по мере их распространения.

Медицинская транскрипция (МТ) – это ручная обработка голосовых сообщений, продиктованных врачами и другими медицинскими работниками.

Электронное отделение интенсивной терапии (eICU) — это форма или модель телемедицины, в которой используются самые современные технологии.

Защищенная медицинская информация (PHI), также называемая личной медицинской информацией, представляет собой демографическую информацию, медицинскую .

Снижение рисков – это стратегия подготовки к угрозам, с которыми сталкивается бизнес, и уменьшения их последствий.

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

Синхронная репликация — это процесс копирования данных по сети хранения, локальной или глобальной сети, поэтому .

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

Интерфейс управления облачными данными (CDMI) – это международный стандарт, определяющий функциональный интерфейс, используемый приложениями.

Износ флэш-памяти NAND — это пробой оксидного слоя внутри транзисторов с плавающим затвором флэш-памяти NAND.

Машинный язык, в котором код дополнения цифры является дополнением кода цифры.

Связанные термины:

Скачать в формате PDF

Об этой странице

Что такое сборка?

МАЙКЛ Л. ШМИТ, процессор Pentium™, 1995 г.

Машинный язык

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

Обзор исследования поддерживаемого инструментами тестирования проектов, основанных на требованиях, на основе моделей

Ралука Маринеску, . Пол Петтерссон, Достижения в области компьютеров, 2015 г.

6.4 АсмЛ

Затем мы выбираем репрезентативный инструмент категории записи до/после и применяем его к нашему рабочему примеру.

Архитектура

Сара Л. Харрис, Дэвид Харрис, в Digital Design and Computer Architecture, 2022

6.4.7 Интерпретация кода машинного языка

Для интерпретации машинного языка необходимо расшифровать поля каждого 32-битного командного слова. В разных инструкциях используются разные форматы, но все форматы имеют общее 7-битное поле кода операции. Таким образом, лучше всего начать с просмотра кода операции, чтобы определить, является ли это инструкцией типа R, I, S/B или U/J.

Перевод машинного языка на язык ассемблера

Переведите следующий код машинного языка на язык ассемблера.

Решение

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

0100 0001 1111 1110 1000 0011 1011 0011 (0x41FE83B3)

1111 1101 1010 0100 1000 0010 1001 0011 (0xFDA48293)

Код операции определяет, как интерпретировать остальные биты. Код операции первой инструкции — 01100112 ; Итак, согласно Таблице B.1 в Приложении B, это инструкция R-типа, и мы можем разделить остальные биты на поля R-типа, как показано в верхней части рисунка 6.28. Код операции второй инструкции — 00100112 , что означает, что это инструкция I-типа. Мы группируем оставшиеся биты в формате I-типа, как показано на рис. 6.28, где показан ассемблерный код, эквивалентный двум машинным инструкциям.

Рисунок 6.28. Преобразование машинного кода в ассемблерный код

Языки программирования

ХАРВИ М. ДЕЙТЕЛЬ, БАРБАРА ДЕЙТЕЛЬ, Введение в обработку информации, 1986 г.

Язык ассемблера

Сегодня программисты редко пишут программы на машинном языке. Вместо этого они используют более понятные языки ассемблера или языки высокого уровня. Эти языки частично ответственны за широкое использование компьютеров в настоящее время.

Программисты, обремененные программированием на машинном языке, начали использовать сокращения, похожие на английские, для различных инструкций машинного языка. Эти аббревиатуры, называемые мнемоникой (вспомогательные средства запоминания), относятся к действию, которое необходимо предпринять, и имеют больше смысла для программиста. Например, вместо того, чтобы писать «+ 20» для обозначения сложения, программист может написать мнемоническое «ДОБАВИТЬ»; «SUB» может использоваться для вычитания, «DIV» — для деления и т.п. Даже местам хранения были даны имена. Если бы ячейка 92 содержала сумму, ее можно было бы назвать «ИТОГО» или «СУММА» вместо 92. Получившиеся в результате программы было намного легче понять и модифицировать. Например, в программе начисления заработной платы, которая вычитает общие вычеты из валовой заработной платы для расчета чистой заработной платы, могут появиться следующие инструкции на ассемблере:

К сожалению, компьютеры не могли понять эти программы, поэтому мнемоники все равно приходилось переводить на машинный язык для обработки. В профессии программиста возникла аристократия. «Высший класс» состоял из программистов, которые писали программы с использованием англоподобной мнемотехники. Затем «простолюдины», которых называли ассемблерами, брали эти программы и вручную переводили их на машинный язык — довольно механическая работа. В 1950-х годах программисты поняли, что этот перевод может быть выполнен компьютерами быстрее и точнее, чем люди, и поэтому была написана первая программа на ассемблере, или программа-переводчик (рис. 9-1). Программа инструкций, написанная на языке ассемблера, известна как исходная программа; программа на ассемблере переводит ее в программу на машинном языке, называемую объектной программой.

< бр />

Рисунок 9-1. Программа на ассемблере переводит программу на языке ассемблера (исходную программу) в программу на машинном языке (объектную программу).

Программы можно было писать быстрее на языке ассемблера, чем на машинном языке, хотя их все равно приходилось переводить на машинный язык, прежде чем они могли быть выполнены (см. рис. 9-2). Работа по переводу была более чем оправдана благодаря увеличению скорости программирования и уменьшению количества ошибок.

< бр />

Рисунок 9-2. Пример мнемоники на языке ассемблера, используемой в некоторых мейнфреймах IBM. Полный набор инструкций предлагает около 200 мнемонических кодов. Коды операций показаны в шестнадцатеричной системе счисления (с основанием 16).

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

< бр />

Возможно, в настоящее время языки ассемблера в основном используются при написании операционных систем — программ, управляющих оборудованием и делающих его более доступным для пользователей компьютеров (см. главу 12 ).

Макроинструкции

Следующим шагом в процессе эволюции стало введение макрокоманд . Макроинструкция — это одна инструкция, которая транслируется в несколько инструкций машинного языка. С помощью одной макрокоманды программист может указать действие, для которого обычно требуется несколько инструкций на языке ассемблера. Например, простой макрос SUM A, B, C может использоваться для добавления A к B и сохранения результатов в C.

Всякий раз, когда программа на ассемблере сталкивается с макрокомандой, она сначала выполняет раскрытие макроса. Он создает серию инструкций на языке ассемблера для выполнения функции макроса. Например, СУММА A, B, C может быть расширена до

а затем ассемблер переводил эти инструкции на машинный язык.

Изучение вычислительного языка (обновление главы 15)

Менно ван Заанен, Коллин де ла Игуэра, Справочник по логике и языку (второе издание), 2011 г.

16.1 Введение

При работе с языком (машинное) обучение может принимать различные формы, наиболее важными из которых являются те, которые связаны с изучением формальных языков и грамматик на основе данных. Вопросы в этом контексте находились на пересечении областей индуктивного вывода и компьютерной лингвистики в течение последних 50 лет. Возвращаясь к новаторской работе, Хомский (1955) и Соломонов (1964) по совершенно разным причинам интересовались системами или программами, которые могли бы выводить язык при представлении информации о нем.

Голд (1967) чуть позже предложил объединяющую парадигму под названием идентификация в пределе, а термин грамматический вывод, по-видимому, появился в докторской диссертации Хорнинга (1969).

Вне области лингвистики исследователи и инженеры, занимающиеся распознаванием образов, под влиянием Фу (1974) изобрели алгоритмы и изучали подклассы языков и грамматик с точки зрения того, что можно или нельзя изучить ( Фу и Бут, 1975 г.).

Исследователи в области машинного обучения занимались смежными проблемами (самой известной из них была задача вывода детерминированного конечного автомата на основе примеров и контрпримеров строк). Angluin (1981, 1987) ввел важную настройку активного обучения или обучения на основе запросов, в то время как Питт и Вармут (1993) и Питт (1989) дали несколько результатов, вдохновленных сложностью. , показывая сложность различных проблем обучения.

В более прикладных областях, таких как вычислительная биология, исследователи также работали над изучением грамматик или автоматов из строк, например Brazma et al. (1998) . Точно так же, исходя из компьютерной лингвистики, можно указать на работы, связанные с изучением языка с более сложными грамматическими формализмами (Канадзава, 1998), более статистическими подходами, основанными на построении языковых моделей, или различными системами, введенными для автоматического построения грамматик из предложений (Адриаанс , 1992; ван Заанен, 2000). Обзоры связанных работ в конкретных областях можно найти у Сакакибара (1997 г.), де ла Хигера (2005 г.) и Вольф (2006 г.) .

При рассмотрении истории теории формального обучения можно выделить несколько тенденций. Из «интуитивных» подходов, описанных в ранних исследованиях, возникли более фундаментальные идеи. Основываясь на этих идеях и более широком доступе данных, больше исследований было направлено на прикладное изучение языков. В последнее время наблюдается тенденция требовать более теоретически обоснованных доказательств в прикладной области, в основном из-за увеличения размера проблем и важности наличия гарантий на результаты. Эти тенденции привели к междисциплинарному характеру формального изучения языка. Здесь можно найти аспекты изучения естественного языка (как области применения), машинного обучения и теории информации.

При попытке найти общие черты работы в области изучения языков следует учитывать как минимум два аспекта. Обучение происходит в обстановке. Проблемы в этом измерении — это свойства обучающих данных, такие как положительные/отрицательные экземпляры, количество или уровень шума, а также мера успеха. Другое измерение связано с парадигмами в отношении обобщения обучающих данных. Цель изучения языка состоит в том, чтобы найти язык, который используется для генерации обучающих данных. Этот язык обычно более общий, чем обучающие данные, и требует подхода к обобщению.

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

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

Изображение предоставлено: Марчин Вичари/Flickr

Общеизвестно, что код пишется разработчиком и как люди взаимодействуют с компьютерами. Однако задумывались ли вы когда-нибудь о том, как программное обеспечение, такое как код, взаимодействует с компьютерным оборудованием, таким как ЦП (центральный процессор)? Если да, то вы попали по адресу.

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

Что такое двоичный файл?

Двоичная система — это система счисления с основанием 2, которую процессоры и память используют для выполнения кода. Двоичные числа могут быть только 1 или 0, отсюда и их название. Если вы сгруппируете восемь двоичных чисел (00000000), вы получите то, что известно как байт, а одно двоичное число (0) называется битом.

Как простой переключатель формирует бинарные сигналы

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

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

Когда вы щелкаете переключателем, он генерирует сигнал или один бит данных. Обычная фотография, сделанная со смартфона, будет содержать около пяти мегабайт данных, что соответствует 40 000 000 битам. Это означает, что вам придется щелкать переключателем десятки миллионов раз, чтобы получить достаточно данных для одной фотографии, сделанной со смартфона.

Учитывая механические ограничения переключателя, инженерам требовалось устройство, не имеющее движущихся частей и обеспечивающее более высокую скорость переключения.

Транзисторы, используемые в качестве переключателя

Изображение транзистора: Эван-Амос/Викимедиа, изображение прямоугольной волны: Sponk/Викимедиа

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

Что такое архитектура процессора?

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

Архитектура ЦП также определяет ISA процессора (архитектуру набора инструкций). ISA содержит встроенный список инструкций, которые ЦП может выполнять изначально. Эти инструкции затем последовательно смешиваются вместе с помощью языка программирования, чтобы создать то, что известно как программа. Обычно на ЦП доступны сотни инструкций, включая сложение, вычитание, перемещение, сохранение и загрузку.

Вот пример набора инструкций:

Каждая инструкция в наборе инструкций имеет собственный двоичный адрес, известный как код операции. Код операции будет первыми несколькими двоичными битами, которые сообщают, какую операцию из набора инструкций использовать.

За кодом операции следует операнд. Операнд содержит значения и адреса, по которым будет использоваться код операции.

Ассемблер

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

Например, если наш ассемблер использует стандарт ASCII (американский стандартный код для обмена информацией), наш ассемблер возьмет заданный машинный код и интерпретирует его так же, как код ASCII в таблице ниже.

< td>Y < td>00111101 < td>W
00101001 A 00101111 G 00110101 M 00111011 S 01000001
00101010 B 00110000 H 00110110 N 00111100 T 01000010 Z
00101011 C 00110001 I 00110111 0 U
00101100 D 00110010 J 00111000 P 00111110 V
00101101 E 00110011 K 00111001 Q 00111111
00101110 F 00110100 L 00111010 R 0100000 X

Понимание языка ассемблера

Язык ассемблера – это удобочитаемый язык программирования низкого уровня, который непосредственно управляет кодами операций и операндами архитектуры ЦП.

Вот пример простого ассемблерного кода, использующего показанный ранее набор инструкций:

Этот блок кода хранится в ОЗУ до тех пор, пока ЦП не выберет каждую строку кода одну за другой.

Цикл выборки, декодирования и выполнения ЦП

ЦП выполняет код в цикле, известном как выборка, декодирование и выполнение. Эта последовательность показывает, как ЦП обрабатывает каждую строку кода.

Выборка. Счетчик инструкций внутри ЦП берет одну строку инструкции из ОЗУ, чтобы сообщить ЦП, какую инструкцию выполнять следующей.

Декодирование: Ассемблер декодирует удобочитаемый блок кода и собирает его в правильно отформатированные двоичные файлы для понимания компьютером.

Выполнение: ЦП затем выполняет двоичные файлы, применяя инструкции, указанные кодом операции, к предоставленным операндам.

Компьютер выполнит его следующим образом:

  1. Загрузить первый регистр со значением 5
  2. Загрузить второй регистр со значением 7
  3. 5 + 7 = 12, сохранить 12 в третьем регистре
  4. Сохраните значение третьего регистра по адресу RAM M12

Компьютер успешно сложил два числа и сохранил значение по указанному адресу ОЗУ.

Отлично! Теперь вы знаете, как компьютер выполняет код. Однако это не останавливается на достигнутом.

Дальше

При наличии надлежащего оборудования, ассемблера и языка ассемблера люди могли выполнять код с достаточной легкостью. Однако по мере того, как и программы, и компьютерное оборудование становились все более сложными, инженеры и программисты должны были придумать способ сделать программирование менее утомительным и обеспечить совместимость с различными типами архитектуры ЦП. Таким образом, создание компиляторов и интерпретаторов.

Что такое компилятор и интерпретатор?

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

Интерпретатор возьмет одну строку кода и немедленно выполнит ее. Обычно это используется на терминалах, таких как терминал Linux Bash Shell и терминал Windows PowerShell. Отлично подходит для выполнения простых разовых задач.

Изображение предоставлено: Rlistmedia/Wikimedia Common

Напротив, компилятор берет несколько строк кода и компилирует их для создания программы. Примерами таких программ могут быть Microsoft Word, Photoshop, Google Chrome, Safari и Steam.

С созданием компиляторов и интерпретаторов были созданы языки программирования высокого уровня.

Языки программирования высокого уровня

Языки программирования высокого уровня — это любой язык после ассемблерного кода. Некоторые из этих языков, с которыми вы, возможно, знакомы, — это C, Python, Java и Swift. Эти языки программирования сделали программирование более понятным и простым, чем язык ассемблера.

В этом параллельном сравнении показано, насколько сложнее программировать на ассемблере, чем на таком высокоуровневом языке программирования, как Python:

Оба кода будут печатать "Hello World".

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

Компьютеры могут выполнять любой код

Компьютер — это устройство, которое может читать только двоичные файлы. Эти двоичные файлы создаются более чем миллиардом транзисторов микроскопических размеров, упакованных внутри процессора. Расположение транзисторов диктует ISA ЦП (архитектура набора инструкций), которая предоставляет сотни инструкций, которые ЦП может легко выполнить, как только его код операции вызывается через код. Разработчики последовательно смешивают и сопоставляют эти инструкции, в результате чего создается целая программа, включающая игровые движки, веб-браузеры, приложения и драйверы.

ЦП выполняет код в последовательности, известной как цикл выборки, декодирования, выполнения. Как только фрагмент кода загружается в ОЗУ, ЦП извлекает его содержимое один за другим, декодирует содержимое в двоичный файл с помощью ассемблера, а затем выполняет код.

Поскольку ассемблер может преобразовывать только код, специально созданный для архитектуры ЦП, компиляторы и интерпретаторы были созданы на основе ассемблера (во многом как адаптер) для работы с различными типами архитектуры ЦП. Интерпретатор возьмет одну команду и немедленно выполнит ее. Напротив, компилятор возьмет все ваши команды и скомпилирует их в программу многократного использования.

Языки программирования высокого уровня, такие как Python, C и Java, были созданы, чтобы сделать программирование проще, быстрее и удобнее. Подавляющему большинству программистов больше не нужно кодировать на ассемблере, поскольку их простые в использовании языки программирования высокого уровня можно преобразовать в ассемблере с помощью компилятора.

Надеюсь, теперь вы лучше понимаете основы работы компьютеров и то, как они выполняют код.

Жаждущий узнать, как все устроено, Джейрик Мэнинг начал возиться со всеми видами электронных и аналоговых устройств еще в подростковом возрасте. Он занялся криминалистикой в ​​Университете Багио, где познакомился с компьютерной криминалистикой и кибербезопасностью.В настоящее время он много занимается самообразованием и экспериментирует с технологиями, выясняя, как они работают и как мы можем использовать их, чтобы сделать жизнь проще (или, по крайней мере, круче!).

Подпишитесь на нашу рассылку

Подпишитесь на нашу рассылку, чтобы получать технические советы, обзоры, бесплатные электронные книги и эксклюзивные предложения!

Машинный код или машинный язык – это набор инструкций, выполняемых непосредственно центральным процессором компьютера (ЦП). Каждая инструкция выполняет очень специфическую задачу, такую ​​как загрузка, переход или операция АЛУ над единицей данных в регистре или памяти ЦП. Каждая программа, непосредственно выполняемая ЦП, состоит из серии таких инструкций.

  • Квадратные скобки означают, что поле является необязательным.
  • Метка — это идентификатор, которому назначается адрес первого байта инструкции, в которой он появляется. За ним должен следовать «:»
  • Включение пробелов является произвольным, за исключением того, что должен быть вставлен хотя бы один пробел; отсутствие пробела приведет к двусмысленности.
  • Поле комментария начинается с точки с запятой « ;

Машинные инструкции, используемые в микропроцессоре 8086

  • MOV: перемещение байта или слова в регистр или память.
  • IN, OUT: ввод байта или слова из порта, вывод слова в порт.
  • LEA: загрузить эффективный адрес
  • LDS, LES Указатель загрузки с использованием сегмента данных, дополнительный сегмент.
  • PUSH, POP: поместить слово в стек, извлечь слово из стека.
  • XCHG: обмен байтами или словами.
  • XLAT: преобразование байта с помощью таблицы поиска.
  • ADD, SUB: добавить, вычесть байт или слово
  • ADC, SBB: сложение, вычитание байта или слова и перенос (заимствование).
  • INC, DEC: Увеличение, уменьшение байта или слова.
  • NEG: отрицание байта или слова (дополнение до двух).
  • CMP: сравнение байта или слова (вычитание без сохранения).
  • MUL, DIV: умножение, деление байта или слова (без знака).
  • IMUL, IDIV: целочисленное умножение, деление байта или слова (со знаком)
  • CBW, CWD: преобразование байта в слово, слова в двойное слово
  • AAA, AAS, AAM, AAD: настройка ASCII для add, sub, mul, div.
  • DAA, DAS: десятичная корректировка для сложения и вычитания (BCD-числа)
  • НЕ: логическое НЕ байта или слова (дополнение до единицы)
  • И: логическое И байта или слова
  • ИЛИ: логическое ИЛИ байта или слова.
  • Исключающее ИЛИ: логическое исключающее ИЛИ байта или слова
  • ТЕСТ: Тестовый байт или слово (И без сохранения).
  • SHL, SHR: инструкция по логическому смещению сдвига влево, вправо байта или слова? от 1или CL
  • SAL, SAR: арифметический сдвиг влево, вправо байта или слова? на 1 или CL
  • ROL, ROR: Повернуть влево, вправо байт или слово? на 1 или CL.
  • RCL, RCR: Повернуть влево, вправо по переносимому байту или слову? на 1 или CL.
  1. Инструкция по работе со строками — загрузка, сохранение, перемещение, сравнение и поиск байтов/слов
  • MOVS: перемещение строки байтов или слов
  • MOVSB, MOVSW: перемещение байта, строки слова.
  • CMPS: сравнение байтовой или словесной строки.
  • SCAS S: может состоять из строк байтов или слов (по сравнению с A или AX)
  • LODS, STOS: загрузка, сохранение строки байтов или слов в AL.
  • JMP: безусловный переход. Он включает циклическую передачу, инструкции подпрограмм и прерываний.
  • JNZ: переход до тех пор, пока значение счетчика не уменьшится до нуля. Он запускает цикл до тех пор, пока значение, хранящееся в CX, не станет равным нулю
  • ЦИКЛ: безусловный цикл, подсчет в CX, короткий переход к целевому адресу.
  • LOOPE (LOOPZ): Цикл, если равен (ноль), счет в CX, короткий переход к целевому адресу.
  • LOOPNE (LOOPNZ): Цикл, если не равен (не ноль), счет в CX, короткий переход к целевому адресу.
  • JCXZ: переход, если CX равен нулю (используется для пропуска кода в цикле).
  • Инструкции по подпрограммам и прерываниям-
  • CALL, RET: вызов, возврат из процедуры (внутри или вне текущего сегмента).
  • INT, INTO: Программное прерывание, прерывание при переполнении. IRET: Возврат из прерывания.
<р>7. Инструкции по управлению процессором-

  • STC, CLC, CMC: установить, очистить, дополнить флаг переноса.
  • STD, CLD: установить, сбросить флаг направления. STI, CLI: установить, сбросить флаг разрешения прерывания.
  • PUSHF, POPF: отправка флагов в стек, извлечение флагов из стека.

Пример вопроса GATE

Рассмотрите приведенную ниже последовательность машинных инструкций:

В приведенной выше последовательности регистры с R0 по R8 являются регистрами общего назначения. В показанных инструкциях первый регистр хранит результат операции, выполненной на втором и третьем регистрах. Эта последовательность инструкций должна выполняться в конвейерном процессоре команд со следующими 4 этапами: (1) выборка и декодирование инструкции (IF), (2) выборка операнда (OF), (3) выполнение операции (PO) и (4). ) Запишите результат (WB). Стадии IF, OF и WB занимают по 1 тактовому циклу для каждой инструкции.Стадия PO занимает 1 тактовый цикл для инструкции ADD или SUB, 3 тактовых цикла для инструкции MUL и 5 тактовых циклов для инструкции DIV. Конвейерный процессор использует пересылку операндов из стадии PO в стадию OF. Количество тактов, необходимых для выполнения вышеуказанной последовательности инструкций, равно ___________
(A) 11
(B) 12
(C) 13
(D) 14< /p>

Статья предоставлена Пуджей Танеджей. Пожалуйста, напишите комментарии, если вы обнаружите что-то неверное, или вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.

Читайте также: