Разновидность программы в машинных кодах как обозначается

Сущность и назначение машинных кодов. В ЭВМ посредством применения специальных машинных ко­дов все арифметические операции над числами сво­дятся к выполнению операции арифметического сло­жения и сдвигу их кодов вправо или влево.

При этом учитываются знаки чисел, автоматически определяют­ся знак результата и признаки возможного перепол­нения разрядной сетки заданных форматов. Приме­няются прямой, обратный и дополнительный коды. Замена операции вычитания на сложение может осу­ществляться с помощью обратного и дополнительного кодов. Сущность этого процесса заключается в том, что вычитаемое В , как отрицательное число, предста­вляется в виде дополнения до некоторой константы К , при которой выполняется условие К-В> 0 . Обратный и дополнительный коды отличаются выбором значе­ния константы К . Следовательно, операцию С = А- В, где А и В целые положительные числа в любой системе счисления, можно представить в виде:

СИСТЕМЫ СЧИСЛЕНИЯ для новичков

где 10 — основание любой системы счисления.

К = 10 n — константа образования дополнительно­го кода;

К == 10 n -1 — константа образования обратно­го кода;

п — количество разрядов представления целых чисел в выбранной системе счисления (для дробных чисел п = 0).

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

Рассмотрим примеры действий над числами.

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

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

Из примеров 1 и 2 следует, что при сложении чи­сел с разными знаками (С и C1) единица переноса из старшего разряда суммы является признаком положи­тельного результата (С), отсутствие переноса (C1) — признаком отрицательного результата, при этом кон­станта образования дополнительного кода не скомпен­сирована и осталась в сумме.

При сложении чисел с одинаковыми знаками при­знаки противоположны: отсутствие переноса едини­цы из старшего разряда при положительных, слагае­мых (С2) является признаком положительного резуль­тата, наличие переноса при отрицательных слагаемых (С3) — признаком отрицательного, при этом одна кон­станта компенсируется переносом, а вторая сохраня­ется в сумме. Эти же признаки в суммах (С2 и С3) ука­зывают на отсутствие переполнения разрядной сетки для записи результатов (результаты имеют 2 десятичных разряда).

Двоичная система счисления — самое простое объяснение

Здесь в обоих случаях при сложении чисел с оди­наковыми знаками происходит переполнение разряд­ной сетки, признаками которого являются: наличие переноса из старшего разряда при положительных сла­гаемых (C4) и отсутствие переноса при отрицатель­ных (С3). При получении суммы C5 перенос отсут­ствует, т. е. обе константы 10 2 остались в полученном результате. Следовательно, результат 76-10 2 = -24, 24-10 2 = -124 по модулю больше константы и в от­веденные 2 разряда не умещается.

Рассмотрим образование кодов в двоичной систе­ме счисления на примере А = ±34. Знак числа, как было указано выше, кодируется 0 или 1, записывается перед старшим разрядом и отделяется для наглядности точкой, которая не является частью кода и в разрядной сетке не отражается. Для простоты примем, что задана разрядная сетка в один байт, т. е. 8 двоичных разрядов, из которых один отводится под знак, а 7 для записи

Примем константу для дополнительного кода:

K(10) = 2 8 = К2. =10 1000 = 100000000

и константу для обратного кода: K(10) = 2 8 -1 = К2 = -10 1000 =11111111.

В таблице 6 приведены прямой, обратный и допол­нительный коды для чисел А == 34 и А = -34.

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

2) положительное число в прямом, обратном и допол­нительном кодах имеет одинаковое изображение;

3) обратный код отрицательного двоичного числа об­разуется из прямого кода положительного числа путем замены всех единиц, на нули, а нулей на единицы, включая знаковый разряд;

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

Читайте также:
Управляющая программа компьютера это

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

Числа, представленные в естественной форме, в памяти ЭВМ представляются в дополнительном коде, числа в нормальной форме хранятся в прямом коде. Действия в ЭВМ выполняются в прямом и дополни­тельном кодах, обратный код используется для полу­чения дополнительного кода.

Действия над машинными кодами чисел. А. Дей­ствия над числами, представленными в естественной форме

При сложении кодов чисел в естественной форме следует учитывать следующие положения:

1) числа хранятся в памяти в дополнительном коде;

2) в сумматоре числа складываются вместе со зна­ками, при этом образуется знак результата;

3) при сложении чисел с разными знаками единица переноса из знакового разряда стирается, т. е. компен­сируется одна константа образования дополнительно­го кода;

4) признаками переполнения разрядной сетки при сложении кодов чисел с одинаковыми знаками могут служить:

а) знак суммы не соответствует знакам слагаемых;

б) переносы из старшего разряда суммы в знако­вый и из знакового не согласуются, т. е. один из них присутствует, а другой отсутствует.

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

Пример 4. Даны два числа: А = 254, 5 и B= 175.

Найти сумму чисел при разных знаках слагаемых в 16-ти разрядном формате.

а) Представим исходные числа в двоичной системе счисления:

б) Составим машинные коды этих чисел с разными знаками:

[B]ПК= 0.000000010101 111.

в) Выполним действия:

Из примера следует:

1) при получении сумм слагаемых с одинаковыми знаками (C1 и C4) переполнения разрядной сетки не произошло, так как знак суммы соответствует знакам слагаемых и переносы в знаковый и из знакового со­гласуются;

2) при получении сумм С2 и C4 образовался перенос из знакового разряда, который следует исключить;

3) суммы C1 и С2 — положительные, С3 и С4 — отрицательные, т. е. знаки результатов получены при сложении чисел со знаками.

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

Проверка. Для этого следует перевести получен­ные суммы любым способом в десятичную систему и сравнить с заданием.

Полученные суммы не соответствуют ожидаемым результатам, поскольку произошло переполнение раз­рядной сетки за допустимые значения (32767). Пере­полнение разрядной сетки легко определить либо по первому признаку — знаки сумм C1 и С2 не соответ­ствуют знакам слагаемых, либо по второму—переносы в знаковый и из знакового разряда в суммах С1 и С2не согласуются. В этих случаях в больших ЭВМ выраба­тывается запрос на прерывание программы, в некото­рых типах малых ЭВМ производится автоматический переход к нормальной форме представления данных.

Замечание. Операции умножения и деления произ­водятся над абсолютными значениями чисел — в пря­мом коде. Знак произведения определяется сложением по модулю 2 знаков сомножителей (0+0== 0, 1+0=1, 1+1 =0), знак частного — сложением по модулю 2 знаков делимого и делителя, а знаку остатка присваи­вается знак делимого.

Источник: lektsia.com

Машинный код

Машинный код или язык программирования — ряд инструкций, выполненных непосредственно центральным процессором (CPU) компьютера. Каждая инструкция выполняет очень определенную задачу, такую как груз, скачок или операция ALU на единице данных в регистре центрального процессора или памяти. Каждая программа, непосредственно выполненная центральным процессором, составлена из ряда таких инструкций.

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

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

Инструкции по машинному коду

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

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

Читайте также:
Как программу оформить графически

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

Не у всех машин или отдельных инструкций есть явные операнды. У машины сумматора есть объединенный левый операнд и результат в неявном сумматоре для большинства арифметических инструкций. У другой архитектуры (такой как 8 086 и x86-семья) есть версии сумматора общих инструкций с сумматором, расцененным как один из общих регистров более длинными инструкциями.

Машина стека имеет больше всего или все ее операнды на неявном стеке. Инструкции по особому назначению также часто испытывают недостаток в явных операндах (CPUID в x86 архитектуре пишет ценности в четыре неявных регистра назначения, например). Это различие между явными и неявными операндами важно в генераторах машинного кода, особенно в распределении регистра и живых частях прослеживания диапазона. Хороший кодовый оптимизатор может отследить неявные, а также явные операнды, которые могут позволить более частое постоянное распространение, постоянное сворачивание регистров (регистр назначил результат постоянного выражения, освобожденного, заменив его той константой), и другие кодовые улучшения.

Программы

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

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

Ассемблеры

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

Пример

Архитектура MIPS обеспечивает определенный пример для машинного кода, инструкции которого всегда 32 бита длиной. Общий тип инструкции дан op (операция) область, самые высокие 6 битов. J-тип (скачок) и I-тип (непосредственные) инструкции полностью определен op. R-тип (регистр) инструкции включает дополнительную область funct, чтобы определить точную операцию. Области, используемые в этих типах:

6 5 5 5 5 6 битов

[op | RS | rt | ул. |shamt | funct] R-тип

[op | RS | rt | адрес / немедленный] I-тип

[op | предназначаются для адреса] J-тип

RS, rt, и ул. указывают на операнды регистра; shamt дает сумму изменения; и адрес или непосредственные области содержат операнд непосредственно.

Например, добавление регистров 1 и 2 и размещение результата в регистре 6 закодированы:

[op | RS | rt | ул. |shamt | funct]

0 1 2 6 0 32 десятичных числа

Набор из двух предметов 000000 00001 00010 00110 00000 100000

Загрузите стоимость в регистр 8, взятый от клетки памяти 68 клеток после того, как местоположение перечислило в регистре 3:

[op | RS | rt | адрес / немедленный]

35 3 8 68 десятичных чисел

100011 00011 01 000 наборов из двух предметов 00000 00001 000100

Скачок к адресу 1024:

[op | предназначаются для адреса]

2 1 024 десятичных числа

000010 наборов из двух предметов 00000 00000 00000 10000 000000

Отношения к микрокодексу

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

Читайте также:
Как задать вопрос 1с по программе

Используя микрокодовый слой, чтобы осуществить эмулятор позволяет компьютеру представить архитектуру полностью различного компьютера. Системная/360 линия использовала это, чтобы позволить держать программы в строевой стойке от более ранних машин IBM до новой семьи компьютеров, например, IBM 1401/1440/1460 эмулятор на модели 40 IBM S/360.

Отношения к bytecode

Машинный код не должен быть перепутан с так называемым «bytecode» (или более старый p-кодекс термина), который или выполнен переводчиком или им, собрал в машинный код для быстрее (прямого) выполнения. Машинный код и кодекс собрания иногда называют родным кодексом, относясь к зависимым от платформы частям языковых особенностей или библиотек.

Хранение в памяти

Архитектура Гарварда — архитектура ЭВМ с физически отдельным хранением и путями сигнала для кодекса (инструкции) и данные. Сегодня, большинство процессоров осуществляет такие отдельные пути сигнала по исполнительным причинам, но фактически осуществляет Измененную архитектуру Гарварда, таким образом, они могут поддержать задачи как погрузка выполнимой программы от дискового хранения как данные и затем выполнение ее. Архитектура Гарварда противопоставлена с архитектурой Фон Неймана, где данные и кодекс сохранены в той же самой памяти.

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

Удобочитаемость людьми

Было сказано, что машинный код так нечитабелен, что Бюро по охране авторских прав Соединенных Штатов не может определить, является ли особая закодированная программа оригинальной авторской работой; однако, американское Бюро по охране авторских прав действительно допускает регистрацию авторского права компьютерных программ. Hofstadter сравнивает машинный код с генетическим кодом: «Рассмотрение программы, написанной на языке программирования, неопределенно сопоставимо с рассмотрением атома Молекулы ДНК атомом».

См. также

  • Ассемблер
  • Endianness
  • Список языков программирования
  • Монитор машинного кода
  • Верхний кодекс
  • P-кодовая машина
  • Уменьшенный компьютер набора команд (RISC)
  • VLIW
  • Обучение машинного кода: микропреподаватель I

Источник: ru.knowledgr.com

7.14. Какие у машинных языков достоинства и недостатки? 7.15. Что такое язык ассемблера? 7.16.

В чем преимущества алгоритмических языков перед машинными?

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

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

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

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

7.15. Что такое язык ассемблера?

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

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

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

7.16. В чем преимущества алгоритмических языков перед машинными?
Основные преимущества таковы:

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

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

Источник: www.examen.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru