Инициализация выражений и меток


Начальное значение инициализированной переменной должно представлять собой константу, но это не обязательно должно быть число. Можно также использовать выражения: TestVar DW ((924/2)+1) а также метки:

Именованные ячейки памяти


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

Перемещение данных


Итак, вы уже получили довольно обширное представление о при-роде языка Ассемблера, основных его концепциях и структуре прог-рамм на Ассемблере. Теперь, когда вы усвоили основы, можно сосре-доточить внимание на инструкциях языка Ассемблера, образующих ту часть программы на Ассемблере, которая и указывает процессору 8086 на необходимость выполнения конкретных действий. Давайте начнем с самой основной операции Ассемблера — Читать далее

Выбор размера данных


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

Данные со знаком и без знака


И числа со знаком, и беззнаковые числа состоят из последова-тельности двоичных цифр. Ответственность за различие этих двух видов чисел возлагается на программиста, который пишет программу на Ассемблере (то есть на вас), а не на процессор 8086. Например, значение 0FFFFh может представлять собой либо 65535, либо -1, в зависимости от того, как ваша программа его интерпретирует.

Доступ к сегментным регистрам


Хотя для перемещения значений в сегментные регистры и из них можно использовать инструкцию MOV, это особый случай, более огра-ниченный, чем другие случаи использования инструкции MOV. Если одним из операндов инструкции MOV является сегментный регистр, то другим операндом должен быть регистр общего назначения или ячейка памяти. Загрузить константу в сегментный регистр непосредственно невозможно, и невозможно непосредственно Читать далее

Перемещение данных в стек и из стека


Со стеком (областью памяти в сегменте стека, работающей по дисциплине FIFO — «первым-пришел-первым-ушел») вы уже встреча-лись. На вершину стека всегда указывает регистр SP. Для обращения к данным в стеке, с использованием режимов адресации памяти, при которых указателем базы является регистр BP, можно использовать инструкцию MOV. Например, инструкция:

Обмен данными


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

Ввод-вывод


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

Операции


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

Увеличение и уменьшение


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

Умножение и деление


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

Изменение знака


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

Логические операции


Турбо Ассемблер поддерживает полный набор инструкций для вы-полнения логических операций, включая инструкции AND (И), OR (ИЛИ), XOR (исключающее ИЛИ) и NOT (НЕ). Эти инструкции могут оказаться очень полезными при работе с отдельными битами слова или байта, а также для выполнения операций булевой алгебры.

Сдвиги и циклические сдвиги


В процессорах 8086 имеется множество способов, с помощью ко-торых можно сдвигать биты регистра или переменной в памяти влево или вправо. Простейшим из них является логический сдвиг. Инструкция SHL (сдвиг влево, синоним — SAL) перемещает каж-дый бит операнда-приемника на один разряд влево, по направлению к самому значащему биту. На Рис. 5.8 показано, как значение 100010110b (96h Читать далее

Циклы и переходы


Да этого момента мы рассматривали выполнении процессором 8086 инструкций в строгой последовательности. При этом каждая следующая инструкция выполнялась сразу после инструкции по преды-дущему адресу. Рассматривая программу: mov ax,[BaseCount] push ax

Безусловные переходы


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

Условные переходы


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

Циклы


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

Подпрограммы


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

Выполнение подпрограмм


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

Передача параметров


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

Возвращаемые значения


Подпрограммы часто возвращают значения в вызывающую програм-му. В программах на Ассемблере, которые предполагается вызывать из программы на языке высокого уровня, для возврата значений вы должны следовать соглашениям данного языка. Например, функции, вызываемые в языке Си, должны возвращать 8- или 16-битовые значе-ния (значения символьного, целого типа и ближние указатели) в ре-гистре AX, а 32-битовые значения (длинные Читать далее

Сохранение регистров


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

Пример программы на языке Ассемблера


Давайте теперь попробуем реализовать все то, что мы узнали в последних двух главах, в виде полезного примера программы на Ас- семблере. Эта программа WCOUNT.ASM подсчитывает число слов в фай- ле и выводит его на экран.

Диплом по ОТУ


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

Защита данных в компьютерных сетях


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

Физическая защита данных. Кабельная система


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

Предпосылки к исследованию


Программный пакет предназначен для облегчения труда администраторов игровых и интернет залов. Как обычно проходит рабочий день таких админов? Приходит клиент, платит деньги, скажем за 1 час посидеть в интернете. Админ записывает на бумагу "такое-то время, заплатили X денег за Y часов". Затем приходит 5 человек, и хотят поиграть. Платят все за 40 минут игр. Админ Читать далее

Описание комплекса разработки


C++Builder – одна из самых мощных систем, позволяющая на самом современном уровне создавать как отдельные прикладные программы Windows, так и разветвлённые комплексы, предназначенные для работы в корпоративных сетях и в Интернет. Объектно-ориентированное программирование – это в наше время совершенно естественный подход к построению сложных (и не очень сложных) программ и систем.