Лабораторная работа № 4
(системное программирование и ОС)

Основные вычислительные операции.

Цель данной лабораторной работы:

- изучить основные команды, при помощи которых возможно выполнения основных арифметических вычислений,

- закрепить знания, полученные на предыдущей лабораторной работе, о способах представления данных в оперативной памяти.

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

- разработать и научится применять простые макро средства языка программирования.

Вам необходимо изучить следующие документы:

1. Программно - аппаратное обеспечение для ПЭВМ

2. Команды вычислительных операций микрокомпьютера

3. Макросредства.

И, при необходимости, повторить Архитектура процессора и Основы программирования

Часть 1. Расчет простых арифметических выражений
Постановка задачи

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

Типы переменных – целые, длиной 2 байта. Работать в поле целых чисел.

Исходные данные описать как инициализированные поля в оперативной памяти.

Результаты поместись в выделенные слова.

Используя отладчик – проверить полученные результаты.

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

№ | Задание 1
1 | , при а=3, b=2
2 | , при а=2, b=5
3 | , при а=4, b=2
4 | , при а=1, b=4
5 | , при а=4, b=3
6 | , при а=5, b=3
7 | , при а=6, b=2
8 | , при а=1, b=2
9 | , при а=1, b=2
10 | , при а=5, b=2
11 | , при а=10, b=5
12 | , при а=4, b=2
13 | , при а=4, b=5
14 | , при а=10, b=4
15 | , при а=10, b=1
16 | , при а=10, b=-1
17 | , при а=5, b=10
18 | , при а=8, b=2
19 | , при а=1, b=5
20 | , при а=1, b=8
21 | , при а=1, b=10
22 | , при а=10, b=1
23 | , при а=10, b=2
24 | , при а=8, b=3
25 | , при а=5, b=10

3. Методические указания

1. Записать «по операторный» алгоритм расчета выражения. Все промежуточные результаты сохранять в ОП.

2. Разместить все данные в отдельном сегменте.

3. При использовании отладчика – открыть окно View - Dump

4. Переместить окно – используя клавиши CTRL-F5 и клавиши «стрелки» в удобное для просмотра место

5. Используя F7 – выполнить программу, отслеживая состояние регистров и областей ОП. Определить адреса размещения слов ОП, где охраняться промежуточные и окончательные результаты. При необходимости - переключение между окнами - ALT - <клавиша - номер - окна>

6. Поместить в отчет текст программы и фрагмент ОП (копия экрана окна отладчика) с промежуточными и окончательными результатами.

7. Указать адреса и значения всех используемых фрагментов ОП.

4. Пример

Разработать алгоритм и программу на языке программирования ассемблер для нахождения

при a=1, b=2.

«Алгоритм» пошагового решения:

p1=(a+b)

p1=p1*p1

p2=a

p2=p2*p2

p3=2*a

p3=p3*b

p3=p2+p3

rez=p1-p3

Ручной расчет

=5

Текст программы

; вычисление (a+b)**2 - (a**2 + 2*a*b)

; результат в rez

code SEGMENT

ASSUME cs:code, ds:mydata, es:mydata

main proc FAR ;стандартное начало прогр.

push es

mov ax,0

push ax

;------------------------

mov ax,mydata ; загрузка адреса сегментнов

mov ds,ax

mov es,ax

;------------------------ начало программы

mov ax,a ; (a+b)**2

mov bx,b

add ax,bx

imul ax

mov p1,ax ; сохранение промежуточного значения

;-----

mov ax,a

imul ax ; a**2

mov p2,ax

;----

mov ax,2

imul a

imul b ; 2*a*b

mov p3,ax

;----

mov ax,p2

add ax,p3 ; (a**2+2*a*b)

;-----

mov ax,p1

sub ax,p3

mov rez,ax

;-----------------------------------

RET

main endp

code ends

mydata segment

xxx db ' ' ;

a dw 1

b dw 2

p1 dw ?

p2 dw ?

p3 dw ?

rez dw ?

mydata ends

----------------------------------

STK SEGMENT STACK

DW 64 DUP (?)

STK ENDS

END main

Результат расчета

(маленькая "хитрость" - окно DUMP откроется в начале сегмента, если его закрыть и открыть).

Адреса и значения переменных в сегменте mydata:

xxx 00000 20 20 20 20

a 00004 01 00

b 00006 02 00

p1 00008 09 00

p2 0000a 01 00

p3 0000c 04 00

rez 0000e 05 00

5. Содержание отчета

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

2. Алгоритм решения

3. Программа решения задания

4. «Окно» результатов

5. Объяснение результатов.

6. Основные контрольные вопросы

- что такое "дамп памяти"?

-как размещаются в ОП целые значения - в байте, в слове?

- основные команды для выполнения арифметических операций?

Успехов в работе.

Часть 2. Простые макрокоманды
Постановка задачи

Макросредства языка программирования позволяют существенным образом увеличить производительность работы программиста. Использование подпрограмм вывода содержимого оперативной памяти на консоль возможно, например, с использованием разработанных ранее подпрограмм (см. лаб. раб. 3). Программирование вызова подобных подпрограмм можно "автоматизировать" с использованием макросредств языка.

Необходимо:

- ознакомится с основными положениями использования и программирования макрокоманд - макросредства.

- разработать макрокоманды удобной "печати" содержимого байта и слова - примеры можно посмотреть сдесь. Макрокоманды поместить в отдельный файл.

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

Более подробно о макрогенераторе TASM можно посмотреть сдесь.

Содержание отчета

- текст макрокоманд

- исходный текст программы и её листинг.

- консольный протокол работы программы.