Ассемблер что такое: Что такое Ассемблер и почему это круто — Журнал «Код»

Assembler | OSDev Wiki | Fandom

Ассемблер (от англ. assemble — собирать) — компилятор с языка ассемблера в команды машинного языка.

История ассемблера

Данный тип языков получил свое название от названия транслятора (компилятора) с этих языков — ассемблера (англ. assembler — сборщик). Вероятно, такое название объясняется тем, что программа-ассемблер как бы собирает машинные команды из кусочков, каждый из которых задаётся теми или иными частями соответствующего оператора на языке ассемблера (такая «сборка» хорошо заметна в ассемблерах ряда архитектур, отличных от IA-32, например, в мэйнфреймах фирмы IBM).

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

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

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

Виды ассемблеров

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

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

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

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

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

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

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

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

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

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

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

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

Программы, написанные на языке ассемблера, требуют значительно меньшего объема памяти и времени выполнения. Знание программистом языка ассемблера и машинного кода дает ему понимание архитектуры машины. Несмотря на то, что большинство специалистов в области программного обеспечения разрабатывают программы на языках высокого уровня, таких, как Object Pascal или C, наиболее мощное и эффективное программное обеспечение полностью или частично написано на языке ассемблера.

Рис Отладчик ассемблера Turbo Debugger (TD) — DOS.

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

В качестве примера приведем программу на языке ассемблера для IBM PC. Программа вычисляет значение a = b + c для целых a, b и c:


.MODEL SMALL
.DATA
b DW 5
c DW 3
a DW ?
.CODE
begin MOV AX,@DATA
MOV DS,AX
MOV AX,B
ADD AX,C
MOV A,AX
MOV AH,4CH
INT 21H
END begin

Директива . MODEL задает механизм распределения памяти под данные и команды.
Директива .DATA определяет начало участка программы с данными.
Директивы DW задают типы переменных и их значения.
Директива .CODE определяет начало участка программы с командами.
Команды MOV AX,@DATA и MOV DS,AX записывают адрес сегмента данных в регистр DS (Data Segment).
Для вычисления a используются команды MOV AX, B, ADD AX,C и MOV A,AX.
В директиве END задана метка первой выполняемой программы программы begin.

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

Понятие об ассемблере

Сегменты программы, сегменты подпрограммы

Кодовое представление команд

Адресация памяти

Ассемблер

Существует несколько версий программы ассемблер. Одним из наиболее часто используемых является пакет Turbo Assembler, водящий в состав комплекса программ Borland Pascal 7.0. Рассмотрим работу с этим пакетом более подробно.

Входной информацией для ассемблера (TASM.EXE) является исходный файл — текст программы на языке ассемблера в кодах ASCII. В результате работы ассемблера может получиться до 3-х выходных файлов:

  1. объектный файл – представляет собой вариант исходной программы, записанный в машинных командах;
  2. листинговый файл – является текстовым файлом в кодах ASCII, включающим как исходную информацию, так и результат работы программы ассемблера;
  3. файл перекрестных ссылок – содержит информацию об использовании символов и меток в ассемблерной программе (перед использованием этого файла необходима его обработка программой CREF).

Существует много способов указывать ассемблеру имена файлов. Первый и самый простой способ — это вызов команды без аргументов. В этом случае ассемблер сам поочередно запрашивает имена файлов: входной (достаточно ввести имя файла без расширения ASM), объектный, листинговый и файл перекрестных ссылок.

Для всех запросов имеются режимы, применяемые по умолчанию, если в ответ на запрос нажать клавишу Enter:

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

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

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

TASM Test, Otest, Ltest, Ctest

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

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

Входной информацией для программы TLINK являются имена объектных модулей (файлы указываются без расширение OBJ). Если файлов больше одного, то их имена вводятся через разделитель «+». Модули связываются в том же порядке, в каком их имена передаются программе TLINK. Кроме того, TLINK требует указания имени выходного исполняемого модуля. По умолчанию ему присваивается имя первого из объектных модулей, но с расширением ЕХЕ. Вводя другое имя, можно изменять имя файла, но не расширение. Далее можно указать имя файла, для хранения карты связей (по умолчанию формирование карты не производится). Последнее, что указывается программе TLINK – это библиотеки программ, которые могут быть включены в полученный при связывании модуль.

; , ` «

Конструкции языка ассемблера формируются из идентификаторов и ограничителей. Идентификатор представляет собой набор букв, цифр и символов «_», «.», «?», «$» или «@» (символ «.» может быть только первым символом идентификатора), не начинающийся с цифры. Идентификатор должен полностью размещаться на одной строке и может содержать от 1 до 31 символа (точнее, значимым является только первый 31 символ идентификатора, остальные игнорируются). Друг от друга идентификаторы отделяются пробелом или ограничителем, которым считается любой недопустимый в идентификаторе символ. Посредством идентификаторов представляются следующие объекты программы:

  • переменные;
  • метки;
  • имена.

Переменные идентифицируют хранящиеся в памяти данные. Все переменные имеют три атрибута:

  1. СЕГМЕНТ, соответствующий тому сегменту, который ассемблировался, когда была определена переменная;
  2. СМЕЩЕНИЕ, являющееся смещением данного поля памяти относительно начала сегмента;
  3. ТИП, определяющий число байтов, подвергающихся манипуляциям при работе с переменной.

Метка является частным случаем переменной, когда известно, что определяемая ею память содержит машинный код. На нее можно ссылаться посредством переходов или вызовов. Метка имеет два атрибута: СЕГМЕНТ и СМЕЩЕНИЕ.

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

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

  • директивы ассемблера;
  • инструкции процессора;
  • имена регистров;
  • операторы выражений.

В идентификаторах одноименные строчные и заглавные буквы считаются эквивалентными. Например, идентификаторы AbS и abS считаются совпадающими.

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

Целые числа имеют следующий синтаксис (xxxx – цифры):

  • [+|-]xxxx
  • [+|-]xxxxB
  • [+|-]xxxxQ
  • [+|-]xxxxO
  • [+|-]xxxxD
  • [+|-]xxxxH

Латинский символ (в конце числа), который может кодироваться на обоих регистрах, задает основание системы счисления числа: B – двоичное, Q и O – восьмеричное, D – десятичное, H – шестнадцатеричное. Шестнадцатеричные числа не должны начинаться с буквенных цифр (например, вместо некорректного ABh следует употреблять 0ABh). Шестнадцатеричные цифры от A до F могут кодироваться на обоих регистрах. Первая форма целого числа использует умалчиваемое основание (обычно десятичное).

Символьные и строковые константы имеют следующий синтаксис:

‘символы’

«символы»

Символьная константа состоит из одного символа алфавита языка. Строковая константа включает в себя 2 или более символа. В отличие от других компонент языка, строковые константы чувствительны к регистру. Символы «’» и «»» в теле константы должны кодироваться дважды.

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

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

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

Язык программирования Ассемблера поддерживает применение процедур двух типов – ближнего (near) и дальнего (far).

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

При вызове процедуры в стеке сохраняется адрес возврата в вызывающую программу:

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

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

<имя_процедуры> PROC <параметр>

<тело_процедуры>

<имя_процедуры> ENDP

Следует обратить внимание, что в директиве PROC после имени не ставится двоеточие, хотя имя и считается меткой.

Параметр, указываемый после ключевого слова PROC, определяет тип процедуры: ближний (NEAR) или дальний (FAR). Если параметр отсутствует, то по умолчанию процедура считается ближней.

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


Рис. 1. Варианты размещения подпрограммы в теле программы.

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

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

Все команды вызова CALL безусловны. Внутрисегментный вызов NEAR CALL используется для передачи управления процедуре, находящейся в том же сегменте. Он указывает новое значение регистра IP и сохраняет старое значение счетчика команд (IP) в стеке в качестве адреса возврата. Межсегментный вызов FAR CALL используется для передачи управления процедуре, находящейся в другом сегменте или даже программном модуле. Он задает новые значения сегмента CS и смещения IP для дальнейшего выполнения программы и сохраняет в стеке как регистр IP, так и регистр CS.

Все возвраты RET являются косвенными переходами, поскольку извлекают адрес перехода из вершины стека. Внутрисегментный возврат извлекает из стека одно слово и помещает его в регистр IP, а межсегментный возврат извлекает из стека два слова, помещая слова из меньшего адреса в регистр IP, а слово из большего адреса – в регистр CS. Команда RET может иметь операнд, который представляет собой значение, прибавляемое микропроцессором к содержимому указателя стека SP после извлечения адреса возврата (очистка стека).

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

Существует две основные архитектуры процессоров. Первая называется RISC (Reduced Instruction Set Computer) — компьютер с уменьшенным набором команд. Архитектура RISC названа в честь первого компьютера с уменьшенным набором команд — RISC I. Идея этой архитектуры основывается на том, что процессор большую часть времени тратит на выполнение ограниченного числа инструкций (например, переходов или команд присваивания), а остальные команды используются редко.

Разработчики RISC-архитектуры создали «облегченный» процессор. Благодаря упрошенной внутренней логике (меньшему числу команд, менее сложным логическим контурам), значительно сократилось время выполнения отдельных команд и увеличилась общая производительность. Архитектура RISC подобна «архитектуре общения» с собакой — она знает всего несколько команд, но выполняет их очень быстро.

Вторая архитектура имеет сложную систему команд, она называется CISC (Complex Instruction Set Computer) — компьютер со сложной системой команд. Архитектура CISC подразумевает использование сложных инструкций, которые можно разделить на более простые. Все х86-совместимые процессоры принадлежат к архитектуре CISC.

Давайте рассмотрим команду «загрузить число 0x1234 в регистр АХ». На языке ассемблера она записывается очень просто — MOV АХ, 0x1234. К настоящему моменту вы уже знаете, что каждая команда представляется в виде двоичного числа (пункт 7 концепции фон Неймана). Ее числовое представление называется машинным кодом. Команда MOV АХ, 0x1234 на машинном языке может быть записана так:

0x11хх: предыдущая команда

0х1111:0хВ8, 0x34, 0x12

0x1114: следующие команды

Мы поместили команду по адресу 0x1111. Следующая команда начинается тремя байтами дальше, значит, под команду с операндами отведено 3 байта. Второй и третий байты содержат операнды команды MOV. А что такое 0хВ8? После преобразования 0хВ8 в двоичную систему мы получим значение 10111000b.

Первая часть — 1011 — и есть код команды MOV. Встретив код 1011, контроллер «понимает», что перед ним — именно MOV. Следующий разряд (1) означает, что операнды будут 16-разрядными. Три последние цифры определяют регистр назначения. Три нуля соответствуют регистру АХ (или AL, если предыдущий бит был равен О, указывая таким образом, что операнды будут 8-разрядными).

Чтобы декодировать команды, контроллер должен сначала прочитать их из памяти. Предположим, что процессор только что закончил выполнять предшествующую команду, и IP (указатель команд) содержит значение 0x1111. Прежде чем приступить к обработке следующей команды, процессор «посмотрит » на шину управления, чтобы проверить, требуются ли аппаратные прерывания.

Если запроса на прерывание не поступало, то процессор загружает значение, сохраненное по адресу 0x1111 (в нашем случае — это 0хВ8), в свой внутренний (командный) регистр. Он декодирует это значение так, как показано выше, и «понимает», что нужно загрузить в регистр АХ 16-разрядное число —- два следующих байта, находящиеся по адресам 0x1112 и 0x1113 (они содержат наше число, 0x1234). Теперь процессор должен получить из памяти эти два байта. Для этого процессор посылает соответствующие команды в шину и ожидает возвращения по шине данных значения из памяти.

Получив эти два байта, процессор запишет их в регистр АХ. Затем процессор увеличит значение в регистре IP на 3 (наша команда занимает 3 байта), снова проверит наличие запросов на прерывание и, если таких нет, загрузит один байт по адресу 0x1114 и продолжит выполнять программу.

Если запрос на прерывание поступил, процессор проверит его тип, а также значение флага IF. Если флаг сброшен (0), процессор проигнорирует прерывание; если же флаг установлен (1), то процессор сохранит текущий контекст и начнет выполнять первую инструкцию обработчика прерывания, загрузив ее из таблицы векторов прерываний.

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

Мы уже знаем, что адрес, как и сама команда, — это число. Чтобы не запоминать адреса всех «переменных», используемых в программе, этим адресам присваивают символические обозначения, которые называются переменными (иногда их также называют указателями).

При использовании косвенного операнда адрес в памяти, по которому находится нужное значение, записывается в квадратных скобках: [адрес]. Если мы используем указатель, то есть символическое представление адреса, например, [ESI], то в листинге машинного кода мы увидим, что указатель был заменен реальным значением адреса. Можно также указать точный адрес памяти, например, [0x594F].

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

Теперь рассмотрим фрагмент программы, в которой регистр ESI содержит адрес первого элемента (нумерация начинается с 0) в массиве байтов. Как получить доступ, например, ко второму элементу (элементу, адрес которого на 1 байт больше) массива? Процессор поддерживает сложные способы адресации, которые очень нам пригодятся в дальнейшем. В нашем случае, чтобы получить доступ ко второму элементу массива, нужно записать косвенный операнд [ESI + 1].

Имеются даже более сложные типы адресации: [адрес + ЕВХ + 4]. В этом случае процессор складывает адрес, значение 4 и значение, содержащееся в регистре ЕВХ. Результат этого выражения называется эффективным адресом (ЕА, Effective Address) и используется в качестве адреса, по которому фактически находится операнд (мы пока не рассматриваем сегментные регистры). При вычислении эффективного адреса процессор 80386 также позволяет умножать один член выражения на константу, являющуюся степенью двойки: [адрес + ЕВХ * 4]. Корректным считается даже следующее «сумасшедшее» выражение:

[число — б + ЕВХ * 8 + ESI]

На практике мы будем довольствоваться только одним регистром [ESI] или суммой регистра и константы, например, [ESI + 4]. В зависимости от режима процессора, мы можем использовать любой 16-разрядный или 32-разрядный регистр общего назначения [ЕАХ], [ЕВХ],… [ЕВР].

Процессор предыдущего поколения 80286 позволял записывать адрес в виде суммы содержимого регистра и константы только для регистров ВР, SI, DI, и ВХ.

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

ES:[ESI]

Некоторые ассемблеры требуют указания регистра внутри скобок:

[ES:ESI]

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

См. также

  • регистр
  • процессор
  • АЛУ
  • компилятор

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

Что такое Ассемблер в компьютере? Типы и работа

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

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

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

  1. Что такое ассемблер?
  2. Типы ассемблера
  3. Как работает ассемблер?
  4. Дизайн ассемблера

Что такое ассемблер в системном программировании?

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

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

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

  • Он использует мнемонику для написания инструкций.
  • Адреса, используемые в инструкциях, являются символическими, а не абсолютными.
  • Мнемоника, используемая на ассемблере, проста для понимания и удобочитаема программистами.
  • Наконец, это упрощает объявление данных и резервирование памяти.
Что такое машинный язык?

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

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

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

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

Конечно, после анализа ассемблерного кода ассемблер генерирует целевой код.

Типы ассемблера

Однопроходный ассемблер

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

Двухпроходный/многопроходный ассемблер

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

Pass 1

  • Идентифицирует символы и код операции и записывает их в таблицу символов.
  • Ведите учет счетчика местоположения.
  • Обрабатывает псевдоинструкции.

Pass 2

  • Преобразование кода операции в соответствующий числовой код операции.
  • Сгенерировать машинный код в соответствии со значением литералов и символов.
Что такое псевдооперативные инструкции?

Псевдооперативные инструкции — это инструкции на языке ассемблера. Более того, эти инструкции по ассемблеру не имеют эквивалента на машинном языке. Эти инструкции, присутствующие в ассемблерном коде, обрабатываются на первом проходе и разрешаются на втором проходе.

Как работает ассемблер?

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

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

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

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

 JHON START 0 //идентифицирует имя программы

     USING *, 15 // регистр 15 является базовым регистром

         L 1, FIVE //Загрузить значение FIVE в регистр 1

         A 1, FOUR //Добавить значение в FOUR к значению в регистре 1

        ST 1, TEMP // Сохранение обновленного значения регистра 1 в TEMP

   FOUR DC F ‘4’ // Определяем константу 4
  
   FIVE DC F ‘5’ // Определяем константу 5

   TEMP DS 1F //Определить хранение 1 полного слова

   КОНЕЦ 

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

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

Конструкция сборщика

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

  1. Укажите проблему
  2. Указать структуру данных
  3. Определить формат структуры данных
  4. Укажите алгоритм
  5. Ищите модульность (способность одной программы быть разделенной на независимые блоки программирования)
  6. Повторить пункты с 1 по 5 для модулей.

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

Ассемблер Определение и значение — Merriam-Webster

как · семя · ​блер ə-ˈsem-b(ə-)lər 

1

: в сборе

2

а

: компьютерная программа, которая автоматически преобразует инструкции, написанные на языке ассемблера, в машинный язык

б

: язык ассемблера

Примеры предложений

Недавние примеры в Интернете Последняя модель будет поставляться Foxconn, основным iPhone 9. 0170 сборщик , чьи объекты находятся на окраине Ченнаи, города на юге Индии. Новости CBS , 26 сентября 2022 г. Тайваньские компании, такие как Foxconn Technology Group, крупнейший сборщик iPhone , являются основными поставщиками рабочих мест в частном секторе материкового Китая. Чун Хан Вонг, WSJ , 15 августа 2022 г. Куо также назвал Luxhare AirPods Pro 2 9.0170 сборщик . Крис Смит, BGR , 24 мая 2022 г. Индия зарекомендовала себя в сборке смартфонов и в настоящее время является вторым по величине сборщиком смартфонов после Китая. Мегха Мандавиа, WSJ , 11 мая 2022 г. В приказе городского Бюро промышленности и информационных технологий говорится, что затронутые компании также включали iPhone 9. 0170 сборщик Foxconn и производитель дронов SZ DJI Technology Co. Дэн Струмпф, WSJ , 28 июля 2022 г. Карри, который был номинирован в среду, начал свою карьеру в UAW в 1992 году, когда он был нанят в качестве сборщика грузовиков в компании Freightliner Trucks в Маунт-Холли, Северная Каролина, по данным профсоюза. Эрик Д. Лоуренс, Detroit Free Press , 28 июля 2022 г. В еще одном стремлении работать с бытовой электроникой Geely в прошлом году создала производственное предприятие с тайваньской компанией 9.0170 ассемблер Foxconn Technology. Ральф Дженнингс, Forbes , 14 июля 2022 г. Многие предприятия были вынуждены приостановить свою деятельность в нескольких местах, в том числе автопроизводители Volkswagen и Tesla, а также сборщик iPhone и Pegatron . Джесси Йенг, CNN , 28 апреля 2022 г. Узнать больше

Эти примеры предложений автоматически выбираются из различных онлайн-источников новостей, чтобы отразить текущее использование слова «ассемблер». Мнения, выраженные в примерах, не отражают точку зрения Merriam-Webster или ее редакторов. Отправьте нам отзыв.

История слов

Первое известное использование

1615, в значении, определенном в смысле 1

Путешественник во времени

Первое известное использование ассемблер был в 1615 году

Посмотреть другие слова того же года собрать

ассемблер

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

Посмотреть другие записи рядом 

Процитировать эту запись

Стиль

MLAЧикагоAPAMМерриам-Вебстер

«Ассемблер». Словарь Merriam-Webster.com , Merriam-Webster, https://www.merriam-webster.com/dictionary/assembler. По состоянию на 22 ноября 2022 г.

Copy Citation

Kids Definition

ассемблер

как · семя · ​блер ə-ˈsem-b(ə-)lər 

1

: один, который собирает

2

: Компьютерная программа, которая превращает инструкции, написанные на языке сборки на машинный язык

Подробнее от Merriam-Webster на

Assembler

Britannica.com: Encclopedia.

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *