- •Системы счисления, используемые на компьютере. Десятичная система, двоичная и 16-ричная системы счисления. Правила перевода.
- •Арифметические операции в двоичной системе счисления. Понятие прямого, обратного и дополнительного кода. Сложение и вычитание целых чисел в двоичной системе счисления.
- •Арифметические операции в двоичной системе счисления. Представление вещественных чисел в компьютере. Сложение и вычитание вещественных чисел в двоичной системе счисления.
- •Основные логические операции: and, or, not, xor. Таблицы истинности для этих операций. Основные тождества булевой алгебры.
- •Понятие об информации и науке информатике. Исторические этапы способов обработки, хранения и передачи информации.
- •Функции компьютера. Их краткая характеристика.
- •Структура компьютера. Основные компоненты компьютера и их характеристика. Состав центрального процессора.
- •Язык блок-схем. Основные типы блоков. Понятие структуры. Виды структур.
- •17. Основные типы алгоритмов и способы их записи на языке блок-схем.
- •18. Архитектура эвм. Особенности фон Неймановской архитектуры.
- •Оперативная память компьютера. Понятие бита, байта, слова, двойного слова. Понятие адреса байта и слова.
- •Регистры центрального процессора. Краткая характеристика регистров общего назначения.
- •Регистры центрального процессора. Сегментные регистры и указатель команд. Регистр флагов.
- •Представление данных на компьютере. Представление целых чисел без знака и со знаком.
- •23 Представление данных на компьютере. Представление символьных данных и представление команд.
- •Понятие о языке Ассемблера. Этапы разработки программы на ассемблере.
- •Windows api функция для вывода символов на экран. Ее основные параметры и их назначение.
- •Windows api функция для ввода символов с консоли. Ее основные параметры и их назначение.
- •Особенности сложения и вычитания целых (в том числе и знаковых) чисел на Ассемблере.
- •29. Команды умножения и деления на Ассемблере.
- •30. Директивы определения данных.
- •33. Модификация адресов на ассемблере. Индексирование в одномерном массиве.
- •34. Модификация по нескольким регистрам на ассемблере. Обработка двумерных массивов.
- •Процедуры на Ассемблере. Правила оформления процедуры и обращения к ней.
- •36. Процедуры на Ассемблере. Передача параметров в процедуру. Рекурсивные процедуры.
- •Работа с файлами на Ассемблере. Открытие и закрытие файлов. Windows api процедуры открытия и закрытия файлов, их параметры.
- •38. Чтение из файла и запись в файл. Windows api процедуры записи и чтения файлов, их параметры.
- •39. Работа с вещественными числами на Ассемблере. Математический сопроцессор и его регистры. Форматы записи вещественных чисел.
- •40. Работа с вещественными числами на Ассемблере. Команды передачи данных и арифметические команды математического сопроцессора.
29. Команды умножения и деления на Ассемблере.
Имеется несколько команды умножения и деления:
Команды умножения:
MUL источник — умножение целых без знака
IMUL источник - умножение целых со знаком.
Действует она так:
а) при умножении байтов: содержимое регистра AL умножается на источник и результат помещается в AX (AH- старший байт результата, AL-младший байт результата)
б) при умножении слов: содержимое регистра AX умножается на источник и результат помещается в DX (старшое слово результата) и в AX (младшее слово)
в) при умножении двухбайтовых слов: содержимое регистра EAX умножается на источник и результат помещается в EAX(младшая часть результата) и EDX(старшая часть)
Команды деления:
DIV источник - деление целых без знака
IDIV источник - деление целых со знаком
а) при делении на байт: Делимое берется из AX и частное возвращается в регистре AL,а остаток — в регистре AH
б) при делении на слово: Делимое берется из DX и AX и частное возвращается в регистре AX.а остаток — в регистре DX
в) при делении на двухбайтовых слов: Делимое берется из EAX(младшая часть) и EDX(старшая часть) и частное возвращается в регистре EAX, а остаток — в EDX
30. Директивы определения данных.
Обычно в программе используются переменные и константы. Нужно указать их имена и значения. Это делается с помощью директив.
Общий вид директивы:
[имя] название директивы [операнды]
имя- это и есть название константы или переменной, название директивы- служебное слово, оперенды — значения для переменных и констант.
Директивы определения данных (числа в байт размером)
DB (Define Byte – определить байт) — определяет данные размером в байт. (в 32-разрядном ассемблере — BYTE)
Например:
X DB ? - задание переменной Х неопределенного значения
Y DB 254 - задание переменной Y со значением 254.
По первой директиве просто отводится один байт памяти, в который ничего не записывается. Как правило, это первый свободный байт в памяти. При этом запоминается адрес этого байта, поэтому когда при выполнении программы процессор в тексте программы встретит имя этой переменной, то он заменит его на данный адрес.
Размер байтовой переменной со знаком от -128 до 128.
Директивы определения данных(символы)
В качестве начального значения можно указывать и символ. Причем можно указывать либо символ в кавычках, либо его ASCII код. Например, директива
Q DB 2Ah
и директива
Q DB “*”
эквивалентны.
Директивы определения массивов
M DB 2, -2 , “*”
описывает массив из трех элементов.
Имя, указанное в начале директивы, имеет только первый из этих байтов. Остальные байты остаются безымянными. Для ссылок на них в ассемблере используются выражения вида
M+k , где k – целое число, задающее номер следущего байта.
Подчеркнем: это не сложение содержимого ячейки М с числом k. это означает, что к адресу указанного имени надо прибавить число k, в результате получается неокторый новый адрес, и по этому новому адресу и осуществляется доступ к памяти.
Повторение значений в директиве
R DB 8 DUP(0) эквивалентен R DB 0,0,0,0,0,0,0,0
т.е. вначале указывается коэффицент повторения, затем служебное слово DUP, а затем в круглых скобках — повторяемая величина.
Допустима и вложенность конструкций DUP. Это потребуется, например, при описании двухмерных массивов (матриц). Скажем, матрицу А размером 20х30 (20 строк по 30 элементов в каждой) можно описать :
A DB 20 DUP (30 DUP(?))
31. Безусловный переход, команда сравнения и условного перехода на Ассемблере.
Для нарушения порядка в котором следуют команды машинной программы применяются переходы. Для организации перехода в программе на Ассемблере, во-первых, в программе размещаются метки в виде символьно-цифровых имен (первй символ-буква), во-вторых, размещают команды сравнения и перехода. Если переход делается, когда выполнено некоторое условие, то такой переход называется условным, а если он делается независимо от условий, то это безусловный переход.
Команда сравнения имеет вид:
CMP op1, op2
Работает она так: тупо сравнивает значения op1 и op2, и в зависимости от результата работает следущая за ним команда перехода.
Команд перехода имеется довольно много. Отметим некоторые:
Для чисел без знака:
JA Label – переход на метку Label, если op1 > op2; Тут главное запомнить буквы:
JB Label – переход на метку Label, если op1 < op2; A – above -выше, т.е. если op1 > op2
JE Label – переход на метку Label, если op1 = op2; B – below – ниже, т.е. если op1<op2
JNE Label – переход на метку Label, если op1 <> op2; E – equal – равно, т.е. eсли op1=op2
JBE Label – переход на метку Label, если op1 <= op2; N – not – отрицание чего-то
JAE Label – переход на метку Label, если op1 >= op2; применяется различное сочетание
Для чисел зо знаком: NE( <> ),AE( >=),NA( <= ) и т.д.
JG Label – переход на метку Label, если op1 > op2; G – greater – больше, так же как
JL Label – переход на метку Label, если op1 < op2; A,только для знаковых
JE Label – переход на метку Label, если op1 = op2; L – less – меньше — аналог B
JNE Label – переход на метку Label, если op1 <> op2;
JLE Label – переход на метку Label, если op1 <= op2;
JBE Label – переход на метку Label, если op1 >= op2;
Cуществует вторая группа команд условного перехода — те, которые реагируют на то или иное значение какого-либо флага. В команде указывается первая буква проверяемого флага, если переход должен быть выполнен при значении флага 1, либо если эта буква указывается с буквой N=not, то при значении флага = 0.
Команда |
Условие перехода |
Команда |
Условие перехода |
JZ |
ZF = 1 |
JNZ |
ZF = 0 |
JS |
SZ = 1 |
JNS |
SZ = 0 |
JC |
CZ = 1 |
JNC |
CZ = 0 |
JO |
OZ = 1 |
JNO |
OZ = 0 |
JP |
PZ = 1 |
JNP |
PZ = 0 |
Команды перехода не меняют флаги.
Кроме того, имеется безусловный переход
JMP Label
Он выполняется без команды сравнения
32. Команда управления циклом на Ассемблере.
Цикл, как известно, представляет собой важную алгоритмическую структуру, без использования которой не обходится, наверное, ни одна программа. Организовать циклическое выполнение некоторого участка программы можно, к примеру, используя команды условного перехода. НО также имеются специальные команды.
Управление циклом по счетчику: LOOP метка
Действие этой команды можно описать так:
ECX := ECX-1 ;
if ECX <> 0 then goto метка
с помощью команды LOOP цикл, в котором некоторую группу команд (тело цикла) надо повторить N раз, запишется так:
mov ECX, N N>0
L: бла-бла-бла
бла-бла-бла ;тело цикла
бла-бла-бла
LOOP L
Особенностт команды цикла:
1) в качестве счетчика цикла обязательно используется ECX
2) начальное значение для ECX должно быть присвоено до цикла
3) команда LOOP ставится в конце цикла и поэтому тело цикла выполнится хотя бы 1 раз
Чтобы избежать такой ситуации, когда ECX изначально = 0 и,значит цикл не должен выполниться ни разу, используют специальную команду условного перехода JCXZ (переход в случак ECX=0)
mov ECX, N N>0
JCXZ L1
L: бла-бла-бла
бла-бла-бла ;тело цикла
бла-бла-бла
LOOP L
L1: оставшаяся бла-бла-бла