Как называется последовательность команд процессора, написанная на понятном ему языке

Обновлено: 21.11.2024

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

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

Скачать в формате 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 г.) .

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

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

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

Компьютер представляет собой сложную систему, состоящую из множества различных компонентов. Но в сердце — или, если хотите, в мозгу — компьютера находится единственный компонент, который выполняет фактические вычисления. Это центральный процессор или центральный процессор. В современном настольном компьютере ЦП представляет собой один «чип» размером порядка одного квадратного дюйма. Работа процессора заключается в выполнении программ.

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

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

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

ЦП содержит арифметико-логическое устройство или АЛУ, которое является частью процессора и выполняет такие операции, как сложение и вычитание. Он также содержит небольшое количество регистров, которые представляют собой небольшие блоки памяти, способные хранить одно число. Типичный ЦП может иметь 16 или 32 регистра «общего назначения», в которых хранятся значения данных, которые сразу доступны для обработки, и многие инструкции машинного языка ссылаются на эти регистры. Например, может быть инструкция, которая берет два числа из двух указанных регистров, складывает эти числа (используя АЛУ) и сохраняет результат обратно в регистр. И могут быть инструкции для копирования значения данных из основной памяти в регистр или из регистра в основную память.

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

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

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

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

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

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

Язык ассемблера зависит от машины, но мнемоники, используемые для представления инструкций на нем, не понятны машине напрямую, а язык высокого уровня не зависит от машины. Компьютер понимает инструкции в машинном коде, то есть в виде нулей и единиц. Написание компьютерной программы непосредственно в машинном коде — утомительная задача. Программы пишутся в основном на языках высокого уровня, таких как Java, C++, Python и т. д., и называются исходным кодом. Этот исходный код не может быть выполнен непосредственно компьютером и должен быть преобразован в машинный язык для выполнения. Следовательно, для перевода программы, написанной на языке высокого уровня, в машинный код используется специальное системное программное обеспечение переводчика, которое называется языковым процессором, а программа после перевода в машинный код (объектная программа/объектный код).

Языковые процессоры могут быть любого из следующих трех типов:

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

<р>2. Ассемблер:
Ассемблер используется для перевода программы, написанной на языке ассемблера, в машинный код. Исходная программа является входом ассемблера, который содержит инструкции на языке ассемблера. Выход, сгенерированный ассемблером, представляет собой объектный код или машинный код, понятный компьютеру. Ассемблер — это, по сути, первый интерфейс, который может общаться между людьми и машиной. Нам нужен Ассемблер, чтобы заполнить пробел между человеком и машиной, чтобы они могли общаться друг с другом. код, написанный на языке ассемблера, представляет собой своего рода мнемонику (инструкции), такие как ADD, MUL, MUX, SUB, DIV, MOV и так далее. и ассемблер в основном может преобразовать эти мнемоники в двоичный код. Здесь эти мнемоники также зависят от архитектуры машины.

Например, архитектура Intel 8085 и Intel 8086 отличается.

<р>3. Интерпретатор:
Перевод одного оператора исходной программы в машинный код выполняется языковым процессором и выполняется непосредственно перед переходом к следующей строке, что называется интерпретатором. Если в операторе есть ошибка, интерпретатор завершает процесс перевода на этом операторе и отображает сообщение об ошибке. Интерпретатор переходит к следующей строке для выполнения только после устранения ошибки. Интерпретатор напрямую выполняет инструкции, написанные на языке программирования или языке сценариев, без предварительного преобразования их в объектный код или машинный код.

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

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

Машинные инструкции, используемые в микропроцессоре 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>

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

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