Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответ по госу 3.14 4.1 4.2 4.3 4.4 5.1.docx
Скачиваний:
3
Добавлен:
16.09.2019
Размер:
39.15 Кб
Скачать

ОВТ 3.14 Программирование для операционной системы WINDOWS.

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

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

-доступность больших объёмов виртуальной памяти;

-развитый сервис операционной системы, обилие функций, облегчающих разработку приложений;

-многообразие и доступность средств создания интерфейса с пользователем (диалоги, меню и т.п.).

Современный ассемблер, к которому относится и TASM в свою очередь, развивал средства: макроопределение вызова процедур, возможность введения шаблонов процедур (описание прототипов) и даже объектно-ориентированные расширения. Однако, ассемблер сохранил и такой прекрасный инструмент, как макроопределения вводимые пользователем. Все эти факторы позволяют рассматривать ассемблер, как самостоятельный инструмент для написания приложений под платформы Win32 (Windows NT). Описание прототипов функций обеспечивает строгий контроль со стороны компилятора за количеством и типом параметров, передаваемых в функции. Наиболее показательна, в этом смысле, оконная и/или диалоговая процедура. Если в программе активно используются диалоговые окна, то аналогичные фрагменты кода сильно перегрузят программу, сделав её малопригодной для восприятия. Применение макроопределений в таких ситуациях более чем оправдано.

4.1 Типы данных в языке С++

Простые типы данных

Простые типы делятся на целочисленные типы и типы с плавающей точкой. Для описания стандартных типов определены следующие ключевые слова: 1)int (целый); 2)char (символьный); 3)wchar_t (расширенный символьный); 4)bool (логический); 5)float (вещественный); 6) double (вещественный с двойной точностью).

Существует четыре спецификатора типа, уточняющих внутреннее представление и диапазон значений стандартных типов: 1)short (короткий); 2) long (длинный); 3) signed (со знаком); 4) unsigned (без знака). 5) Целый тип (int)

Спецификатор short перед именем типа указывает компилятору, что под число требуется отвести 2 байта. Спецификатор long означает, что целая величина будет занимать 4 байта.

Внутреннее представление величины целого типа — целое число в двоичном коде. При использовании спецификатора signed старший бит числа интерпретируется как знаковый ( 0 — положительное число, 1 — отрицательное). Спецификатор unsigned позволяет представлять только положительные числа.

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

-Типы shortint,longint,signedint иunsignedint можно сокращать до short,long, signed иunsigned соответственно.

-Тип char, как и другие целые типы, может быть со знаком или без знака.В величинах со знаком можно хранить значения в диапазоне от –128 до 127. При использовании спецификатора unsigned значения могут находиться в пределах от 0 до 255.

Логический тип (bool) Величины логического типа могут принимать только значения true и false. Внутренняя форма представления значения false— 0 (нуль). Любое другое значение интерпретируется как true. При преобразовании к целому типу true имеет значение 1.

Типы с плавающей точкой (float, double и longdouble) Стандарт С++ определяет три типа данных для хранения вещественных значений: float, double и longdouble.

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

4.2 Операции в языке С++.

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

1. Арифметические операции.

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

-- Унарная операция вычитания (декремент). Вычитает единицу из значения переменной. Префиксный и постфиксный. - Операция вычитания - Унарный минус. Изменяет знак величины. * Операция умножения / Операция деления % Получение остатка от деления. Допустима только для целых чисел.

2. Операции отношения.

< Меньше (а <= Меньше или равно == Сравнение на равенство >= Больше или равно > Больше != Не равно Бинарные операции отношения сравнивают первый операнд со вторым. Результат сравнения имеет значение 1 (true), если выражение истинно или 0 (false), если оно ложно. Тип результата – int. Операнды могут быть целого, вещественного и адресного типа.

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

&& Логическое умножение (операция И). Результат равен 1, когда оба операнда отличны от 0, и 0 в противном случае. a=b&&c, a=1 если b и c не равны 0, иначе а=0. || Логическое сложение (операция ИЛИ). Результат равен 1, если хотя бы один из операндов отличен от нуля, и 0 в противном случае. ! Логическое отрицание (операция НЕ). Результат 1, если другой операнд имеет значение 0, и наоборот.

Операнды логических операций могут быть целого, вещественного или адресного типа. Тип результата – int.

4. Операции сдвига.

<< Сдвигает разряды левого операнда влево на число позиций, задаваемого правым операндом. Освобождающиеся позиции заполняются нулями, сдвигаемые за старший разряд левого операнда, теряются. С помощью операции сдвига эффективно выполняется операция умножения i< >> Сдвигает разряды левого операнда вправо на число позиций, задаваемое правым операндом. Разряды, сдвигаемые за младший разряд левого операнда, теряются. Для чисел типа unsigned позиции, освобождающиеся слева, заполняются нулями. Для чисел со знаком заполнение зависит от реализации. b=1011 c=2 a=0010. С помощью операции сдвига эффективно выполняется операция деления j>>n равносильно j/2n.3.2.5. Поразрядные логические операции (побитовые операции).

& Поразрядное И (поразрядная коньюнкция). Эта операция сравнивает каждый разряд операндов. Для каждого результат равен 1 тогда, когда оба соответствующих разряда операндов равны 1. a=b&c – если оба сравниваемые бита 1, то бит результата 1, иначе 0. b=1010 c=0110 a=0010. | Поразрядное ИЛИ (поразрядная дизъюнкция). Для каждого разряда результат равен 1, если любой из соответствующих разрядов операндов равен 1. a=b|c если любой из битов равен 1, то бит результата 1, иначе 0. b=1010 c=0110 a=1110. ^ Поразрядное исключающее ИЛИ. Для каждого разряда результат равен 1, если один из двух (но не оба) соответствующих разрядов операндов равен 1. a=b^c если один из сравниваемых битов равен 0, а второй 1, то бит результата равен 1, иначе 0. b=1010 c=0110 a=1100. ~ Поразрядная инверсия. Изменяет в каждом разряде независимо 1 на 0, а 0 на 1. a=~b b=1010 a=0101.

Операнды побитовых операций должны быть целого типа.

5. Операции присваивания.

= Простое присваивание. Присваивает значение одного операнда другому. znak= znak{*, /,%,+,-,<<,>>, &,|,^} Составная операция присваивания. a znak=b понимается как a=a znak b. a+=b если a=3, b=4, то а=7.

3.2.7. Операции над указателями.

& Операция получения адреса – выдает адрес переменной, имя которой стоит за обозначением операции. ptr=&b ptr присваевается адрес b. * Косвенная адресация (разадресация) – выдает значение, хранящееся по адресу, на который ссылается указатель. a=*prt a присваевается значение по адресу ptr.

4.3 Операторы в языке С++.

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

1. Операторное выражение

Большинство операторов являются операторными выражениями, которые имеют форму

выражение;

обычно операторные выражения являются присваиваниями или обращениями к функциям.

2. Условные операторы

Имеются две формы условных операторов:

  1. IF (выражение) оператор

  2. IF (выражение) оператор ELSE оператор

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

3. Оператор while

Оператор while имеет форму

while (выражение) оператор

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

4. Оператор do

Оператор do имеет форму

do оператор while(выражения)

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

5. Оператор for

Оператор for имеет форму

(выражение-1 ; выражение-2 ; выражение-3 )оператор

необ необ необ

Оператор for эквивалентен следующему

выражение-1;

while (выражение-2) {

оператор

выражение-3

}

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

6. Оператор switch

Оператор switch (переключатель), вызывает передачу управления к одному из нескольких операторов, в зависимости от значения выражения. оператор имеет форму

switch (выражение) оператор

В выражении проводятся обычные арифметические преобразования, но результат должен иметь тип int. оператор обычно является составным. Любой оператор внутри этого оператора может быть помечен одним или более вариантным префиксом case, имеющим форму:

case константное выражение:

где константное выражение должно иметь тип int. Никакие две вариантные константы в одном и том же переключателе не могут иметь одинаковое значение

Кроме того, может присутствовать самое большее один операторный префикс вида

default:

Если ни одна из вариантных констант не совпадает со значением выражения и если при этом присутствует префикс default, то управление передается оператору, помеченному этим префиксом. Если ни один из вариантов не подходит и префикс default отсутствует, то ни один из операторов в переключателе не выполняется.

Сами по себе префиксы case и default не изменяют поток управления, которое беспрепятственно проходит через такие префиксы.

7. Оператор break

Оператор

break;

вызывает завершение выполнения наименьшего охватывающего этот оператор оператора while, do, for или switch; управление передается оператору, следующему за завершенным оператором.