Назад
126
126
Alt-V Вызывает меню View
Alt-W Вызывает меню Window
Alt-X Осуществляет выход из отладчика и возврат в DOS
Ctrl-F2 Завершает сеанс отладки и устанавливает программу в ис-
ходное состояние
Ctrl-F4 Вычисляет значение выражения
Ctrl-F5 Инициирует перемещение или изменение размера окна
Ctrl-F7 Заносит переменную в окно слежения
Ctrl-F8 Переключает точку останова в текущей позиции курсора
Ctrl-F9 Запускает программу
Ctrl-F10 Вызывает локальное меню окна
Ctrl-Стрелка вправо Смещает начальный адрес в подокне кода, данных
или стека окна процессора на 1 байт вверх
Ctrl-Стрелка влево Смещает начальный адрес в подокне кода, данных
или стека окна процессора на 1 байт вниз
Ctrl-A Перемещение к предыдущему слову
Ctrl-G Осуществляется ввод ячейки памяти, данные которой не-
обходимо посмотреть, например Ctrl-G DS:SI
Ctrl-C Скроллинг на один экран вниз
Ctrl-D В окне данных позволяет преобразовать данные в любой из
форматов, например,
DOUBLE восьми байтовый вещественный формат
Рис. 24. Активные клавиши Turbo Debugger
Изучив выше приведённый материал, перейдём к непосредственному
выполнению лабораторной работы. Ниже на рис. 25 и 26 приведены два ва-
рианта программ. По указанию преподавателя каждый студент должен вве-
сти одну из этих программ в компьютер и пройти все этапы отладки. Пока
можно не вникать в суть программы, ваша задача «выловить» все ошибки в
процессе ассемблирования и при отладке. Введите некоторые ошибки искус-
ственно и проверьте реакцию на них программы ассемблер. Эта программа
поможет отследить синтаксические промахи, но не логические ошибки. Их
найти можно с помощью описанного отладчика. Войдите в окно Turbo de-
bugger и полностью разберитесь с его компонентами. Поработайте с актив-
ными клавишами. Полученные навыки позволят вам быстро отладить сле-
дующие программы. Смело приступайте, успехов!
;Переписать во второй массив из первого, состоящего из
10 чисел, ;числа, равные первому. В рег BL записать
их количество.
127
127
cseg segment 'code'
assume cs:cseg, ds:dseg, es:dseg, ss:dseg
.386
.387
begin: mov ax,dseg
mov ds,ax
mov es,ax
mov ss,ax
;---------------------------------------
mov si,offset mas1
mov di,offset mas2
mov cx,09h
mov bl,01h
mov al,[si]
mov [di],al
inc di
M1: inc si
cmp al,[si]
jz M2
loop M1
jmp M3
M2: mov ah,[si]
mov [di],ah
inc bl
inc di
loop M1
M3: mov ax,4c00h
int 21h
cseg ends
; -------------------------
dseg segment use16
mas1 db
22h,33h,44h,22h,55h,66h,22h,77h,88h,99h
mas2 db 10 dup(?)
db 64h dup(?)
stekn label word
dseg ends
end begin
Рис. 25. Демонстрационная программа 1
;Сложить два пятибайтных двоичных числа.
;результат поместить в отдельный массив
128
128
CSEG SEGMENT 'CODE'
ASSUME CS:CSEG,DS:DSEG,ES:DSEG,SS:DSEG
.386 ;доступны привелигированные команды для
80386
.387 ;команды для более поздних процессоров
не используются
MAIN PROC NEAR; начало процедуры MAIN с ближним ука-
зателем near
ORG 00h ;определяет адрес размещения команд или
данных
TTTR :
;------------------
MOV AX,DSEG
MOV DS,AX
MOV ES,AX
MOV SS,AX
MOV SP,OFFSET STEKN ;оператор смещения
PUSHAD
;-------тело программы------------------
MOV SI,OFFSET SLAG1
MOV DI,OFFSET SLAG2
MOV BX,OFFSET SUM
MOV CX,05H
M1: MOV AL,[SI]
CLC
ADC AL,[DI]
INC SI
INC DI
MOV [BX],AL
INC BX
LOOP M1
ADC byte ptr [BX],00
;----------------------------------------
POPAD
MOV AX,4C00h
INT 21h
CSEG ENDS
DSEG SEGMENT USE16
SLAG1 DB 10h,21h,24h,30h,0aah
SLAG2 DB 94h,15h,0A6h,0F7h,0E2h
SUM DB 6 DUP(0)
DW 100h DUP(?)
STEKN LABEL WORD
129
129
DSEG ENDS
MAIN ENDP ;конец процедуры
END TTTR
Рис. 26. Демонстрационная программа 2
Варианты заданий на лабораторную работу 3
1. Сформировать массив их десяти однобайтных чисел. Переписать во
второй массив все нечётные числа. Их количество поместить в регистр
BL.
2. Сформировать массив из десяти двухбайтных чисел. Переписать во
второй массив все отрицательные числа.
3. Сформировать массив из десяти однобайтных чисел, все чётные пере-
писать в другой массив в обратном порядке.
4. Сформировать массив из десяти однобайтных чисел, найти среди них
числа, равные нулю, посчитать их количество и записать это число в
память после исходного массива.
5. Сформировать массив из десяти однобайтовых чисел, найти в нём ну-
левое число, все числа, оказавшиеся после него переписать в другой
массив.
6. Сформировать массив из 10 однобайтных чисел, все положительные
числа переписать на место первого массива.
7. Найти все ненулевые числа из массива, состоящего из десяти одно-
байтовых чисел, посчитать их количество и поместить это число на ме-
сто первого элемента исходного массива.
8. Найти в массиве, состоящем из десяти чисел, все нечётные и в то же
время отрицательные, переписать их в другой массив.
9. Создать массив из десяти чисел, найти в нём нулевое число, все числа,
стоящие после него, проверить на чётность и переписать в другой мас-
сив.
10. Создать массив из десяти однобайтовых чисел, найти в нём нулевое и
все числа, стоящие до него переписать в другой массив.
11. Сложить два пятибайтных шестнадцатеричных числа. Результат помес-
тить в отдельный шестибайтный массив. Проверить результат на чёт-
ность и, если он чётный, записать в регистр ВН единицу.
12. Сделать вычитание двух четырёхбайтных шестнадцатеричных чисел.
Результат поместить в отдельный массив. Проверить результат на знак
и, если результат отрицательный, произвести его инвертирование.
130
130
13. Сформировать массив из десяти двухбайтных чисел. Переписать во
второй массив все положительные числа, просуммировать их и резуль-
тат переписать на место первого массива.
14. Сформировать массив из десяти однобайтных чисел, найти минималь-
ное число, умножить его на такое же и поместить результат на место
первого массива.
15. Сформировать массив из десяти двухбайтных чисел. Найти номер мак-
симального числа, умножить его на это число и поместить результат в
регистр ВХ.
16. Сформировать массив из десяти однобайтных шестнадцатеричных чи-
сел, найти их сумму, умножить её на 4 и поместить её в память после
исходного массива.
17. Сформировать массив из десяти однобайтных чисел, каждое из чисел
умножить на 2, найти их сумму и поместить её в регистр DХ.
18. Сформировать массив из десяти чисел, найти разницу между макси-
мальным и минимальным числами, умножить её на 12 и поместить в
память.
19. Сформировать массив из десяти чисел, найти в нём отрицательные
числа, сложить их и найти абсолютное значение результата.
20. Написать программу сложения двух десятибайтных чисел с учётом
знака.
Разработать и отладить две программы по указанию преподавателя.
4. ЛАБОРАТОРНАЯ РАБОТА 4
Изучение арифметического процессора
4.1. Общие положения
Вычислительные возможности современных однокристальных микро-
процессоров ограничены только арифметическими операциями. Реализация
расширенных форматов данных и систем команд в однокристальных микро-
процессорах ведет к их чрезмерному усложнению и трудности в программи-
ровании. Программная реализация сложных команд на микропрограммном
уровне ведет к значительному снижению быстродействия микропроцессора.
В сложившейся ситуации наибольшее распространение получил прин-
цип специализации, который применяется в процессорах средних и больших
компьютеров. Суть его заключается в разработке вспомогательных процес-
сорных модулей со своими системами команд, ориентированных на конкрет-
ные прикладные области: процессор арифметики с плавающей точкой, про-
цессор символьных данных, процессор ввода-вывода и др. Такие вспомога-
тельные процессоры работают под общим управлением центрального (глав-
131
131
ного) процессора и обычно разделяют с ним основную память. Специализа-
ция позволяет достичь очень высокого быстродействия.
Структурная схема арифметического сопроцессора и его взаимодейст-
вие с центральным процессором было рассмотрено в курсе лекций, поэтому
перейдём непосредственно к системе команд. Изучая систему команд и при-
ступая к программированию, обязательно необходимо прочитать соответст-
вующие разделы. Напомним только, что сопроцессор подключается к сис-
темной шине параллельно центральному процессору. Сопроцессор не имеет
своей отдельной программы и не может считывать команды из памяти, но
может обращаться к памяти для записи и считывания данных, запрашивая
для этого шину центрального процессора. Кроме того, сопроцессор контро-
лирует системную шину и может «перехватить» адреса и данные при обра-
щении к памяти центрального процессора. Таким образом, программа оказы-
вается смесью команд центрального процессора и сопроцессора, причем счи-
тывание команд из памяти осуществляет только центральный процессор.
4.2. Примеры программ с использованием
арифметического сопроцессора
Суммирование элементов массива. Предположим, что необходимо
произвести суммирование элементов массива. Если число элементов массива
равно N, результат поместить в ячейку памяти.
_TEXT SEGMENT PARA
ASSUME CS:_TEXT,DS:_DATA
.386
.387
;----------------------------------------------------
exampl PROC NEAR
TTTR: MOV AX,_DATA
MOV DS,AX
;------ тело программы ------------
FINIT ; инициализация сопроцессора.
MOV CX,N ; организовать счетчик.
JCXZ ESCAPE ; проверка длины массива.
FLDZ ; загрузка нуля в вершину стека.
XOR SI,SI ; обнуление смещения в массиве.
M1: FADD QWORD PTR ARRAY[SI] ; прибавить текущий
; элемент массива.
ADD SI,8 ; смещение индекса массива.
LOOP M1
FSTP SUM ; сохранение результата в памяти.
ESCAPE: MOV AX,4C00H
132
132
INT 21H ; выход в DOS.
exampl ENDP
_TEXT ENDS
_DATA SEGMENT USE16
N DW 6
ARRAY DQ 5.65e-2, 2.546, 8.0e2, 23.0, 67.87e-4, 5.0
SUM DQ ?
_DATA ENDS
END TTTR
Рис. 27. Программа суммирования элементов массива
В данной программе используются четыре команды сопроцессора. Ко-
манда FINIT инициализирует сопроцессор и очищает регистры сопроцессора.
Для включения в стек нуля используется команда FLDZ, подготавливая ST(0)
к накоплению суммы элементов.Команда FADD прибавляет к ST(0) текущий
элемент массива. Указатель типа QWORD PTR и мнемоника FADD означа-
ют, что операндом является число с плавающей точкой в длинном вещест-
венном формате(8 байтов). После передачи числа в сопроцессор операнд
преобразуется во временный вещественный формат и прибавляется к ST(0).
Наконец, команда FSTP при выходе из цикла записывает в ячейку SUM на-
копленную сумму. Буква P в мнемонике FSTP показывает, что после выдачи
в память содержимого ST(0) производится извлечение из стека. После вы-
полнения программы стек сопроцессора пуст.
Пример программы с использованием тригонометрических функций приве-
дён на рис. 28.
Найти значение функции
x
[xsin]
y = . Диапазон изменения числа x от
до +, ]x[ дробная часть от числа x. В точках неопределенности функции
записать в MAS1 значение нуля.
_TEXT SEGMENT PARA
ASSUME CS:_TEXT,DS:_DATA
.386
.387
;----------------------------------------------------
exampl PROC NEAR
TTTR: MOV AX,_DATA
MOV DS,AX
;------ тело программы ------------
FINIT ; инициализация сопроцессора.
MOV CX,N ; организовать счетчик.
JCXZ ESCAPE ; проверка длины массива.
133
133
XOR SI,SI ; обнуление смещения в массиве.
FSTCW STATUS ; чтение слова управления.
OR STATUS,0C00H ; маскирование RC = 11.
FLDCW STATUS ; загрузка слова управления.
M1:
FLD QWORD PTR MAS[SI] ; загрузить текущий элемент.
FTST ; проверка на ноль.
FSTSW AX
AND AH,01000000B ; выделение флага С3.
JNZ M2 ; если С3=1, тогда перейти на М2.
FLD ST ; копирование вершины стека.
FRNDINT ; нахождение целой части числа.
FSUB ; нахождение дробной части числа.
FSIN
FDIV QWORD PTR MAS[SI]
M2: FSTP QWORD PTR MAS1[SI]
ADD SI,8 ; смещение индекса массива.
LOOP M1
ESCAPE:
MOV AX,4C00H
INT 21H
exampl ENDP
_TEXT ENDS
_DATA SEGMENT USE16
N DW 6
MAS DQ 5.6545e3, 2.5465, 8.764e2, 0.0, 67.87e-4, 0.01
MAS1 DQ 6 DUP(0)
STATUS DW ?
_DATA ENDS
END TTTR
Рис. 28.Программа с использованием тригонометрических функций
Варианты заданий к лабораторной работе 4
Каждому студенту необходимо разработать и отладить два варианта
программ.
В соответствии с приведенными формулами написать программу вы-
числения значений функции. Диапазон изменения числа x от до + , ]x[
дробная часть от числа x. В точках неопределенности функции записать в ре-
зультирующий массив значение нуля. Количеством значений в исходном
массиве N задаться самостоятельно (не менее 10 значений).
134
134
1.
=
[x]
Ni
xn
1
y
ii
i
где: i = 1, 2, , N.
2. )x(tg
[x]x
1
y
i
i
i
i
= где: i = 1, 2, , N.
3.
i
i
i
x
)[x]sin(
1
y = где: i = 1, 2, , N.
4.
)[x]sin(
)x(ctq
y
i
i
i
= где: i = 1, 2, , N.
5.
)[x]lg(
x
y
i
i
i
=
где: i = 1, 2, , N.
6.
)[x]ln(
)[x](ctg
y
i
i
i
= где: i = 0, 1, 2, , N.
7.
i
x
i
zy = где - < Z < + где: i = 0, 1, 2, , N. Необходимо учесть, что от-
рицательные значения можно возводить только в целую степень.
8.
)x(log
)[x](
y
i
3
i
i
i
=
где: i = 0, 1, 2, , N.
9.
[x]
)[x]arcsin(
y
i
i
i
= где: i = 0, 1, 2, , N.
10.
)[x]arccos(
x
y
i
5
i
i
= где: i = 0, 1, 2, , N.
11.
)xsin(
)x(arcctg
y
i
i
i
= где: i = 0, 1, 2, , N.
12.
[x]cos
4
[x]sin
3
[x]cos
2
[xsin]
1
y
i
4
i
3
i
2
i
i
+= где: i = 0, 1, 2, , N.
13.
ii2i3i4i
i
xxxxxy
++= где: i = 0, 1, 2, , N.
14.
(
)
i3
i
i
10xctgy += где: i = 0, 1, 2, , N.
15.
(
)
(
)
i
i
i
5i
x
[x]sin
[x]logy += где: i = 0, 1, 2, , N.
135
135
16.
(
)
)xsin(
[x]cos
!iy
i
i
i
+= где: i = 0, 1, 2, , N.
17.
!
i
2
2y
i
i
x
x
i
=
где: i = 0, 1, 2, , N.
18.
(
)
[x]
xlg
ey
i
i
x
i
i
+= где: i = 0, 1, 2, , N.
19.
1i
i
y
i
y
x
ey
1i
+=
где: i = 1, 2, , N,
.1y
0
=
20.
1i
i
1ii
x
)x(ctg
yy
+= где: i = 1, 2, , N,
.1y
0
=
5. Составление и отладка программ
на микроконтроллере МК51
ВВЕДЕНИЕ В PROVIEW
ProView фирмы Franklin Software Inc. интегрированная среда разработки
программного обеспечения для однокристальных микроконтроллеров семей-
ства Intel 8051 и его клонов. Она включает в себя всё, что нужно для созда-
ния, редактирования, компиляции, трансляции, компоновки, загрузки и от-
ладки программ:
1. стандартный интерфейс Windows,
2. полнофункциональный редактор исходных текстов с выделением син-
таксических элементов цветом,
3. организатор проекта,
4. транслятор с языка C,
5. ассемблер,
6. отладчик,
7. встроенную справочную систему.
Среда разработки подобна Visual C++ Microsoft и Borland C++ для Windows.
Пользователи, знакомые с любым из этих изделий, будут чувствовать себя в
ProView, как дома.
Первый этап разработки программы запись её исходного текста на каком-
либо языке программирования.
Затем производится компиляция или трансляция его в коды из системы ко-
манд микроконтроллера, используя транслятор или ассемблер. Трансляторы
и ассемблеры прикладные программы, которые интерпретируют текстовый
файл, содержащий исходный текст программы, и создают объектные файлы,
содержащие объектный код.