Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Моя курсовай МПС.docx
Скачиваний:
8
Добавлен:
19.12.2018
Размер:
335.07 Кб
Скачать

2.3 Разработка алгоритма выбор определённых байтов и битов и записи результата в файл Result.Dat

В начале цикла сохраняем регистр CX в стеке, помещаем в него значение 4 (так как из каждой строки выделяется по два бита) и обнуляем регистр DX, который используется для временного хранения выделенных битов. Затем считывается по 16 байт из файла my.dat. Далее с помощью команды bt заносим значения третьего и первого бита в CF, а с помощью команды rcl (циклический сдвиг влево) заносим значения CF в нужный нам байт. Т. е. каждый цикл выбирает 4 раза по 2 бита в слово, заполняя сначала первый байт, затем второй. После того, как сформировано слово, оно записывается в конечный файл Result.dat. После, закрытие My.dat и Resual.dat . На этом программа заканчивается, задача выполнена.

Рисунок 3 – Блок схема алгоритма процедуры формирования слов

Рисунок 4 – Продолжение Блок схемы алгоритма процедуры формирования слов

2.4 Построение графика

Программа построения графика написана на языке C# в Windows Forms. Программа считывает из файла RESULT.DAT по 1 байту, откладывая на оси y его значения. В ось x входит интервал значений от 1 до 160 (RESULT.DAT состоит из 160 байт).

3 Разработка программы

3.1 Описание используемых регистров

3.1.1 Регистры общего назначения

При программировании на языке ассемблера регистры общего назначения являются основными рабочими регистрами. Особенностью этих регистров является то, что возможна использование их не только как единого целого, но и по частям. Так 32-х разрядные регистры имеют в качестве младшей половинки соответствующий 16-ти разрядный регистр (однако, старшая половинка не адресуема). А 16-ти разрядные, в свою очередь имеют адресуемые младшие и старшие одно байтовые половинки.

3.1.2 Регистры EAX и AX

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

3.1.3 Регистры EBX и BX

Регистры EBX и BX являются базовыми регистрами. Эти регистры общего назначения могут использоваться в качестве "индекса" для расширенной адресации. Другое общее их применение - вычисления.

3.1.4 Регистры ECX и CX

Регистры ECX и CX являются счетчиками. Они необходимы для управления числом повторений циклов и для операций сдвига влево или вправо. Эти регистры используется также для вычислений.

3.1.5 Регистры EDX и DX.

Регистры EDX и DX являются регистрами данных. Они применяется для некоторых операций ввода-вывода и тех операций умножения и деления над большими числами, которые используют регистровые пары EDX:EAX или DX:AX.

3.1.6 Регистры EBP и BP.

Pегистр указателя базы кадра стека. Предназначен для организации произвольного доступа к данным внутри стека

3.1.7 Индексные регистры

Индексные регистры ESI/SI и EDI/DI используются в индексной адресации. Иногда их используют для операций сложения и вычитания.

Регистры ESI и SI - индекс источника при операциях со строками.

Регистр EDI и DI - индекс приемника при операциях со строками.

3.1.8 Сегментные регистры

Каждый сегментный регистр имеет 16-ть разрядов и обеспечивает адресацию непрерывного участка памяти объемом 64 Кбайт, который называется сегментом. Сегменты выравниваются на границу параграфа (16 байт) и таким образом адрес сегмента предполагает наличие справа четырех нулевых битов (xxxx xxxx 0000). Это позволяет иметь максимально адресуемое пространство памяти 1 Мб (2 в степени 20). Сегменты могут пересекаться и использоваться для хранения кода, данных и под стек. Процессор Intel 8086 имел сегментные регистры CS, DS, SS и ES. Начиная с процессора Intel 80286 стали доступны также два дополнительных: FS и GS. Ниже описано назначение каждого сегментного регистра.

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

Регистр DS. Регистр сегмента данных DS содержит начальный адрес сегмента данных. Этот адрес плюс смещение, определенное в команде, указывают на конкретную ячейку в сегменте данных.

Регистр SS. Регистр сегмента стека SS содержит начальный адрес сегмента стека.

Регистр ES. Некоторые операции над строками используют дополнительные сегментный регистр ES для управления адресацией памяти. В данном контексте этот регистр связан с индексным регистром DI. Если необходимо использовать регистр ES, ассемблерная программа должна его инициализировать.

Регистры FS и GS. Позволяют иметь до 4-х одновременно доступных сегментов данных (включая адресуемые через DS и ES).