Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Asm_lab-Rus.docx
Скачиваний:
6
Добавлен:
27.08.2019
Размер:
238.79 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ УКРАИНЫ

ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ

УНИВЕРСИТЕТ РАДИОЭЛЕКТРОНИКИ

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

для лабораторных работ по дисциплине

«СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ И ОПЕРАЦИОННЫЕ СИСТЕМЫ».

для студентов специальности

8.091402 “Системы управления и автоматики”

Утверждено

кафедрой системотехники.

Протокол № ___ от _______________

Харьков 2006

Методические указания для лабораторных работ по дисциплине "СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ И ОПЕРАЦИОННЫЕ СИСТЕМЫ" для студентов специальности 8.091402 “СИСТЕМЫ УПРАВЛЕНИЯ И АВТОМАТИКИ”/ Сост.: Ю.В. Мищеряков, Т.Г. Рожнова, Харьков: ХНУРЭ, 2006.–___с.

Составители: Ю.В. МИЩЕРЯКОВ, Т.Г. РОЖНОВА

А.Е. БЕЗУГЛАЯ

  1. Введение

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

В отличие от прикладного, системное программное обеспечение должно уметь работать напрямую с ядром операционной системы (ОС), быть стабильным, обеспечивать быструю реакцию, занимать как можно меньше ресурсов вычислительной системы. Таким образом, к системному программному обеспечению предъявляются на много более жесткие требования. Для обеспечения этих требований системный программист должен четко представлять структуру операционной системы, её подсистем, способы взаимодействия между подсистемами ОС и взаимодействия ОС с аппаратным обеспечением, алгоритмы, заложенные в работу каждой подсистемы. Кроме того, системный программист должен быть хорошо знаком с программными интерфейсами, предлагаемыми операционной системой, для обеспечения поддержки прикладных и системных программ.

Сегодня, для написания системного программного обеспечения практически всегда применяется языка программирования – С. Однако ни один язык, даже такой популярный, не может претендовать на то, чтобы на нем можно было написать действительно «все», кроме языка ассемблер.

Итак, на ассемблере пишут:

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

  2. все, что взаимодействует с внешними устройствами: драйверы, программы, работающие напрямую с портами, звуковыми и видеоплатами;

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

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

  5. и многое другое.

Стоит познакомиться с ассемблером поближе, как оказывается, что многое из того, что обычно пишут на языках высокого уровня, лучше, проще и быстрее написать на ассемблере.

Лабораторный практикум по данной дисциплине составлен таким образом, что с каждой лабораторной работой сложность заданий возрастает, при этом, вместе с изучением языка ассемблер студенты знакомятся с работой той или иной подсистемой ОС, базовыми алгоритмами и средствами, заложенными в работу рассматриваемых подсистем. Кроме того, результаты выполнения одной лабораторной работы используются для выполнения другой. Это требует от студентов постоянной работы над конспектом лекций, справочной литературой, четкого выполнения заданий каждой работы в полном объеме.

  1. Лабораторная работа №1 Изучение среды разработки и структуры программы.

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

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

    1. Указания по подготовке к выполнению лабораторной работы

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

    1. Рекомендации по выполнению лабораторной работы

Для выполнения лабораторной работы необходимо запустить среду разработки \masm32\QEDITOR и набрать в ней текст программы. Общая структура программы приведена в листинге 1.

.486

.model flat, stdcall

option casemap :none ; с учетом регистра

; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

; подключение внешних библиотек и их описаний

include \masm32\include\windows.inc

include \masm32\include\masm32.inc

include \masm32\include\kernel32.inc

include \masm32\macros\macros.asm

includelib \masm32\lib\masm32.lib

includelib \masm32\lib\kernel32.lib

.data

; Объявление данных

. . .

.code

start:

; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

; Код программы

. . .

; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

end start

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

mov ebx,offset var1

Для объявления переменных используются метки описывающие адрес расположения данных. Для указания размера данных могут быть использованы директивы DB (BYTE), DW (WORD), DD (DWORD), DQ (QWORD), DT (TBYTE).

Самой последней командой в программе перед директивой end должна быть команда ret. Данная команда осуществляет передачу управления операционной системе.

После того как код программы набран, его необходимо откомпилировать. Так как MASM не предоставляет единой интегрированной среды разработки, то все действия необходимо производить утилитами командной строки. Для доступа к командной строке может подойти либо файловый менеджер FAR, либо процессор командной строки cmd.exe (для линейки операционных систем Windows NT) или command.com для (для линейки операционных систем Windows 9x/ME). Процесс компиляции происходит в 2 этапа.

1. Создание объектного файла (ассемблирование). Этот этап осуществляется программой ml.exe. Для этого необходимо перейти в папку с сохраненными исходными текстами программы и запустить программу ml.exe передав ей ряд параметров.

c:\masm32\bin\ml /c /coff /Zd /Zi \путь\имя_программы.asm

/c – не осуществлять линковку;

/coff – генерировать объектный файл в формате coff:

/Zd – создавать отладочную информацию о номерах строк;

/Zi – создавать отладочную информацию о символьных именах.

В результате будет получен файл с тем же именем и расширением .obj. Этот двоичный файл, содержащий команды процессора, но в нем не настроена таблица адресов переходов. Данная таблица используется для выполнения команд условного и безусловного перехода.

2. Создание исполняемого файла (линковка). Данный этап осуществляется программой link.exe. Для линковки необходимо запустить link из командной строки и передать ей в качестве параметра имя объектного файла, полученного на предыдущем этапе. Кроме того, для корректной линковки необходимо передать дополнительные параметры. Например:

link /SUBSYSTEM:CONSOLE /DEBUG имя_объектного_файла

/SUBSYSTEM:CONSOLE – подсистема. Может принимать одно из следующих значений: NATIVE|WINDOWS|CONSOLE|WINDOWSCE|POSIX.

/DEBUG – помещать отладочную информацию в исполняемый файл.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]