Какую структуру имеет программа на языке ассемблера

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

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

Язык ассемблер – это язык, в котором каждое высказывание соответствует ровно одной машинной команде.

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

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

1. Это взаимно однозначное соответствие между высказываниями языка ассемблера и машинными командами.

Урок 17. Язык ассемблера. Основы

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

Представление об основах программирования на машинно-ориентированных языках полезно для:

— лучшего понимания архитектуры ПК и более грамотного использования компьютеров;

— для разработки более рациональных структур алгоритмов программ решения прикладных задач;

— возможности просмотра и корректировки исполняемых программ с расширением .exe и .com, компилированных с любых языков высокого уровня, в случае утраты исходных программ (вызвав указанные программы в отладчик программы DEBUG и декомпилировав их отображение на языке ассемблера);

— составления программ решения наиболее ответственных задач (программа, составленная на машинно-ориентированном языке, обычно эффективнее – короче и быстрее процентов на 30-60 программ, полученных в результате трансляции с языков высокого уровня)

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

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

Алфавит языка ассемблера составляют символы ASCII.

Числа только целые. Различают:

— двоичные числа, заканчиваются буквой В;

— десятичные числа, заканчиваются буквой D;

— шестнадцатеричные числа, заканчиваются буквой Н.

Оперативная память, регистры, представление данных

Для определённой серии МП используется индивидуальный язык составления программ – язык ассемблер.

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

Урок №0. Почему важно уметь программировать на языке Assembler.

Основные принципы программирования на машинно-ориентированных языках рассмотрим на примере языка ассемблер для МП КР580ВМ80. Для программирования на языке используется общая методика. Конкретные же технические приемы записи программ связаны с особенностями архитектуры и системы команд целевого МП.

Программная модель микропроцессорной системы на основе МП КР580ВМ80

Программная модель МПС в соответствии с рисунком 1

МП Порты Память

B C 05H 07FF Управляющая программа (монитор) ПЗУ
D E 06H
H L 07H Демонстрационные программы
А FL 0AFF Область адресов для записи исследуемых программ ОЗУ
SP
PC 0B00 0BB0 Для записи данных исследуемых программ Cтек
S Z AC P C

FL

Рисунок 1

С точки зрения программиста МП КР580ВМ80 имеет следующие программно-доступные регистры.

А– 8-битовый регистр аккумулятор. Является главным регистром МП. Любая операция, выполняемая в АЛУ, предполагает размещение одного из операндов, подлежащих обработке, в аккумуляторе. Результат операции в АЛУ тоже обычно хранится в А.

B, C, D, E, H, L – 8-битовые регистры общего назначения (РОН). Внутренняя память МП. Предназначены для хранения обрабатываемой информации, а также результатов операции. При обработке 16-разрядных слов из регистров образуют пары BC, DE, HL, причем сдвоенный регистр называется первой буквой – B, D, H. В регистровой паре старшим является первый регистр. Особым свойством обладают регистры H, L, используемые как для хранения данных, так и для хранения 16-разрядных адресов ячеек ОЗУ.

FL– регистр флагов (регистр признаков) 8-битовый регистр, в котором сохраняются пять признаков результата выполнения арифметических и логических операций в МП. Формат FL в соответствии с рисунком

Разряд С ( CY — carry) — перенос, устанавливается в 1, если был перенос из старшего разряда байта при выполнении арифметических операций.

Разряд Р (parity) – четность, устанавливается в 1, если число единиц в разрядах результата четно.

Разряд АС – дополнительный перенос, предназначен для хранения значения переноса из младшей тетрады результата.

Разряд Z (нуль) – устанавливается в 1, если результат операции равен 0.

Разряд S (знак) – устанавливается в 1, если результат отрицательный, и в 0, если результат положительный.

SP–- указатель стека, 16-разрядный регистр, предназначен для хранения адреса ячейки памяти, куда был записан последний введенный в стек байт.

РС – программный счетчик (счетчик команд), 16-разрядный регистр, предназначен для хранения адреса следующей выполняемой команды. Содержимое счетчика команд автоматически увеличивается на 1 сразу же после выборки очередного байта команды.

В начальной области памяти адреса 0000Н – 07FF располагается управляющая программа и демонстрационные программы. Это область ПЗУ.

0800 – 0АFF — область адресов для записи исследуемых программ. (ОЗУ).

0В00 – 0ВВ0 — область адресов для записи данных. (ОЗУ).

0ВВ0 – начальный адрес стека. (ОЗУ).

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

Формат данных и структура команд языка ассемблер

Память МП КР580ВМ80 представляет собой массив 8-ьитных слов, называемых байтами, Каждый байт имеет свой 16-разрядный адрес, определяющий его положение в последовательности ячеек памяти. МП может адресовать 65536 байт памяти, которая может содержать как в ПЗУ, так и в ОЗУ.

Формат данных

Данные хранятся в памяти в виде 8-битных слов:

D7 D6 D5 D4 D3 D2 D1 D0

Младшим битом является бит 0, старшим – бит 7.

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

Читайте также:
Программа характеристики компьютера без установки

Формат команд

Команды МП КР580ВМ80 имеют одно, двух или трехбайтный формат. Многобайтные команды должны быть размещены в соседних ЯП. Формат команды зависит от особенностей выполняемой операции.

Первый байт команды содержит код операции, записанный в мнемоническом виде.

Он определяет формат команды и те действия, которые должны быть выполнены МП над данными в процессе ее выполнения, и способ адресации, а также может содержать информацию о нахождении данных.

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

Формат однобайтовой команды в соответствии с рисунком 2

Код операции

Рисунок 2

Формат двухбайтовой команды в соответствии с рисунком 3

Код операции
Операнд (адрес)

Рисунок 3

Формат трехбайтовой команды в соответствии с рисунком 4

Код операции
Адрес (операнд). Младший байт адреса
Адрес (операнд). Старший байт адреса

Рисунок 4

В командах на языке ассемблера код операции имеет сокращённую форму записи английских слов – мнемоническое обозначение. Мнемоника (от греческого mnemonic – искусство запоминания) позволяет легче запомнить команды по их функциональному назначению.

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

Методы адресации

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

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

Для МП КР580ВМ80 существуют следующие методы адресации:

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

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

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

Косвенная(неявная)адресация предполагает, что во внутреннем регистре МП находится не сам операнд, а его адрес в памяти.

Стековая адресация предполагает, что команда не содержит адрес. Адресация к ячейкам памяти по содержимому 16-разрядного регистра SP (указателя стека).

Система команд

Система команд МП – это полный перечень элементарных действий, которые способен производить МП. Управляемый этими командами МП выполняет простые действия, такие как элементарные арифметические и логические операции, пересылку данных, сравнение двух величин и др. Число команд МП КР580ВМ80 — 78 (с учетом модификаций 244).

Различают следующие группы команд:

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

Символы и сокращения, применяемые при описании команд и составлении программ

Символ Сокращение
ADDR 16-битовый адрес
DATA 8-битовые данные
DATA 16 16-битовые данные
PORT 8-битовый адрес УВВ (устройства ввода-вывода)
BYTE 2 Второй байт команды
BYTE 3 Третий байт команды
R, R1, R2 Один из регистров: A, B, C, D, E, H, L
RP Одна из регистровых пар: В — задает пару ВС; D — задает пару DE; H – задает пару HL
RH Первый регистр пары
RL Второй регистр пары
Λ Логическое умножение
V Логическое сложение
Сложение по модулю два
М Ячейка памяти, адрес которой задаёт содержимое регистровой пары HL, т. е. М = (HL)

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

Язык ассемблера. Особенности, макросы, формат операторов, псевдокоманды. Часть 1.

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

Введение.

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

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

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

). Сформированная последовательность симво­лов используется для выполнения возложенных на исходную программу функций.

Рассматриваемый ниже язык ассемблера реализуется с помощью компиляции.

Основные особенности ассемблера:

● вместо двоичных кодов в языке используются символьные имена — мнемо­ника. Например, для команды сложения (

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

● каждое высказывание соответствует одной машинной команде (коду), т. е. су­ществует взаимно однозначное соответствие между машинными командами и операторами в программе на языке ассемблера;

● язык обеспечивает доступ ко всем объектам и командам. Языки высокого уровня такой способностью не обладают. Например, язык ассемблера позво­ляет выполнить проверку бита регистра флагов, а язык высокого уровня (на­пример,

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

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

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

Читайте также:
Радио теле видео кинохроникальная программа это

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

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

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

Формат оператора в языке ассемблера.

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

Для поля метки отводится колонка 1. Метка является символи­ческим именем, или идентификатором, адреса памяти. Она необходима для того, чтобы можно было:

● совершить условный или безусловный переход к команде;

● получить доступ к месту, где хранятся данные.

Такие высказывания снабжаются меткой. Для обозначения имени используют­ся (прописные) буквы английского алфавита и цифры. В начале имени должна стоять буква, в конце — разделитель в виде двоеточия. Метку с двоеточием мож­но писать на отдельной строке, а код операции — на следующей строке в колонке 2, что упрощает работу компилятора. Отсутствие двоеточия не поз­воляет отличить метку от кода операции, если они расположены на отдельных строках.

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

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

Поле кода операции.

Это поле содержит мнемокод команды или псевдо­команды (см. ниже). Мнемокод команд выбирается разработчиками языка. В язы­ке ассемблера

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

), а для сохранения содержимого регистра в памяти — мнемоника

). В языках ассемблера

для обеих операций можно ис­пользовать одно имя, соответственно

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

табл. 5.2.1

Мнемоника регистров также зависит от версии ассемблера (табл. 5.2.1).

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

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

— соответственно двоичная, восьмеричная, шестнадцатеричная, десятичная системы счисления (

можно не записывать). Если первой цифрой шестнадцатеричного числа являются А, В, С,

, то впереди добавляется незначащий 0 (нуль);

● коды внутренних регистров микропроцессора и ячейки памяти

М (источников или приемников информации) в виде букв А, В, С,

, М или их адреса в любой системе счисления (например, 10В — адрес регистра

в двоичной системе);

для регистровых пар ВС,

, Н; для пары аккумулятора и регистра признаков —

; для счетчика команд —

;для указателя стека —

● метки, указывающие адреса операндов или следующих команд в условных

(при выполнении условия) и безусловных переходах. Например, операнд М1 в команде

означает необходимость безусловного перехода к коман­де, адрес которой в поле метки отмечен идентификатором М1;

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

— определить слово), а позднее ввели альтернативный вариант .

который с самого начала был в языке для процессоров

Процессоры обрабатывают операнды разной длины. Для ее определения раз­работчики ассемблера приняли разные решения, например:

II регистры разной длины имеют разные названия: ЕАХ — для раз­мещения 32–битных операндов (тип

); АХ — для 16–битных (тип

и АН — для 8–битных (тип

к каждому коду операции прибавляются суффиксы: суффикс

; суффикс «.В» для типа

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

) и слова в 64–битный ре­гистр используются коды операций

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

● точка с запятой (;) в языках для процессоров фирмы

● восклицательный знак (!) в языках для

Каждая отдельная строка, отведенная под комментарий, предваряется начальным символом.

В языке ассемблера можно выделить два ос­новных вида команд:

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

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

табл. 5.2.2

.

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

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

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

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

Читайте также:
Один из методов составления финансового плана или программы в целом

Макрос, или макрокоманда, характеризуется тремя аспектами: макроопреде­лением, макрообращением и макрорасширением.

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

Макроопределение имеет следующую структуру:

Список выражений ; Макроопределение

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

макроса, включающий в себя имя

и набор параметров;

● отмеченное точками тело макроса;

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

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

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

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

) макроса ассемблер замещает его телом макроса.

Использование имени макроса в качестве кода операции называется макро–обращением (макровызовом), а его замещение телом макроса — макрорасши­рением.

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

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

Процесс ассемблирования осуществляется в два прохода:

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

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

Макросы с параметрами.

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

● с фактическими параметрами, которые помещаются в поле операндов макро-обращения;

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

использования макросов с параметрами.

В программе 1 приведено две похожих последовательности команд, отличающихся тем, что пер­вая из них меняет местами Р и

В программе 2 включен макрос с двумя формальными параметрами Р1 и Р2. Во время расшире­ния макроса каждый символ Р1 внутри тела макроса замещается первым фактическим параметром (Р,

), а символ Р2 замещается вторым фактическим параметром (

) из программы № 1. В макровызо­ве

Источник: pue8.ru

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

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

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

.MODEL FLAT, STDCALL

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

Остальная часть программы относится к работе транслятора.

.686P — разрешены команды защищенного режима Pentium 6 (Pentium II). Данная директива выбирает поддерживаемый набор команд ассемблера, указывая модель процессора. Буква P, указанная в конце директивы, сообщает транслятору о работе процессора в защищенном режиме.

.MODEL FLAT, stdcall — плоская модель памяти. Эта модель памяти используется в операционной системе Windows. stdcall

.DATA — сегмент программы, содержащий данные.

.CODE — блок программы, содержащей код.

START — метка. В ассемблере метки играют большую роль, что не скажешь о современных языках высокого уровня.

END START — конец программы и сообщение транслятору, что начинать выполнение программы надо с метки START.

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

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

Организация цикла с помощью loop

Для организации циклов со счетчиком: loop / loope / loopne . Эти команды используют в качестве счетчика регистр cx, они сами уменьшают его значение после каждой итерации цикла и сравнивают после уменьшения с нулём.

Команда loop выполняет следующие действия:

• уменьшает регистр cx ;

• сравнивает cx с нулем, если cx >0, то управление передается на метку перехода (продолжаем цикл).

Команды loope/loopne позволяют выйти из цикла по дополнительному условию.

Примечание: при написании вложенных циклов loop , необходимо помнить, что все они используют для счетчика один и тот же регистр – cx . Для правильной работы необходимо сохранить счетчик внешнего цикла ( push cx ) до инициализации внутреннего и восстановить его ( pop cx ) после команды loop внутреннего цикла.

Инкремент и декремент

Инкремент – операция во многих языках программирования, увеличивающая переменную. Обратную операцию называют декремент. Чаще всего унарная операция приводит переменную к следующему элементу базового типа (то есть для целых чисел – увеличивает на 1, для символьного типа даёт следующий символ в некоторой таблице символов и т.п.)

inc операнд — операция инкремента, то есть увеличения значения операнда на 1;

операнд = операнд +1

66. Раздельная трансляция: назначение, варианты компоновки

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

Существует 4 варианта компоновки программ.

Вариант 1. Основная программа Pr1 имеет сегменты:

Результаты возвращаются через регистры. Дополнительная программа имеет только сегмент кода. При компоновке получаем 2 разных сегмента кода. Для этого используется модель памяти medium.

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

Дополнительная программа использует данные из основной программы, записанные в сегменте данных. В основной программе они имеют вид PUBLIC. В дополнительной extra и word.

Вариант 4. Обмен данными через стек

67. !Высказывания, виды высказываний. Логические переменные и функции

Высказывание — это повествовательное предложение, про которое можно определенно сказать истинно оно или ложно (истина (логическая 1), ложь (логический 0)).

Источник: megaobuchalka.ru

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