Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные_работы_СПО.doc
Скачиваний:
0
Добавлен:
07.11.2018
Размер:
1.02 Mб
Скачать

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

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

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

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

Лабораторная работа № 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. В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти количество простых чисел.