146 Языки ассемблера

1. Цель работы

Целью курсовой работы разработка программы (модулей) на языке Ассемблера персональных компьютеров типа IBM PC, работающих в реальном или защищенном режиме. При этом пользователи должны познакомиться с архитектурными особенностями этих машин, системой команд и режимами работы используемых в них микропроцессоров, организацией ввода-вывода и прерываний, управления аппаратными средствами компьютера, функциями базовой системы ввода-вывода BIOS и операционной системы MS-DOS. Все эти знания естественным образом приобретаются при использовании языка Ассемблера – языка приближенного к аппаратным средствам компьютера и его “натуральным” возможностям.

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

Практическая часть курсовой работы предусматривает использование обслуживающих программ и их команд операционной системы MS-DOS, ориентированной на персональные ЭВМ, совместимые с IBM PC различных моделей. Решение задач на языке Ассемблера рекомендуется проводить в интегрированной среде разработки , использующей пакет макроассемблера TASM корпорации Borland International версий не ниже 4.0 или транслятор MASM и  компоновщик LINK корпорации Microsoft.

Студентам рекомендуется использовать современные инструментальные средства при создании своего программного продукта, например текстовые редакторы Word for Windows, операционные системы  MS-DOS в “чистом виде”, а не в виде DOS системы Windows, отладчики типа Turbo Debugger фирмы Borland или Code View при работе в защищенном режиме.

 

2. Постановка задачи

Разработать программу на языке Ассемблера, отражающую его основные функции. Разрабатываемая прграмма должна содержать:

  • модуль, написанный на языке С(Си++) или Object Pascal (в дальнейшем для краткости Си), который содержит небольшую интерфейсную часть и вызывает подпрограмму, написанную на языке Ассемблера;
  • модуль, написанный на языке Ассемблера, в котором описана процедура, предназначенная для вызова из модуля Си и передающая ему несколько параметров;
  • процедуры, написанные на языке Ассемблера и реализующие межмодульную передачу параметров;
  • несколько макроопределений (макросов).

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

 

3. Варианты заданий

 

1. Форматирование текста.

Каждый абзац начинать с отступа из пяти пробельных символов, строки выравнивать по ширине страницы, добавляя по необходимости пробелы между словами. Ширина страницы (количество символов в строке) задается пользователем.

 

2. Форматирование текста.

Убрать абзацный отступ и сжимать строки влево, оставляя между словами не более одного пробела. Ширина страницы (количество символов в строке) задается пользователем.

 

3. Форматирование текста.

Найти в исходном тексте строку с заданным номером и отредактировать ее.

 

4. Форматирование текста.

Разбить текст на страницы, строки заданной длины и расставить переносы.

 

5. Форматирование текста.

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

 

6. Поиск и замена с откатом.

В текстовом файле требуется заменить каждое вхождение подстроки на заданную строку (не различая отдельных лексем и вхождений подстроки в другие строки). Сохранитьь список изменений и выполнить откат (отменить последнее из внесенных изменений).

 

7. Поиск и удаление подстроки из файла.

В текстовом файле найти и удалить все вхожения заданной подстроки. Необходимо предусмотреть два режима работы: с различением строчных и прописных букв и без различения.

 

8. Поиск подстроки по шаблону.

В текстовом файле найти и удалить все вхожения заданной подстроки. Подстрока задается в виде шаблона, т.е. некоторые символы заменены маской (один символ = одна маска). Необходимо предусмотреть два режима работы: с различением строчных и прописных букв и без различения.

 

9. Нечеткий поиск подстроки.

В текстовом файле найти и удалить все вхожения заданной подстроки, с учетом того, что не более h% символов может не совпадать. Необходимо предусмотреть два режима работы: с различением строчных и прописных букв и без различения.

 

10. Упорядочивание инициалов и фамилий.

В текстовом файле найти все вхождения подстрок вида И. О. Фамилия и заменить их Фамилией И. О. (в фамилии и инициалах используются только русские буквы; инициалы однобуквенные).

 

11. Модуль сортировки списка.

 

12. Преобразование чисел в текст.

В текстовом файле найти все вхождения натуральных чисел (до 10е9-1) и расшифровать их в текстовом виде в скобках после числа.

 

13. Преобразование чисел в символьную строку.

Программа предназначена для перевода чисел из цифровой (символьной) записи в … интерпретацию, для чисел не больше 65535.

 

14. Сравнение двух текстовых файлов на идентичность.

Построчно сравнить два текстовых файла на идентичность и вывести первые N пар несовпадающих строк.

 

15. Преобразование текстовых файлов из кодировки DOS в кодировку Windows и обратно.

 

16. Резидентная программа должна выполнять копирование текстового экрана в файл с клавиатуры.

 

17. Модуль макрорасширения.

В тексте ассемблерной программы найти макросы и из таблицы макросов на их место подставить тексты макрорасширений.

 

18. Модуль обработки директивы препроцессора для языка С.

В тексте программы на языке С найти директивы #define, определяющие макросы, и подставить их в текст программы.

 

19. Составление таблицы меток.

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

 

20-21. Модуль определения способов адресации.

В тексте ассемблерной программы выделить и сгруппировать команды, в которых используются:

  • регистровая адресация;
  • непосредственная адресация;
  • прямая адресация;
  • базовая адресация;
  • индексная адресация;
  • базовая индексная адресация;

(На бригаду из двух человек).

 

22-23. Разработать игровую программу «TETRIS».

(На бригаду из двух человек).

 

24-25. Разработать игровую программу «КРЕСТИКИ-НОЛИКИ».

(На бригаду из двух человек).

 

26. Модуль перевода чисел из одной системы счисления в другую.

 

27-28. Модуль, выполняющий следующие операции над матрицами:

  • сложение;
  • вычитание;
  • умножение.

 

29. Использование языка Ассемблера в программах на языке Pascal. Рассмотреть следующие способы ассемблерных вставок:

  • встроенного Ассембера;
  • директив ASSEMBLER и  INLANE;
  • компилятора TASM

 

30. Разработать резидентные программы на примере использования некоторых функций и прерываний языка Ассемблера:

  • для получения и установки вектора прерываний;
  • для разработки резидентной программы типа .COM и .EXE;
  • для вызова резидентной программы.

 

31-32. Упаковка и распаковка файлов с использованием кодов Хаффмана.

(На бригаду из двух человек).

 

33-34. Разработать программу шифрования и дешифрования данных по американскому стандарту и по стандарту России.

(На бригаду из двух человек).

 

35. Разработать модуль, использующий систему шифрования ВИЖЕНЕРА по текстовому ключу.

 

36. Разработать модуль, реализующий алгоритм шифрования по методу «Одноразовый блокнот» с сохранением на диске секретного ключа. Обеспечить при этом возможность проверочного декодирования.

 

37. Разработать программу, реализующую криптоанализ алгоритмов, использующих подстановки. Примером такого алгоритма является «шифр Цезаря».

 

Примечания.

 

Варианты заданий с номерами 1-21 рекомендуются для студентов специальности  2201, а задания 20-37 – для специальности 0725.

Пояснительная записка выполняется на бумаге формата 11(А4) и сшивается,      обложка оформляется на ватмане. Текст пояснительной записки желательно оформить с использованием современной компьютерной технологии. Схемы алгоритмов должны быть выполнены с соблюдением ГОСТа и ЕСПД на листах формата 11.

 

 

4.Порядок выполнения курсовой работы

  1. Необходимо тщательно осмыслить постоновку задания, выяснить смысл всех понятий  и терминов, встречающихся в нем. Изучить в литературе и лекциях необходимые теоретические предпосылки.
  2. Привести анализ воможных вариантов решения поставленной задачи. Подробно описать метод решения.
  3. Разработоать схему алгоритма (СА) работы программного модуля. Алгоритмы  разрабатываются на языке алгоритмов (псевдокоде) с использованием графического  представления или словесного  описания. Для этого следует определить труктуру программы, количество и функциии ее частей (модулей), действия, выполняемые в каждом модуле, входные и выходные данные каждого модуя и всей программы. Структура программы должна  иметь ярко выраженный модульный характер и содержать основной (вызывающий) модуль и ассемблерный модуль, включающий, возможно, несколько процедур и макроопределений. Рекомендуется уже на этом этапе выйти на персональный компьютер (ПК) с целью создания и отладки главной программы main().
  4. После разработки алгоритмов необходимо их закодиролвать на языке СИ и  Ассемблере, создать исходные модули (фунгкции), транслировать их и исправить синтаксические ошибки.
  5. Отладку программ следует проводить, последовательно связывая с уже                        отлаженной главной функцией те модули, отладка которых производится. При этом в качестве исходных данных на первом этапе допустимы гипотетрические исходные данные, предложенные разработчиком, позволяющие протестировать отлаженные функции. Работающий комплекс программ должен быть представлен  в виде файла на дискете  и продемонстрирован преподавателю в классе ПК.
    1. Пояснительная записка, о содержании котрой смотри ниже, должна быть сдана       руководителю курсовой работы. После проверки записки преподаватель допускает    студента к защите работы. За курсовую работу выставляется дифференцированная оценка.             

 

 

 

График выполнения курсовой работы

 

Срок выполнения

Содержание работы

1 – 2-я недели семестра

Получение задания. Ознакомление с постановкой задачи

3 – 8-я недели семестра

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

9 – 12-я недели семестра

Кодирование и отладка программы (тестирование)

13 – 15-я  недели семестра

Оформление пояснительной записки. Окончатльная отладка

16 – 17-я недели семестра

Сдача пояснительной записки. Защита курсовой работы

5.Требования к содержанию и оформлению пояснительной записки.

Пояснительная записка должна содержать разделы, отражающие этапы проектирования сложных программных продуктов:

  1. Титульный лист (см. Приложение 1).
  2. Содержание с указанием номеров страниц.
  3. Введение.
  4. Постановку задачи (подробное задание).
  5. Теоретическую часть, которая должна включать:
  • Анализ требований, предъявляемых к системе (анализ задания), определение и проектирование спецификаций, на основе которых должна быть  определена структура программы;
  • Обоснование выбранной парадигмы (способа) программирования: процедурного программирования как программирования с абстрактными типами данных, выбранного для реализации интерфейсной части;
  • Обоснование метода нисходящего проектирования и нисходящей разработки программ; отображение идеи структкрного програмирования [6];
  • Необходимые пояснения об использовании системных библиотек, их функций, макроопределений и директив, например для организации ввода-вывода, при реализации поставленной задачи;
  • Особенности использования выбранных структур и типов данных, особенно абстрактных типов данных (классов) при выборе объектно-ориентированного программирования  для реализации интерфейса;
  • Необходимые пояснения об особенностях рарабатываемой программы и используемых возможностях  языка высокого уровня, реализующего вызывающий модуль,  и модулей (процедур) на языке Ассемблера, например об используемых отношениях о связях, введенных макросах, принципах передачи параметров между модулями программы, работа с файлами, классами, особенности командных строк и т.п.
  1. Кодирование программы. Разработка схемы алгоритма основного и вызываемого модулей. Выбор языка высокого уровня и языка Ассемблера, реалезующего реальный как защищенный режим ПК, и средств языков, реализующих все необходимые в модулях действия и кодирование программы.
  2. Результаты эксперимента по отладке программы в интегрированных средах Borland C++, Delhpi, Turbo As
  3. sembler (TASM), TASM32, или MASM должны вклячать:
  • Особенности и характеристики используемых аппаратных и программных средств;
  • Использование отладчиков типа Turbo Debugger фимры Borland или Code View.
  • Пояснение процесса проектирования задания в выбранной ОС с необходимыми пояснениями по созданию объектных модулей и объединению их в единый загрузочный модуль, использованию вхдных и выходных данных, необходимым командным строкам, работе с передаваемыми параметрами и файлами;
  • Тестирование программ с использованием заданных самостоятельных исходных, как правило, текстовых файлов и анализ полученных результатов; тестирование провести в три стадии (автономное, комплексное и систеиное);
  • Эксперименты по получению твердых копий на принтерах (струйных или лазерных) с использованием современных инструментальных средств, например текстовых редакторов типа Word for Windows различных версий;
  • Необходимые пояснения к листимнгам программ, которые приведены в приложении;
  1. Разработать в соответствии с ЕСПД [7,8] всю необходимую документацию (руководство системного программиста, руководство программиста, руководство оператора).

10. Заключение. Выводы. Полученные результаты. Характеристики разработанной программы.

11. Библиографический список.

12. Приложения. Листинги эксперимента.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Интегрирование модулей на Ассемблере и Си

Рассмотрим методы интегрирования и связанных с их использованием особенностенй на примере среды Турбо Си и Турбо Ассемблера (“TASM”). Разработан фирмой “Borland international” для семейства ПК IBM PC, оборудованных микропроцессорами Intel 8088, 8086, 80286 и т. Д. Он похож на ассемблер MASM фирмы “Microsoft corp.”, но содержит ряд усовершенствований и, кроме того, значительно более быстрый.

Для того чтобы интегрировать ассемблерные фрагменты в программы на языках высокого уровня, необходимо при разработке ассемблерных программ соблюдать некоторые соглашения о связях. К числу таких соглашений относятся соглашения:

  • об именах переменных и сегментов;
  • о порядке размещения сегментов в программе;
  • о форматах переменных;
  • о моделях памяти;
  • о передаче параметров и возврате результатов;
  • о сохранении и восстановлении Регистров;
  • о восстановлении Указателя Стека (SP);
  • о начальных установках сегментных регистров при входе в ассемблерную программу;
  • о размещении локальных переменных;
  • о ссылках на переменные и метки.

Соглашения о связях в различных языках неодинаковы.

Приведем основные соглашения для языка Си:

  1. 1. Соглашение моделей памяти проще всего обеспечить применением директивы

.MODEL модель_памяти, язык

 

совместно с упрощенными сегментными директивами

 

.CODE            .DATA                        .STACK

  1. 2. Параметры передаются через стек, начиная с самого первого. Восстановление указателя стека производит вызывающая программа main(). Причем возврат значений длиной 8 и 16 бит производится ччерез регистр АХ, а 32 бита через пару DX:AX.
  2. 3. Ассемблерная функция при выходе должна обеспечивать в SP, CS, BP, DS, SS  те же значения, что были в них при входе.

Регистры AX, BX, CX, DX, EX  и флаги сохранять не надо.

  1. 4. Во встроенном ассемблере, который может быть использован только в программах

на Си, использующих загрузочный компилятор ТСС, команды перехода могут

ссылаться только на метки Си, остальные команды – на все, кроме меток Си.

 

 

 

Примечание:

Следует помнить, что использование встроенного Ассемблера менее предпочтительно,  т. к. приводит  к отключению оптимизации кода в Си-программе.

 

Пример 1. В файле PRIM1.C записана программа на языке Си, производящая вызов функции PRIM2.ASM, написанной на языке Ассемблера. Необходимо осуществить передачу параметров из вызывающей программы в программу на ассемблере и осуществить возврат значения в PRIM1.C.

 

Файл PRIM1.C

extern    int  DATAASS (int a, int b, int c);

main ()

{ int v;

v=DATAASS(2,3,5);

}

 

Файл PRIM2.ASM

PAGE                   ,132

TITLE                  ПРИМЕР1

.MODEL              small,c

.PUBLIC              ‘DATAASS

.CODE

DATAASS PROC

Push bp;             стандартное начало

Mov bp,sp;        указатель в регистр Bp

Mov ax,[bp+4];  загрузка в AХ 1-го параметра (а)

Add ax,[bp+6]; добавление 2-го параметра (b)

Add ax,[bp+8]; добавление 3-го, результат в АХ (c)

Pop bp;             восстановление старого значения bp

(по bp условиям соглашения о связях)

Ret

DATAASS ENDP

END

Использование встроенного Ассемблера

В программе на Си можно размещать ассемблерные вставки. Каждая ассемблерная вставка должна начинаться ключевым словом asm, а заканчиваться знаком «;». Ассемблерные вставки трактуются как оператор основной программы.

Модуль, содержащий ассемблерную вставку должен начинаться с директивы

#pragma inline

или должен компилироваться с опцией – В, т. е.

tcc –B...prim prim.c

Ассемблерная вставка может иметь вид оператора или описания величины. Если она имеет вид оператора, то после ключевого слова asm идет код операции и аргументы, например, asm mov  bx,x, а если вид описания, то вместо кода операции выступает директива Макроассемблера, такая как db, dw и extern. Например,

аsm метка db 100

Ассемблерные вставки, имеющие вид оператора, размещаются в сегменте кода, а имеющие вид описания – в сегменте данных.

Пример программы, которая работает со встроенным Ассемблером, представлен в файле PRIM2.C.

Пример 2:

Файл PRIM2.C

#include <stdio.h>

int DATAASS(int x)

{asm jmp L;

asm DATAASS_TAB label word;

asm dw 0,1,...,81,100;

11 cлов

L:

asm mov bx,x;             это умножение на 2

asm SHL bx,1;             логический сдвиг слова на 1 разряд

asm  mov  ax,[DATAASS_TAB+bx];

return (_AX);

}

main()

{

int Y,Z;

printf(“Введите число от 0 до 100\n”);

scanf(“%d,&Y”);

Z=DATAASS(Y);

printf(“\n квадрат равен%d\n”,Z);

}

 

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

Для примера 1.

  1. Необходимо оттранслировать файл с  ассемблерным модулем

>tasm /zi prim2.asm,prim2, prim2

  1. Запустить среду Турбо Си

>tc

  1. Установить в среду Турбо Си модуль памяти

small

  1. Создать файл проекта

prim.prj

Режим (FILE, NEW), включающий

prim1.c

prim2.obj

  1. Постройте исполняемый модуль

prim.exe

используя команду compile/make.

  1. Выйти из среды Турбо Си.

 

Примечание:

Модуль prim.exe можно получить и другим способом: протранслировать и отлинковать оба модуля сразу:

>tcc   -ms  -v prim1.c prim2.asm

Для примера 2.

  1. Создать исполняемый модуль с помощью командной строки

>tcc  -b  -ms  -v  -1  -e  prim2 prim2.c

 

 

 

запрос файла prim2.exe

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение 1

 

Министерство образования

Российской Федерации

Рязанская Государственная Радиотехническая академия

 

 

 

 

 

 

 

 

 

Кафедра ЭВМ

 

 

Пояснительная записка к курсовой работе по языку Ассемблера

 

 

 

 

 

 

 

 

Выполнил:

 

студент группы 941

Маметьев Е. Н.

 

 

 

 

Проверил:

 

доцент Чичикин В. А.

 

 

 

 

 

Рязань 2002

 

Библиографический список

 

  1. Чичикин В. А. Лекции по курсу  “Языки Ассемблера”.
  2. Шалаев Н., Осин Е. “Как написать компьютерную игру”, - М:  “Солон”, 1996 г.
  3. Епанишников А. М. и Епанишников В. А.  “Программирование в среде TURBO PASCAL 7.0”, Москва, Диалог-МИФИ, 1996 г.
  4. Пильщиков В. Н. “Программирование на языке Ассемблера”, пер. с англ., - М: Радио и связь, 1989.
  5. Борзенко А. Е.  “Разработка простых резидентных программ в среде MS-DOS”, методические указания к курсовой работе, Рязань, РГРТА, 1996 г.
  6. Йордан Д. Н. “Структурное программирование”,М.: Мир, 1990 г., 365с.
  7. Единая система программной документации (ЕСПД). ГОСТ 19.0001-77 – 19.504-79. М., 1988.
  8. ЕСПД, ГОСТ 19.708-90. М., 1991.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

О Г Л А В Л Е Н И Е

 

  1. Цель работы.........................................................................................................................3
  2. Постановка задачи...............................................................................................................3
  3. Варианты заданий...............................................................................................................4
  4. Порядок выполнения курсовой работы..............................................................................7
  5. Требования к содержанию и оформлению пояснительной записки................................8

Интегрирование модулей на Ассемблере и СИ....................................................................10

Использование встроенного Ассемблера.............................................................................11

Библиографический список....................................................................................................11

 
Создать интернет магазин смотрите на http://m-artkzn.ru.