Системное программное обеспечение




Скачать 248.06 Kb.
НазваниеСистемное программное обеспечение
страница1/3
Дата22.12.2012
Размер248.06 Kb.
ТипЛабораторная работа
  1   2   3


Кафедра компьютерных технологий


СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ


лабораторные работы


Чебоксары, 2009 г.


Лабораторная работа № 1


Изучение среды программирования TURBO ASSEMBLER

и отладчика программ DEBUGger


Из программы FAR MANAGER или TOTAL COMMANDER, а можно и непосредственно из WINDOWS, требуется запустить программу ta.exe, расположенную в папке, содержащей файлы, необходимые для работы ТурбоАссемблера. Открывается окно турбосреды, аналогичное тому, какое имеют языковые среды ПАСКАЛЬ или СИ.

Вход в верхнее меню осуществляется с помощью клавиши F10.

Необходимо выполнить команду FILE – NEW, чтобы начать вводить новую программу.

После ввода небольшой тестовой программы её необходимо откомпилировать и устранить синтаксические ошибки (пункт меню COMPILE – COMPILE TO OBJ). Ниже приводится пример такой программы, складывающей два числа.

Одной из самых грубых ошибок начинающего программиста на языке Ассемблер является нежелание (или непонимание необходимости) правильно писать вход и выход из программы, а также соблюдать все правила её обрамления. Из-за этого, во-первых, может проявиться неправильный доступ к данным (обычно обнаруживаемый синтаксическим анализатором), а главное ­– сбой при завершении программы. Категорически рекомендуется как можно чаще сохранять вводимый текст, чтобы с минимальными потерями продолжать работу после «вылета» программы. Придерживайтесь приводимого ниже синтаксического образца. Первые 5 (пять) команд программы, и самую последнюю, следует писать буквально, так, как приведено в примере. Они называются прологом и эпилогом программы, и даются согласно стандартному соглашению о связях для операционной системы MS/DOS (пролог и эпилог для WINDOWS пишется совсем по-другому, но, во-первых, эти понятия есть и там, а во-вторых, научитесь сначала писать простые программы). Слова, стоящие в строках примера после символа «;» (точка с запятой), являются комментариями, и их набивать не требуется (хотя и не запрещается).

Когда программа набита, сохранена, и все синтаксические ошибки исправлены, следует перейти в отладчик DEBUG. В нём необходимо сначала открыть окно отображения регистров и флагов (пункт верхнего меню VIEW – REGISTERS), а затем оттащить его (мышкой, или с помощью CTRL-F5) в сторону, чтобы не загораживало текст программы. Второе используемое окно для отображения значений переменных (WATCHS) уже открыто, и находится внизу. В нём можно проставить имена тех данных, изменения которых требуется проследить.

Далее, нажимая клавишу F7, выполнить каждую команду программы до её логического конца.


; Самая первая программа для трассировки

;

assume cs:mycode,ds:mydate,ss:mystack

mycode segment para

start: push ds ; Эта и следующие 4 команды

xor ax,ax ; называются прологом.

push ax

mov ax,seg mydate

mov ds,ax

mov ax,x ; Операнд1 помещается в регистр AX

add ax,y ; и складывается с Операнд2.

mov z,ax ; результат пишется в переменную z.

retf ; завершение программы (эпилог).

mycode ends

mydate segment para

x dw 5

y dw 4

z dw 0

mydate ends

mystack segment para stack ‘stack’

dw 100 dup (?) ; резервируется место для стека.

mystack ends

end start


Протранслировав программу, и выполнив её покомандно в отладчике, следует выполнить повторную инициализацию программы с помощью пункта меню RUN – PROGRAM RESET, после чего обратиться к преподавателю с целью её показа.


Модифицировать программу так, чтобы она вычисляла:


  1. Произведение двух чисел;

  2. Частное и целочисленный остаток от деления;

  3. Побитовые операции «Не», «Или», «И», «Исключающее Или»;

  4. Операции сдвига;

  5. Преобразования цифрового символа в двоичное число.



Лабораторная работа № 2.


Программирование циклов и условий. Работа с массивами.


В этой работе необходимо применить команду сравнения данных (CMP), команды условных и безусловных переходов (Jmp и Jcc), команду организации циклов (Loop), использование индексных регистров SI и DI и регистра CX.

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


; Самая первая программа для трассировки

;

assume cs:mycode,ds:mydate,ss:mystack

mycode segment para

start: push ds

xor ax,ax

push ax

mov ax,seg mydate

mov ds,ax

xor si,si ; обнуление

mov di,si

mov sum,si

mov cx,n ; подготовка цикла

cycl: mov ax,a[2*si] ; выборка элемента массива

cmp ax,zero ; сравнение с нулём

jl ifless ; переход, если «меньше»

; а если не меньше, то:

add ax,ax ; удвоение

jmp summa ; обход ветви «меньше»

ifless: mov ax,zero

summa: mov a[2*di],ax ; запись изменённого элемента

add ax,sum ; суммирование

mov sum,ax ; и запись суммы

inc si ; увеличение индексов

inc di

loop cycl

retf

mycode ends

mydate segment para

n dw 12

a dw 4,3,8,-5,-1,-9,6,7,2,-8,1,-3

sum dw ?

zero dw 0

mydate ends


mystack segment para stack ‘stack’

dw 100 dup (?)

mystack ends

end start


Требуется ввести эту программу и покомандно выполнить её, как описано в лабораторной работе №1, после чего выполнить один из вариантов задания:

  1. По данному массиву целых чисел построить массивы частных и остатков от деления на простое число (например, на 3);

  2. По данному массиву целых чисел построить массивы квадратов и кубов;

  3. По данным двум массивам целых чисел построить массивы сумм и разностей их элементов;

  4. По данному массиву целых чисел найти их среднее арифметическое и построить массив, элементы которого равны разности исходных элементов и полученного среднего;

  5. По данному массиву целых чисел найти их минимум и построить массив, элементы которого равны разности исходных элементов и полученного минимума;

  6. По данному массиву целых чисел найти их максимум и построить массив, элементы которого равны разности полученного максимума и исходных элементов;

  7. В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти среди них минимум и максимум;

  8. В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти их среднее;

  9. В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти сумму элементов, больших 5;

  10. В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти число элементов, меньших их среднего арифметического;

  11. В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти их произведение;

  12. В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти количество нечётных цифр;

  13. В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти количество простых чисел.


Лабораторная работа № 3.


Программы и подпрограммы. связь по управлению и по данным


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

Наличие подпрограмм позволяет вести проектирование приложения сверху вниз, решая сначала глобальные задачи, а потом детализируя каждую из них. Подпрограммы бывают двух типов – процедуры и функции. Процедура выполняет некоторую группу операторов, а функция вдобавок вычисляет некоторое значение и возвращает его в главную программу. В неё же возвращается и поток управления командами программы, причем подпрограмма должна уметь вернуть управление независимо от того, откуда она была вызвана. Вызов подпрограмм может быть вложенным. Чтобы работа программы имела смысл, ей надо получить данные из внешней (вызывающей) программы. Данные передаются в виде параметров или аргументов в виде списка, метод доступа к которому стандартизован и имеет аппаратную поддержку. В микропроцессорах INTEL такой поддержкой является аппаратный стек и команды работы с ним. Подпрограмма может иметь свои собственные локальные переменные, существующие только в интервале времени от входа в подпрограмму до выхода из нее, а также разделять с другими подпрограммами и главной программой доступ к глобальным переменным.

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

Вызывающая программа:

  • Подготовить список параметров согласно соглашениям о связях;

  • Подготовить для подпрограммы адрес возврата;

  • Передать управление в подпрограмму.

Вызываемая подпрограмма:

  • Сохранить состояние среды (контекст) вызывающей программы (в некоторых реализациях это действие выполняет операционная система);

  • Выделить память для локальных переменных;

  • Получить доступ к параметрам;

  • Выполнить алгоритм, заложенный в подпрограмму; при необходимости воспользоваться списком параметров, правильно извлекая и изменяя из значения в соответствии с соглашениями о связях;

  • Освободить память локальных переменных и восстановить контекст вызывавшей программы;

  • Возвратить управление в вызывавшую программу;

Вызывающая программа:

  • Воспользоваться результатами работы подпрограммы.


Параметры, передаваемые в подпрограмму в момент её вызова, называются фактическими. Они замещают формальные параметры, указываемые в заголовке подпрограммы. Параметры могут передаваться по адресу (по имени) или по значению. Последние не могут изменить свои значения в вызывающей программе. По адресу передаются изменяемые параметры, а также массивы и структуры. Подпрограммы бывают реентерабельные (или повторновходовые) – это те, которые допускают вызов какой-либо собственной функции изнутри себя самой. Для их написания необходимо соблюдать некоторые правила, например, не использовать локальные переменные. Рекурсивные подпрограммы позволяют делать вызов себя из себя самой (классический пример ­– рекурсивное определение факториала).

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





Рис. 1. Структура фрейма вызова подпрограммы


Перед вызовом подпрограммы вызывающая программа записывает адреса или значения параметров в стек. Вызов программы выполняется командой CALL, которая в зависимости от формата вызова (ближний или дальний), помещает в стек адрес возврата в виде регистра IP или пары регистров CS/IP. Вызванная подпрограмма должна сохранить в стеке все регистры, которые она будет использовать и модифицировать, а перед выходом восстановить их. Вызывающая программа после возврата к ней должна освободить место в стеке, занятое списком параметров. Подпрограмма при своей работе извлекает параметры из стека, пользуясь косвенной адресацией с помощью регистра BP. Если параметр передан по адресу, то этот адрес обычно переносится в регистр BX, и доступ к параметру также осуществляется с помощью косвенной адресации. Ниже приводится пример, в котором подпрограмма находит сумму элементов массива. Параметр n – число элементов в массиве – передаётся по значению, а адрес массива и результат в виде суммы – по адресу. Распределение параметров в фрейме подпрограммы смотрите в следующей таблице:

структура фрейма стека


смещение элемента

от [BP]

содержимое слова

. . . . . . . . . . . .

+8

значение n

+6

базовый адрес X

+4

адрес sum

+2

IP возврата

0

сохранённый BP

-2

сохранённый AX

-4

сохранённый BX

-6

сохранённый CX

-8

сохранённый DX

-10

сохранённый SI

. . . . . . . . . . . .


; пример программы с подпрограммой

assume cs:mycode,ds:mydate,ss:mystack

mycode segment para

start: push ds

xor ax,ax

push ax

mov ax,seg mydate

mov ds,ax

; подготовка списка параметров

mov ax,n

push ax

lea ax,x

push ax

lea ax,sum

push ax

call sumarray

; освобождение стека от параметров

pop ax

pop ax

pop ax

; возврат из главной программы

retf

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

sumarray:

; сохранение регистров

push bp ; используется при вложенных вызовах

mov bp,sp

push ax

push bx

push cx

push dx

push si

mov cx,[bp+8] ; значение n

xor si,si ; обнуление индекса

mov dx,si ; обнуление суммы в регистре dx

mov bx,[bp+6] ; базовый адрес массива

; начало цикла

cycl: mov ax,[bx][2*si] ; выборка элемента массива

add dx,ax ; сложение c временной суммой

inc si

loop cycl ; завершение цикла

mov bx,[bp+4] ; адрес sum

mov [bx],dx ; и запись в память результата

; восстановление регистров и возврат

pop si

pop dx

pop cx

pop bx

pop ax

pop bp

retn

mycode ends

mydate segment para

n dw 7

x dw 5,4,-3,2,8,9,-6

sum dw 0

mydate ends

mystack segment para stack ‘stack’

dw 100 dup (?)

mystack ends

end start

  1   2   3

Похожие:

Системное программное обеспечение iconЛекция 4 Программное
Новые термины и понятия: программа, программное обеспечение, базовое программное обеспечение, системное программное обеспечение,...
Системное программное обеспечение iconМетодические указания по выполнению курсовых работ по дисциплине «Системное программное обеспечение»
«Системное программное обеспечение» для студентов, обучающихся по специальностям 210100, 210200 и направлению 550200
Системное программное обеспечение iconМетодические рекомендации по выполнению и защите курсовой работы по дисциплине «Системное программное обеспечение»
Методические рекомендации предназначены для студентов, изучающих дисциплину «Системное программное обеспечение»
Системное программное обеспечение iconМетодические указания и контрольные задания по дисциплине системное программное обеспечение для студентов заочного отделения 2 и 3 курсов специальности 220200
Методические указания и контрольные задания по дисциплине “Системное программное обеспечение” / Кузнецов Д. Б.; Перм гос техн ун-т....
Системное программное обеспечение iconРабочая программа по дисциплине «Системное и прикладное программное обеспечение» для специальности "Прикладная математика и информатика"
«Системное и прикладное программное обеспечение» для специальности "Прикладная математика и информатика"
Системное программное обеспечение iconВопросы к экзамену Техника и технология скст
Аппаратное обеспечение пк: устройство компьютера и периферийное оборудование. Единицы измерения информации. Программное обеспечение...
Системное программное обеспечение iconКурсовая работа по дисциплине «Системное программное обеспечение»

Системное программное обеспечение iconУчебники Пособия
Сведения об обеспеченности учебной литературой по дисциплине Системное программное обеспечение на кафедре вт 
Системное программное обеспечение iconОперационные системы, среды и оболочки
Архитектура современных программных средств. Системное программное обеспечение. Примеры
Системное программное обеспечение iconСписок экзаменационных вопросов по курсу «Системное программное обеспечение»
Понятие формальной грамматики и языка. Выводимость. Язык, порождаемый грамматикой
Разместите кнопку на своём сайте:
Библиотека


База данных защищена авторским правом ©lib.znate.ru 2014
обратиться к администрации
Библиотека
Главная страница