0

Из чего состоит процесс ассемблирования программы

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

Каждая машинная команда состоит из двух частей:

  • операционной — определяющей, «что делать»;
  • операндной — определяющей объекты обработки, «с чем делать».

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

метка команда/директива операнд(ы) ;комментарии

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

Метка, команда/директива и операнды (если имеются) разделяются по крайней мере одним символом пробела или табуляции.

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

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

Примеры строк кода:

Метки

Метка в языке ассемблера может содержать следующие символы:

  • все буквы латинского алфавита;
  • цифры от 0 до 9;
  • спецсимволы: _, @, $, ?.

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

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

Команды

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

Директивы

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

Операнды

Операнд – объект, над которым выполняется машинная команда или оператор языка программирования.
Команда может иметь один или два операнда, или вообще не иметь операндов. Число операндов неявно задается кодом команды.
Примеры:

  • Нет операндов ret ;Вернуться
  • Один операнд inc ecx ;Увеличить ecx
  • Два операнда add eax,12 ;Прибавить 12 к eax

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

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

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

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

Правила записи идентификаторов.

  • Идентификатор может состоять из одного или нескольких символов.
  • В качестве символов можно использовать буквы латинского алфавита, цифры и некоторые специальные знаки: _, ?, $, @.
  • Идентификатор не может начинаться символом цифры.
  • Длина идентификатора может быть до 255 символов.
  • Транслятор воспринимает первые 32 символа идентификатора, а остальные игнорирует.
Комментарии

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

Структура программы на ассемблере

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

Пример «ничего не делающей» программы на языке ассемблера:

В данной программе представлена всего одна команда микропроцессора. Эта команда RET . Она обеспечивает правильное окончание работы программы. В общем случае эта команда используется для выхода из процедуры.
Остальная часть программы относится к работе транслятора.
.686P — разрешены команды защищенного режима Pentium 6 (Pentium II). Данная директива выбирает поддерживаемый набор команд ассемблера, указывая модель процессора. Буква P, указанная в конце директивы, сообщает транслятору о работе процессора в защищенном режиме.
.MODEL FLAT, stdcall — плоская модель памяти. Эта модель памяти используется в операционной системе Windows. stdcall
.DATA — сегмент программы, содержащий данные.
.CODE — блок программы, содержащей код.
START — метка. В ассемблере метки играют большую роль, что не скажешь о современных языках высокого уровня.
END START — конец программы и сообщение транслятору, что начинать выполнение программы надо с метки START .
Каждый модуль должен содержать директиву END , отмечающую конец исходного кода программы. Все строки, которые следуют за директивой END , игнорируются. Если опустить директиву END , то генерируется ошибка.
Метка, указанная после директивы END , сообщает транслятору имя главного модуля, с которого начинается выполнение программы. Если программа содержит один модуль, метку после директивы END можно не указывать.

В результате изучения данной темы Вы будете:

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

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

Рассмотрим ситуацию, где первый оператор – переход к метке L. Ассемблер не мо­жет ассемблировать это оператор, пока не будет знать адрес L, а L, в свою очередь, может находиться где-нибудь в конце программы, и тогда ассемблер не сможет найти этот адрес, не прочитав всю программу. Эта ситуация называетсяпроблемойопережающей ссылки, поскольку символ L используется еще до того, как он определен (то есть было сделано обращение к символу, определение которого появится позднее).

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

Читайте также:  Зайти в почту гугл на свою страницу

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

Еще одна задача первого прохода – сохранить все макроопределения и расши­рить вызовы по мере их появления. Следовательно, в одном проходе происходит и определение символов, и расширение макросов.

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

Вопросы для самоконтроля

1. Можно ли следующую программу ассемблировать в два прохода?

2. Подумайте, как можно поместить макроассемблер в бесконечный цикл?

3. Что значит проход компилятора? Объясните смысл каждого прохода.

Раздел 7. Архитектуры компьютеров параллельного действия

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

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

Чтобы решать более сложные задачи, разработчикам приходится разрабатывать все новые и новые вычислительные системы с различными способами организации. Невозможно построить компьютер с одним процессором и временем цикла в 0,001 нс, но зато можно построить компьютер с 1000 процессорами, время цикла каждого из которых составляет 1 нс.

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

Тема 7.1. Организация конвейерных и параллельных вычислений

В результате изучения данной темы Вы будете:

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

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

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

Конвейеры

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

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

На Рис. 7.1, а) изображен конвейер из 5 блоков, которые называютсястадиями. Стадия С1 вызывает команду из памяти и помещает ее в буфер, где она хранится до тех пор, пока не будет нужна. Стадия С2 декодирует эту команду, определяя ее тип и тип операндов, над которыми она будет производить определенные действия. Стадия СЗ определяет местонахождение операндов и вызывает их или из регистров, или из памяти. Стадия С4 выполняет команду, обычно путем провода операндов через тракт данных. И, наконец, стадия С5 записывает результат обрат­но в нужный регистр.

Рис. 7.1. Конвейер из 5 стадий (а); состояние каждой стадии в зависимости от количества пройденных циклов (б)

На Рис. 7.1, б) показано, как действует конвейер во времени. Во время цикла 1 стадия С1 работает над командой 1, вызывая ее из памяти. Во время цикла 2 ста­дия С2 декодирует команду 1, в то время как стадия С1 вызывает из памяти коман­ду 2. Во время цикла 3 стадия СЗ вызывает операнды для команды 1, стадия С2 декодирует команду 2, а стадия С1 вызывает третью команду. Во время цикла 4 стадия С4 выполняет команду 1, СЗ вызывает операнды для команды 2, С2 деко­дирует команду 3, а С1 вызывает команду 4. Наконец, во время пятого цикла С5 записывает результат выполнения команды 1 обратно в регистр, тогда как другие стадии работают над следующими командами.

Конвейеры позволяют найти компромисс междувременем ожидания (сколь­ко времени занимает выполнение одной команды) ипропускной способностью процессора (сколько миллионов команд в секунду выполняет процессор). Если время цикла составляет Т нс, а конвейер содержит n стадий, то время ожидания составит n×Т нс, а пропускная способность – 1000/Т млн команд в секунду.

Ассемблирование программы – раздел Образование, Свойства операторов работы с экраном Для Того, Чтобы Выполнить Исходную Ассемблерную Программу, Необходимо Прежде .

Для того, чтобы выполнить исходную ассемблерную программу, необходимо прежде провести ее ассемблирование и затем компоновку. На дискете с ассемблерным пакетом имеются две версии aссемблера. ASM.EXE — сокращенная версия с отсутствием некоторых незначительных возможностей и MASM.EXE — полная версия. В случае, если размеры памяти позволяют, то используйте версию MASM.

Простейший вариант вызова программы ассемблирования — это ввод команды MASM (или ASM), что приведет к загрузке программы Ассемблера с диска в память. На экране появится:

Читайте также:  Как воздух попадает в двигатель

source filename [.ASM]:

object filename [filename.OBJ]:

source listing [NUL.LST]:

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

Во-втором запросе предполагается аналогичное имя файла (но можно его заменить).

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

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

В случае, если вы хотите оставить значения по умолчанию, то в трех последних запросах просто нажмите Enter.

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

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

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

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

Листинг содержит не только исходный текст, но также слева транслированный машинный код в шестнадцатеричном формате. В самой левой колонке находится шест.адреса команд и данных.

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

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

Эта тема принадлежит разделу:

Свойства операторов работы с экраном

Расширенные возможности экранных операций байт атрибутов фон текст атрибут bl r g b i r g.. прерывание bios int h.. прерывание int h обеспечивает управление всем экраном в регистре ah устанавливается код определяющий функцию..

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

Что будем делать с полученным материалом:

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

Все темы данного раздела:

Команда прерывания INT
Ранее мы имели дело с программами, в которых данные oпределялись в операндах команд (непосредственные данные) или инициализировались в конкретных полях программы. Число практических применений таки

Установка курсора
Экран можно представить в виде двумерного пространства с адресуемыми позициями в любую из которых может быть установлен курсор. Обычный видеомонитор, например, имеет 25 строк (нумеруемых от 0 до 24

Очистка экрана
Запросы и команды остаются на экране пока не будут смещены в результате прокручивания («скроллинга») или переписаны на этом же месте другими запросами или командами. Когда программа начина

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

Байт атрибутов
Байт атрибутов в текстовом (не графическом) режиме определяет характеристики каждого отображаемого символа. Байт-атрибут имеет следующие 8 бит: Фон Текст Атрибут: BL R G B I R G B

Эффект выделения
Фон Текст RGB RGB Неотображаемый (черный по черному) 000 000 Подчеркивание (не для цвета) 000 001 Нормальный (белый по черному) 000 111 Инвертированный

Расширенный ASCII код
ASCII-коды от 128 до 255 (шест. 80-FF) представляют собой ряд специальных символов полезных при формировании запросов, меню, специальных значков с экранными атрибутами. Например, используя cледующи

Функциональные клавиши
Клавиатура располагает тремя основными типами клавишей: 1. Символьные (алфавитно-цифровые) клавиши: буквы от a до z, цифры от 0 до 9, символы %, $, # и так далее. 2. Функциональны

Скэн-коды
Клавиатура имеет по две клавиши для таких символов как *, + и -. Нажатие «звездочки», например, устанавливает код символа шест.2A в регистре AL и один из двух скэн-кодов в регистре AH в зависимости

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

Байт-атрибут
Текстовой режим допускает использование байта атрибута. Цвет на экране сохраняется до тех пор, пока другая команда не изменит его. Для установки цвета можно использовать в команде INT 10H

Комментарии в программах на Ассемблере
Использование комментариев в программе улучшает ее ясность, oсобенно там, где назначение набора команд непонятно. Комментаpий всегда начинаются на любой строке исходного модуля с си

Формат кодирования
Основной формат кодирования команд Ассемблера имеет следующий вид: [метка] команда [операнд(ы)] Метка (если имеется), команда и операнд (если имеется) pазделяются

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

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

Директива TITLE
Для того, чтобы вверху каждой страницы листинга печатался заголовок (титул) программы, используется диpектива TITLE в следующем формате: TITLE текст Рекомендуется в качестве текст

Директива SEGMENT
Любые ассемблерные программы содержат по крайней мере один сегмент — сегмент кода. В некоторых программах используется сегмент для стековой памяти и сегмент данных для определения данных. Асcемблер

Объединение
Этот элемент определяет объединяется ли данный сегмент с другими сегментами в процессе компоновки после ассемблирования. Возможны следующие типы объединений: STACK, COMMON, PUBLIC, AT выражение и M

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

Директива ASSUME
Процессор использует регистр SS для адресации стека, регистр DS для адресации сегмента данных и регистр CS для адресации cегмента кода. Ассемблеру необходимо сообщить назначение каждого се

Директива END
Директива ENDS завершает сегмент, а директива ENDP завершает процедуру. Директива END в свою очередь полностью завершает всю программу: Директива Операнд END [имя_процедуры

Читайте также:  Диагностика состояния жесткого диска

Память и регистры
Рассмотрим особенности использования в командах имен, имен в квадратных скобках и чисел. В следующих примерах положим, что WORDA определяет слово в памяти: MOV AX,BX ;Переслать содержимое

Инициализация программы
Существует два основных типа загрузочных программ: EXE и COM. Рассмотрим требования к EXE-программам. DOS имеет четыре требования для инициализации ассемблерной EXE-программы:

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

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

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

Компоновка программы
В случае, если в результате ассемблирования не обнаружено ошибок, то cледующий шаг — компоновка объектного модуля. Файл имяпрограммы.OBJ содержит только машинный код в шестнадцатеричной форме. Так

Выполнение программы
После ассемблирования и компоновки программы можно (наконец-то!) выполнить ее. В случае, если EXE-файл находится на дисководе C, то выполнить ее можно командой: C:имя программы.EXE или C:и

Файл перекрестных ссылок
В процессе трансляции Ассемблер создает таблицу идентификаторов (CRF), которая может быть представлена в виде листинга перекрестных ссылок на метки, идентификаторы и переменные в п

Определение длины команды
Эта задача может решаться существенно разным образом для разных языков. В языках некоторых Ассемблеров мнемоника команды однозначно определяет ее формат и длину (S/390, все RISC-процессоры). В этом

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

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

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

Двухпроходный Ассемблер — второй проход
Обычно 2-й проход Ассемблера читает исходный модуль с самого начала и отчасти повторяет действия 1-го прохода (лексический разбор, распознавание команд и директив, подсчет адресов). Это, однако, ск

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

START/ SECT
Начало модуля или программной секции. Операндом директивы является имя секции. Этой директивой устанавливается в 0 счетчик адресов программы. Программа может состоять из нескольких программных секц

Одно- и многопроходный Ассемблер
Мы показали, что в двухпроходном Ассемблере на 1-м проходе осуществляется определение имен, а на втором — генерация кода. Можно ли построить однопроходный Ассемблер? Трудность состоит в то

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

Безусловный переход
JMP Цикл: LOOP Условный переход: J nnn (больше,меньше,равно) Вызов процедуры: CALL

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

OF (Overflow Flag) — флаг переполнения
Фиксирует арифметическое переполнение, то есть, перенос вниз старшего (знакового) бита при знаковых арифметических операциях. В качестве примера: команда CMP сравнивает два операнда и возд

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

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

Сегмент стека
Ниже буду рассмотрены только две команды, использующие стек, — это команды PUSH в начале сегмента кодов, которые обеспечивают возврат в DOS, когда EXE-программа завершается. Естественно дл

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

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

Команды сдвига
При выполнении команд сдвига флаг CF всегда содержит значение последнего выдвинутого бита. Существуют следующие команды cдвига: SHR ;Логический (беззнаковый) сдвиг вправо

Команды циклического сдвига
Циклический сдвиг представляет собой операцию сдвига, при которой выдвинутый бит занимает освободившийся разряд. Существуют следующие команды циклического сдвига: ROR ;Циклический сдвиг вп

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

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

Директива PUBLIC
Директива PUBLIC указывает Ассемблеру и компоновщику, что адрес указанного идентификатора доступен из других программ. Директива имеет следующий формат: PUBLIC идентификатор [, . ]

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

Выполнение COM-программы
В отличие от EXE-файла, COM-файл не содержит заголовок на диске. Так как организация COM-файла намного проще, то для DOS необходимо «знать» только то, что тип файла — COM. Загруженным в па

AL=0. Загрузка и выполнение
Данная операция устанавливает префикс программного сегмента для новой программы, а также адрес подпрограммы реакции на Cntrl/Break и адрес передачи управления на следующую команду после завершения

AL=3. Оверлейная загрузка
Данная операция загружает программу или блок кодов, но не создает PSP и не начинает выполнение. Таким образом можно создавать оверлейные программы. Блок параметров адресуется по регистрово

admin

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

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