- •Лабораторная работа № 2. Программирование циклов и условий. Работа с массивами.
- •Лабораторная работа № 3. Программы и подпрограммы. Связь по управлению и по данным
- •Лабораторная работа № 4. Сопроцессор и его программирование
- •Лабораторная работа 5 Использование средств bios на языке Ассемблер
- •Краткие сведения о прерываниях bios
- •Список литературы
- •Содержание
Кафедра компьютерных технологий
СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
лабораторные работы
Чебоксары, 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, после чего обратиться к преподавателю с целью её показа.
Модифицировать программу так, чтобы она вычисляла:
-
Произведение двух чисел;
-
Частное и целочисленный остаток от деления;
-
Побитовые операции «Не», «Или», «И», «Исключающее Или»;
-
Операции сдвига;
-
Преобразования цифрового символа в двоичное число.
Лабораторная работа № 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, после чего выполнить один из вариантов задания:
-
По данному массиву целых чисел построить массивы частных и остатков от деления на простое число (например, на 3);
-
По данному массиву целых чисел построить массивы квадратов и кубов;
-
По данным двум массивам целых чисел построить массивы сумм и разностей их элементов;
-
По данному массиву целых чисел найти их среднее арифметическое и построить массив, элементы которого равны разности исходных элементов и полученного среднего;
-
По данному массиву целых чисел найти их минимум и построить массив, элементы которого равны разности исходных элементов и полученного минимума;
-
По данному массиву целых чисел найти их максимум и построить массив, элементы которого равны разности полученного максимума и исходных элементов;
-
В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти среди них минимум и максимум;
-
В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти их среднее;
-
В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти сумму элементов, больших 5;
-
В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти число элементов, меньших их среднего арифметического;
-
В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти их произведение;
-
В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти количество нечётных цифр;
-
В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти количество простых чисел.