- •Раздел 1. Языки программирования
- •Программное обеспечение. Основные этапы решения задач на эвм. Жизненный цикл программного средства.
- •7. Решение задачи на эвм и анализ результатов
- •Основная структура программы.
- •Эквивалентность типов
- •Преобразование типов
- •Разбор программы
- •1.3. Логический тип. Ветвления. Оператор условного перехода. Полная и сокращённая форма условного оператора. Составные условия
- •1.4 Символьный тип и функции для обработки символьного типа. Перевод символьного представления числа в целый тип.
- •1.5 Оператор выбора
- •1.6. Операторы цикла. Оператор цикла с предусловием. Оператор цикла с постусловием. Оператор цикла с параметром
- •1.7 Процедуры и функции. Параметры, локальные и глобальные переменные. Передача параметров по адресу и по значению.
- •Локальные и глобальные переменные
- •Регулярный тип (массивы). Описание массивов. Ввод и вывод элементов массива. Нахождение максимального (минимального) элемента массива.
- •Обработка матриц. Поиск заданного элемента в матрице.
- •Работа с динамическими переменными. Динамические массивы.
- •1.11. Файловый ввод-вывод. Работа с текстовыми и двоичными файлами.
- •Чтение файла при помощи fgetc. Функция fgetc применяется для чтения символа из потока.
- •Чтение файла при помощи fgets
- •Запись в файл при помощи fwrite
- •1.12. Микропроцессор Intel х86. Регистры. Команды обмена данными. Команды работы со стеком.
- •1.13 Микропроцессор Intel х86. Арифметические команды. Логические команды и команды сдвига. Команды передачи управления.
- •Двоичная арифметика
- •Десятичная арифметика
- •Логические операции
- •Сдвиговые операции
- •Команды передачи управления
- •1.14 Микропроцессор Intel х86. Способы адресации: регистровая, непосредственная, прямая, косвенная. Регистровая адресация
- •Непосредственная адресация
- •Прямая адресация
- •Косвенная адресация
Сдвиговые операции
Команда: |
SAR приемник, счетчик |
Назначение: |
Арифметический сдвиг вправо |
Команда: |
SAL приемник, счетчик |
Назначение: |
Арифметический сдвиг влево |
Команда: |
SHR приемник, счетчик |
Назначение: |
Логический сдвиг вправо |
Команда: |
SHL приемник, счетчик |
Назначение: |
Логический сдвиг влево |
Процессор: |
8086 |
Рис. 7. Сдвиговые операции
Команда: |
SHRD приемник, источник, счетчик |
Назначение: |
Сдвиг повышенной точности вправо |
Команда: |
SHLD приемник, источник, счетчик |
Назначение: |
Сдвиг повышенной точности влево |
Процессор: |
80386 |
Рис. 8. Сдвиги двойной точности
Команда: |
ROR приемник, счетчик |
Назначение: |
Циклический сдвиг вправо |
Команда: |
ROL приемник, счетчик |
Назначение: |
Циклический сдвиг влево |
Команда: |
RCR приемник, счетчик |
Назначение: |
Циклический сдвиг вправо через флаг переноса |
Команда: |
RCL приемник, счетчик |
Назначение: |
Циклический сдвиг влево через флаг переноса |
Процессор: |
8086 |
Рис. 9. Циклические сдвиги
Команды передачи управления
Команда: |
JMP операнд |
Назначение: |
Безусловный переход |
Процессор: |
8086 |
В зависимости от типа перехода различают:
переход типа short (короткий переход) — если адрес перехода находится в пределах от –127 до +128 байт от команды JMP;
переход типа near (ближний переход) — если адрес перехода находится в том же сегменте памяти, что и команда JMP;
переход типа far (дальний переход) — если адрес перехода находится в другом сегменте. Дальний переход может выполняться и в тот же самый сегмент, если в сегментной части операнда указано число, совпадающее с текущим значением CS;
переход с переключением задачи — передача управления другой задаче в многозадачной среде. Этот вариант будет рассмотрен в главе, посвященной защищенному режиму.
Команда: |
Jcc метка |
Назначение: |
Условный переход |
Процессор: |
8086 |
Таблица 7. Варианты команды Jcc
Код команды |
Реальное условие |
Условие для CMP |
JA JNBE |
CF = 0 и ZF = 0 |
если выше если не ниже или равно |
JAE JNB JNC |
CF = 0 |
если выше или равно если не ниже если нет переноса |
JB JNAE JC |
CF = 1 |
если ниже если не выше или равно если перенос |
JBE JNA |
CF = 1 и ZF = 1 |
если ниже или равно если не выше |
JE JZ |
ZF = 1 |
если равно если ноль |
JG JNLE |
ZF = 0 и SF = OF |
если больше если не меньше или равно |
JGE JNL |
SF = OF |
если больше или равно если не меньше |
JL JNGE |
SF <> OF |
если меньше если не больше или равно |
JLE JNG |
ZF = 1 и SF <> OF |
если меньше или равно если не больше |
JNE JNZ |
ZF = 0 |
если не равно если не ноль |
JNO |
OF = 0 |
если нет переполнения |
JO |
OF = 1 |
если есть переполнение |
JNP JPO |
PF = 0 |
если нет четности если нечетное |
JP JPE |
PF = 1 |
если есть четность если четное |
JNS |
SF = 0 |
если нет знака |
JS |
SF = 1 |
если есть знак |
Команда: |
JCXZ метка |
Назначение: |
Переход, если СХ = 0 |
Процессор: |
8086 |
|
|
Команда: |
JECXZ метка |
Назначение: |
Переход, если EСХ = 0 |
Процессор: |
80386 |
Команда: |
LOOP метка |
Назначение: |
Цикл |
Процессор: |
8086 |
Команда: |
LOOPE метка |
Назначение: |
Цикл, пока равно |
Команда: |
LOOPZ метка |
Назначение: |
Цикл, пока ноль |
Команда: |
LOOPNE метка |
Назначение: |
Цикл, пока не равно |
Команда: |
LOOPNZ метка |
Назначение: |
Цикл, пока не ноль |
Процессор: |
8086 |
Команда: |
CALL операнд |
Назначение: |
Вызов процедуры |
Процессор: |
8086 |
Команда: |
RET число RETN число RETF число |
Назначение: |
Возврат из процедуры |
Процессор: |
8086 |
Команда: |
INT число |
Назначение: |
Вызов прерывания |
Процессор: |
8086 |
Команда: |
IRET IRETD |
Назначение: |
Возврат из обработчика прерывания |
Процессор: |
8086 |
Команда: |
INT3 |
Назначение: |
Вызов прерывания 3 |
Процессор: |
8086 |
Команда: |
INTO |
Назначение: |
Вызов прерывания 4 при переполнении |
Процессор: |
8086 |
Команда: |
BOUND индекс, границы |
Назначение: |
Проверка выхода за границы массива |
Процессор: |
80186 |
Команда: |
ENTER размер, уровень |
Назначение: |
Вход в процедуру |
Процессор: |
80186 |
Команда: |
LEAVE |
Назначение: |
Выход из процедуры |
Процессор: |
80186 |