Sw-motors.ru

Автомобильный журнал
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

STM Урок 201

STM Урок 201. Assembler. Первый проект. Команды MOV, LDR, STR, B. Часть 2

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

Давайте теперь в нашу процедуру Start добавим хотя бы одну строку с кодом

Мы используем здесь команду MOV, с помощью которой мы помещаем число в регистр общего назначения R0.

С помощью данной команды мы можем заносить константы в регистры, а также содержимое одного регистра в другой. Если используется синтаксис Intel, то приёмником является первый операнд команды, а источником – второй. Если используется константа, то перед ней ставится знак решетки (#).

Теперь аналогичным образом занесём в другой регистр единицу

Теперь мы можем смело собирать код и прошивать контроллер.

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

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

Давайте посмотрим размер получившегося файла прошивки

Файл с прошивкой весит всего лишь 16 байт. Впечатляет, неправда ли? Это как раз два адреса – вершины стека и точки входа, а также две 32-битные команды. Откроем и посмотрим содержимое нашего файла или его машинный код

Так как слова у нас следуют младшим байтом вперёд, то в первом слове у нас число 0x20000400, что и есть вершина нашего стека, во втором – 0x08000009, что является адресом 9 байта в программе, находящейся во флеш-памяти, которая мапится у нас, как известно на адрес 0x08000000. 9 байт – это байт, следующий после наших двух слов с адресами. А дальше идут инструкции MOV. Можно конечно загнаться и разобрать биты данных инструкций в машинном коде, что, впрочем, я уже давно проделал, но, думаю, не стоит тратить на это драгоценное время. Вы это можете проделать самостоятельно, если будет интересно.

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

А затем добавим следующую команду

Данная команда с мнемоникой B – это безусловный переход (branch – ветвь) к метке. Таким образом, код теперь у нас будет зациклен на данной метке, и теперь между меткой и переходом мы можем писать такой код, который будет выполняться непрерывно в нашем бесконечном цикле.

Соберём наш код, и он прибавится ещё на 4 байта, а также посмотрим наш переход в отладчике, не забыв, конечно, перед этим прошить контроллер

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

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

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

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

1. Основы программирования на ассемблере

1.1. Принципы построения ассемблерных программ

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

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

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

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

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

Читать еще:  Что такое форсаж двигателя автомобиля

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

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

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

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

6. Для указания места перехода при выполнении опер­аций управ­ления ходом выполнения программы использу­ются метки, в качестве которых применяются символи­ческие имена (идентификаторы) с после­дующим за ними символом «двоеточие».

7. Для удобства введения комментариев, в том числе и в начале строки, используется символ «точка с запятой». (Напомним, что в со­временных языках высокого уровня он применяется как разделитель операндов или признак конца операнда. Так как в ассемблере каждая команда занимает точно одну строку, то с этой целью в ассемблере по­добный разделитель совершенно не нужен.)

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

9. В общем случае команда ассемблера имеет вид

метка мнемокод операнды комментарии

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

Assembler

Ассе́мблер (от англ. assembler — сборщик) — транслятор программы из текста на языке ассемблера, в программу на машинном языке.

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

В Викисловаре есть статья « макроассемблер »

Многие современные ассемблеры являются макроассемблерами (от греч. μάκρος — большой, обширный), то есть макропроцессорами на базе языка ассемблера [1] . Кроме макросов, ассемблеры при трансляции выполняют другие директивы, набор которых зависит не от аппаратной платформы, для которой транслируется программа, а от самого используемого транслятора.

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

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

Ассемблеры для DOS

Наиболее известными ассемблерами для операционной системы DOS являлись Borland Turbo Assembler (TASM), Microsoft Macro Assembler (MASM) и Watcom Assembler (WASM). Также в своё время был популярен простой ассемблер A86.

Windows

При появлении операционной системы Windows появилось расширение TASM, именуемое TASM 5+ (неофициальный пакет, созданный человеком с ником neonovd’), позволившее создавать программы для выполнения в среде Windows. Последняя известная версия TASM — 5.3, поддерживающая инструкции MMX, на данный момент включена в Turbo C++ Explorer. Но официально развитие программы полностью остановлено. Последнее развитие компилятор получил благодаря современной среде разработки TASM Visual. Среда неофициальная, но с её помощью работа с компилятором многократно упрощается.

Microsoft поддерживает свой продукт под названием Microsoft Macro Assembler. Она продолжает развиваться и по сей день, последние версии включены в наборы DDK. Но версия программы, направленная на создание программ для DOS, не развивается. Кроме того, Стивен Хатчессон создал пакет для программирования на MASM под названием «MASM32».

GNU и Linux

В состав операционной системы GNU входит пакет binutils, включающий в себя ассемблер GAS (GNU Assembler), использующий AT&T-синтаксис, в отличие от большинства других популярных ассемблеров, которые используют Intel-синтаксис (поддерживается с версии 2.10).

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

Также существует открытый проект ассемблера, версии которого доступны под различные операционные системы, и который позволяет получать объектные файлы для этих систем. Называется этот ассемблер NASM (Netwide Assembler).

Yasm — это переписанная с нуля версия NASM под лицензией BSD (с некоторыми исключениями).

flat assembler (fasm) — молодой ассемблер под модифицированной для запрета перелицензирования (в том числе под GNU GPL) BSD-лицензией. Есть версии для KolibriOS, Linux, DOS и Windows; использует Intel-синтаксис и поддерживает инструкции x86-64.

MCS-51

MCS-51 (Intel 8051) — классическая архитектура микроконтроллера. Для неё существует кросс-ассемблер ASM51, выпущенный корпорацией MetaLink.

Читать еще:  Горит датчик неисправности двигателя нексия

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

На данный момент для AVR существуют 4 компилятора производства Atmel (AVRStudio 3, AVRStudio 4, AVRStudio 5 и AVRStudio 6, AVRStudio 7).

В рамках проекта AVR-GCC (он же WinAVR) существует компилятор avr-as (это портированный под AVR ассемблер GNU as из GCC).

Также существует свободный минималистический компилятор avra [2] .

Платные компиляторы: IAR (EWAVR), CodeVisionAVR, Imagecraft. Данные компиляторы поддерживают языки Assembler и C, а IAR ещё и C++.

Существует компилятор с языка BASIC — BASCOM, также платный.

Для процессоров ARM существует достаточно широкий выбор компиляторов, внутренняя реализация которых зависит от непосредственно производителя данного ARM-процессора либо разработчика IDE для работы с ARM-процессорами. Официальным компилятором ARM, непосредственно от компании ARM, является ARM Compiler 6, который входит в IDE DS-5 Development Studio и поддерживает компиляцию программ на языках Си и C++.
Компиляторы от поставщиков ARM процессоров и разработчиков ARM toolchain:

Поставщик IDEКомпиляторПоддерживаемые языкиУсловия использования
Keil mVisionMDK-ARMСи/C++/AssemblerShareware (не более 32kb)
IAR Embedded WorkbenchIAR CompillerСи/C++/AssemblerCommercial
CoIDEGCC compiler.Си/C++/Assembler.Free/Commercial
True StudioPrecompiled GCC compiler.Си/C++/AssemblerFree/Commercial

Средой разработки, выпускаемой компанией Microchip Technology для создания, редактирования и отладки программ для микроконтроллеров семейства PIC, является MPLAB. Среда включает в себя трансляторы с языка ассемблер MPASM и ASM30 для различных семейств микроконтроллеров PIC. Современные версии среды «MPLAB X IDE» являются мультиплатформенными и работают под различными операционными системами для ЭВМ. Среда распространяется бесплатно.

Язык ассемблер. Команды и основы ассемблера

Программирование на ассемблер

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

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

Регистры

Регистрами в языке ассемблер называют ячейки памяти, расположенные непосредственно на кристалле с АЛУ (процессор). Особенностью этого типа памяти является скорость обращения к ней, которая значительно быстрее оперативной памяти ЭВМ. Она также называется сверхбыстрой оперативной памятью (СОЗУ или SRAM).

Существуют следующие виды регистров:

  1. Регистры общего назначения (РОН).
  2. Флаги.
  3. Указатель команд.
  4. Регистры сегментов.

Есть 8 регистров общего назначения, каждый размером в 32 бита.

Доступ к регистрам EAX, ECX, EDX, EBX может осуществляться в 32-битовом режиме, 16-битовом — AX, BX, CX, DX, а также 8-битовом — AH и AL, BH и BL и т. д.

Буква «E» в названиях регистров означает Extended (расширенный). Сами имена же связаны с их названиями на английском:

[tchecklist]

  • Accumulator register (AX) — для арифметических операций.
  • Counter register (CX) — для сдвигов и циклов.
  • Data register (DX) — для арифметических операций и операций ввода/вывода.
  • Base register (BX) — для указателя на данные.
  • Stack Pointer register (SP) — для указателя вершины стека.
  • Stack Base Pointer register (BP) — для индикатора основания стека.
  • Source Index register (SI) — для указателя отправителя (источника).
  • Destination Index register (DI) — для получателя.

[/tchecklist]

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

Регистр флагов. Под этим подразумевается байт, который может принимать значения 0 и 1. Совокупность всех флагов (их порядка 30) показывают состояние процессора. Примеры флагов: Carry Flag (CF) — Флаг переноса, Overflow Flag (OF) — переполнения, Nested Flag (NT) — флаг вложенности задач и многие другие. Флаги делятся на 3 группы: состояние, управление и системные.

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

Регистры сегментов (CS, DS, SS, ES, FS, GS). Их наличие в ассемблере продиктовано особым управлением оперативной памятью, чтобы увеличить ее использование в программах. Благодаря им можно было управлять памятью размером до 4 Гб. В архитектуре Win32 необходимость в сегментах отпала, но названия регистров сохранились и используются по-другому.

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

Идентификаторы, целые числа, символы, комментарии, эквивалентность

Идентификатор в языке программирования ассемблер имеет такой же смысл, как и в любом другом. Допускается использование латинских букв, цифр и символов «_», «.», «?», «@», «$». При этом прописные и строчные буквы эквивалентны, а точка может быть только первым символом идентификатора.

Целые числа в ассемблере можно указывать в системах отсчета с основаниями 2, 8, 10 и 16. Любая другая запись чисел будет рассматриваться компилятором ассемблера в качестве идентификатора.

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

[tchecklist]

  • в строке, заключенной в апострофы, кавычки указываются один раз, апостроф — дважды: ‘can»t’, ‘ he said «to be or not to be» ‘;
  • для строки, заключенной в кавычки, правило обратное: дублируются кавычки, апострофы указываются как есть: «couldn’t», » My favourite bar is «»Black Cat»» «.
Читать еще:  Автоматические видеорегистраторы при запуске двигателя

[/tchecklist]

Для указания комментирования в языке ассемблер используется символ точка с запятой — «;». Допустимо использовать комментарии как в начале строк, так и после команды. Заканчивается комментарий переводом строки.

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

Таким образом в программе все вхождения будут заменяться на , на месте которого допустимо указывать целое число, адрес, строку или другое имя. Директива EQU похожа по своей работе на #define в языке С++.

Директивы данных

Языки высокого уровня (C++, Pascal) являются типизированными. То есть, в них используются данные, имеющие определенный тип, имеются функции их обработки и т. д. В языке программирования ассемблер подобного нет. Существует всего 5 директив для определения данных:

  1. DB — Byte: выделить 1 байт под переменную.
  2. DW — Word: выделить 2 байта.
  3. DD — Double word: выделить 4 байта.
  4. DQ — Quad word: выделить 8 байтов.
  5. DT — Ten bytes: выделить 10 байтов под переменную.

Буква D означает Define.

Любая директива может быть использована для объявления любых данных и массивов. Однако для строк рекомендуется использовать DB.

В качестве операнда допустимо использовать числа, символы и знак вопрос — «?», обозначающий переменную без инициализации. Рассмотрим примеры:

real1 DD 12.34
char db ‘c’
ar2 db ‘123456’,0 ; массив из 7 байт
num1 db 11001001b ; двоичное число
num2 dw 7777o ; восьмеричное число
num3 dd -890d ; десятичное число
num4 dd 0beah ; шестнадцатеричное число
var1 dd ? ; переменная без начального значения
ar3 dd 50 dup (0) ; массив из 50 инициализированных эл-тов
ar4 dq 5 dup (0, 1, 1.25) ; массив из 15 эл-тов, инициализированный повторами 0, 1 и 1.25

Команды (инструкции)

Синтаксис команд ассемблера или инструкций ассемблера выглядит следующим образом:

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

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

В роли операндов команды могут выступать:

[tchecklist]

  • регистры, обращение к которым происходит по их именам;
  • константы;
  • адреса.

[/tchecklist]

Подробнее об адресах

Адрес может передаваться несколькими способами:

  1. В виде имени переменной, которая в ассемблере является синонимом адреса.
  2. Если переменная является массивом, то обращение к элементу массива происходит через имя его переменной и смещения. Для этого существует 2 формы: [ + ] и [ ]. Следует учитывать, что смещение — это не индекс в массиве, а размер в байтах. Программисту самому необходимо понимать, на сколько нужно сделать смещение в байтах, чтобы получить нужный элемент массива.
  3. Можно использовать регистры. Для обращения к памяти, в которой хранится регистр, нужно использовать квадратные скобки: [ebx], [edi].
  4. [] — квадратные скобки допускают применение сложных выражений внутри себя для вычисления адреса: [esi + 2*eax].

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

Помимо этого, в ассемблер существуют сокращения: r — для регистров, m — для памяти и i — для операнда. Эти сокращения используются с числами 8, 16 и 32 для указания размера операнда: r8, m16, i32 и т. д.

add i8/i16/i32, m8/m16/m32 ;суммирование операнда с ячейкой памяти

Команда mov или пересылка

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

В процессоре существует и другие команды для реализации пересылки. Например, XCHG — команда обмена операндов значениями. Но с точки зрения программиста, все они реализованы через команду базовую MOV. Рассмотрим примеры:

MOV i, 0 ; Записать в i значение 0
MOV ECX, EBX ; Пересылка значения EBX в ECX

В виде операнда может выступать как регистр, так и ячейка памяти. Однако если содержимое двух регистров можно переставить, то двух ячеек памяти — нет. Следует внимательно следить за тем, чтобы операнды имели одинаковый размер. Также заметим, что команда MOV не изменяет значения флагов.

Инструментарий

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

[tchecklist]

  • Borland Turbo Assembler (TASM) — один из самых популярных инструментов. Хорошо подходит для разработки под DOS и плохо — под Windows.
  • Microsoft Macro Assembler (MASM) — это пакет для разработки на ассемблере в среде Windows. Существует как отдельно, так и в виде встроенной функции в среде Visual Studio. Ассемблер и языки высокого уровня часто совместимы. В том смысле, что последние могут использовать ассемблер напрямую. Например, С++.
  • Netwide Assembler (NASM) — популярный свободный ассемблер для архитектуры Intel.

[/tchecklist]

Существует множество инструментов. При этом следует сделать особую пометку о том, что нет единого стандарта синтаксиса ассемблера. Есть 2 наиболее применимых: AT&T-синтаксис, ориентированный на процессоры производства не Intel, и, соответственно, Intel-синтаксис.

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

Язык ассемблер. Команды и основы ассемблера на News4Auto.ru.

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

голоса
Рейтинг статьи
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector