Автор работы: Пользователь скрыл имя, 21 Ноября 2012 в 19:19, лабораторная работа
Цель работы: показать процессы ассемблирования, компоновки и выполнения программ на высокопроизводительных микропроцессорных отладочных устройствах.
При разработке программ на ассемблере требуются: любой редактор для набора текста исходной программы, Ассемблер (в данном случае MASM) и программа-компоновщик LINK.
Шаг ассемблирования включает в себя трансляцию исходного текста в машинный объектный код и генерацию модуля с расширением .OBJ. Этот формат еще не готов к исполнению, необходим шаг компоновки - то есть преобразование модуля .OBJ в модуль .EXE (исполняемый модуль).
МИНОБРНАУКИ РОССИИ
Федеральное
государственное бюджетное
высшего профессионального образования
«ВОЛОГОДСКИЙ
ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ
(ВоГТУ)
Кафедра АВТ
« ВМ, сети и системы»
Отчёт по лабораторной работе № 4
АССЕМБЛИРОВАНИЕ И ВЫПОЛНЕНИЕ ПРОГРАММ
Вологда
Цель работы: показать процессы ассемблирования, компоновки и выполнения программ на высокопроизводительных микропроцессорных отладочных устройствах.
При разработке программ на ассемблере требуются: любой редактор для набора текста исходной программы, Ассемблер (в данном случае MASM) и программа-компоновщик LINK.
Шаг ассемблирования включает в себя трансляцию исходного текста в машинный объектный код и генерацию модуля с расширением .OBJ. Этот формат еще не готов к исполнению, необходим шаг компоновки - то есть преобразование модуля .OBJ в модуль .EXE (исполняемый модуль).
Программа LINK осуществляет следующее:
1. Завершает формирование
в модуле .OBJ адресов, которые
остались неопределенными
2. Компонует более
одного отдельно
3. Формирует исполняемый модуль .exe командами загрузки для выполнения.
Для коррекции программы .EXE требуется внести изменения в исходную программу и проделать весь путь до получения нового исполняемого модуля.
1.1. Ассемблирование программы
Исходный модуль должен иметь расширение .ASM. Для ассемблирования исходного модуля необходимо запустить программу Ассемблер MASM.EXE.
Ассемблер преобразует мнемокоды в машинные коды и выдает на экран сообщение об ошибках.
1.2. Компоновка программы
Если в результате ассемблирования не обнаружено ошибок, то необходимо переходить к компановке исполняемой программы при помощи LINK.
Для выполнения этого шага необходимо запустить программу LINK и ответить на следующие предложения:
После получения исполняемого модуля .EXE его можно протестировать при помощи программы DEBUG.
1.3. Правила составления исходной программы
для получения исполняемой типа .EXE и .COM
При составлении исходной программы необходимо помнить, что правила составления ее для получения исполняемой типа .ЕХЕ и типа. СОМ несколько различны. Для написания исходного текста можно пользоваться любым текстовым редактором, установленным на ПЭВМ. Удобнее пользоваться, в нашем случае, редактором NE.COM (см. каталог NORTON).
Эти правила достаточно формальны и связаны с операционной системой установленной на данном конкретном вычислителе.
Для .ЕХЕ программ эти правила следующие:
1.В начале задается директива Ассемблеру о формате страницы листинга и имени исходной программы
2. Резервирование стековой памяти . Резервируется не менее 32 слов
3. Определение данных (если это требуется проектируемой программой)
Поле FLDA определяет слово, содержащее десятичное значение 250, которое Ассемблер транслирует в шестнадцатиричное 00FA. Поле FLDB определяет слово с десятичным значением 125. Поле FLDC определяет слово с неизвестным значением, обозначенным знаком (?).
4. Сегмент кода имеет
имя CODESG. Особенности: директива
ASSUME (установить для Ассемблера
связь между сегментами и
Процедура FAR переводит Ассемблер в режим формирования адресов посылок ДЛИННЫЙ (межсегментный).
Далее идет обязательная процедура по организации стека
Затем две команды, обеспечивающие адресацию сегмента данных
Далее идет текст исходной программы в мнемокодах.
Завершается кодовый сегмент следующим образом:
BEGIN ENDP ;конец процедуры BEGIN
CODESG ENDS ;конец сегмента кодового
END BEGIN
При работе LINK автоматически генерируется особый формат для .ЕХЕ файлов, в котором присутствует специальный начальный блок (заголовок) размером не менее 512 байт.
Для выполнения программ можно создавать .СОМ файлы. Программа EXE2BIN.EXE в операционной системе DOS преобразует .ЕХЕ файлы в формат BIN. Для получения исполняемого файла .СОМ BIN файл средствами DOS необходимо переименовать в СОМ.
При работе EXE2BIN, в случае обнаружения ошибки, выдается сообщение о невозможности преобразования .ЕХЕ модуля в формат .BIN без указания конкретной причины. (EXE2BIN - преобразователь из .ЕХЕ в BIN (двоичный) формат (EXE-to-BIN)).
Программа .СОМ ограничена размером одного сегмента (64К). Стек в .СОМ программах генерируется автоматически. Размер .СОМ файла всегда меньше .ЕХЕ. Формат исходной программы для .COM типа исполняемой программы несколько отличается от исходной программы для типа .EXE
org 100h ;обязательный атрибут исходной программы
Для .СОМ файлов DOS автоматически определяет стек и устанавливает одинаковый сегментный адрес во всех четырех сегментных регистрах.
Если опущен ORG 100H, то на данные в префиксе программного сегмента будут установлены неправильные ссылки с непредсказуемым результатом при выполнении.
1.4. Устройства
ввода-вывода для проведения
Для проведения эксперимента по проверке правильности составленной программы управления предлагается использовать клавиатуру и дисплей. В базовой системе ввода-вывода (BIOS), резидентно расположенной в ПЗУ каждой ПЭВМ, есть подпрограммы обращения к этим устройствам и всем, входящим в состав машины.
Все необходимые экранные и клавиатурные операции можно выполнить с помощью команды INT 10H, которая передает управление непосpедственно в BIOS.
Для выполнения более сложных операций существует прерывание более высокого уровня INT 21H, которое сначала передает управление в DOS.(Например, при вводе с клавиатуры потребуется подсчет введенных символов, проверка на максимальное число символов и проверка на символ "Enter").
1.4.1. Установка курсора
Обычный монитор имеет 25 строк и 80 столбцов. В каждую позицию экрана курсор может быть установлен.
Подпрограмма INT 10H включает в себя установку курсора в любую позицию и очистку экрана.
1.4.2. Очистка экрана
Очистка экрана может начинаться
с любой позиции и
и 0600Н в АХ.
1.4.3. Экранные и клавиатурные операции в базовой версии DOS
Вывод на экран базовой
версии DOS требует определения
1.4.4. Вывод на экран набора символов ASCII-кода
Большинство из 256 ASCII кодов имеют символьное представление и могут быть выведены на экран. Шестнадцатиричные коды 00 и ff не имеют символов и выводятся на экран в виде пробелов, хотя символ пробела имеет ASCII-код 20Н.
В таблице 2 приведена программа (СОМ), которая выводит на экран полный набор символов ASCII-кода. Программа вызывает три процедуры: b10clr, c10set, d10disp. Первая очищает экран, вторая устанавливает курсор в положение 0,0, а третья выводит содержимое поля СТR, которое вначале инициализировано значением 00 и затем увеличивается на 1 при каждом выводе на экран, пока не достигнет шестнадцатиричного значения FF.
1.4.5. Ввод данных с клавиатуры
Область ввода требует наличия списка параметров, содержащего спецификацию полей, которые необходимы при выполнении команды INT.
Во-первых должна быть, определена максимальная длина вводимой информации. Это необходимо для предупреждения пользователя звуковым сигналом. Символы, превышающие максимальную длину, игнорируются.
Во-вторых, в списке параметров должно быть определено поле, куда команда возвращает действительную длину введенного текста в байтах.
Задание 1
Листинг D1e.EXE
Page 60,132
TITLE D1e.EXE
0000 STACKSG SEGMENT PARA STACK 'Stack'
0000 STACKSG ENDS
0000 DATASG SEGMENT PARA 'Data'
0000 DATASG ENDS
0000 CODESG SEGMENT PARA 'Code'
0000 BEGIN PROC FAR
ASSUME CS:CODESG, DS:DATASG, SS:STACKSG, ES:NOTHING
0000 1E PUSH DS
0001 2B C0 SUB AX,AX
0003 50 PUSH AX
0004 B8 ---- R MOV AX, DATASG
0007 8E D8 MOV DS, AX
0009 B4 02 MOV AH,02
000B B7 00 MOV BH,00
000D B6 0A MOV DH,10
000F B2 41 MOV DL,65
0011 CD 10 INT 10H
0013 BA 0000 MOV DX,00
0016 BB 0000 M2:MOV BX,00
0019 4B M1:DEC BX
001A 75 FD JNZ M1
001C 4A DEC DX
001D 75 F7 JNZ M2
001F CB RET
0020 BEGIN ENDP
0020 CODESG ENDS
END BEGIN
Segments and Groups:
N a m e Length Align Combine Class
CODESG . . . . . . . . . . . . . 0020 PARA NONE 'CODE'
DATASG . . . . . . . . . . . . . 0000 PARA NONE 'DATA'
STACKSG . . . . . . . . . . . . 0000 PARA STACK 'STACK'
Symbols:
N a m e Type Value Attr
BEGIN . . . . . . . . . . . . . F PROC 0000 CODESG Length = 0020
M1 . . . . . . . . . . . . . . . L NEAR 0019 CODESG
M2 . . . . . . . . . . . . . . . L NEAR 0016 CODESG
@FILENAME . . . . . . . . . . . TEXT D1e
37 Source Lines
37 Total Lines
11 Symbols
47456 + 396912 Bytes symbol space free
0 Warning Errors
0 Severe Errors
Print Screen экрана D1e.EXE
Листинг D1с.сom
page 60,132
title D1c (.COM)
0000 codesg segment para 'code'
assume cs:codesg,ds:codesg,ss:codesg,
;-----------------------------
0100 org 100h ;обязательный атрибут исходной программы
;-----------------------------
0100 EB 07 90 begin: jmp main
;-----------------------------
0103 00FA flda dw 250
0105 007D fldb dw 125
0107 ???? fldc dw ?
0109 main proc near ; near - короткая передача
0109 B4 02 MOV AH,02
010B B7 00 MOV BH,00
010D B6 05 MOV DH,05
010F B2 0C MOV DL,12
0111 CD 10 INT 10H
0113 B8 0002 mov ax,02
0116 BB 0000 m2: mov bx,00
0119 4B m1: dec bx
011A 75 FD jnz m1
011C 48 dec ax
011D 75 F7 jnz m2
011F C3 ret
0120 main endp
0120 codesg ends
end begin
D1c (.COM)
Segments and Groups:
N a m e Length Align Combine Class
CODESG . . . . . . . . . . . . . 0120 PARA NONE 'CODE'
Symbols:
N a m e Type Value Attr
BEGIN . . . . . . . . . . . . . L NEAR 0100 CODESG
FLDA . . . . . . . . . . . . . . L WORD 0103 CODESG
FLDB . . . . . . . . . . . . . . L WORD 0105 CODESG
FLDC . . . . . . . . . . . . . . L WORD 0107 CODESG
M1 . . . . . . . . . . . . . . . L NEAR 0119 CODESG
M2 . . . . . . . . . . . . . . . L NEAR 0116 CODESG
MAIN . . . . . . . . . . . . . . N PROC 0109 CODESG Length = 0017
@FILENAME . . . . . . . . . . . TEXT D1c
30 Source Lines
30 Total Lines
11 Symbols
47454 + 396914 Bytes symbol space free
0 Warning Errors
0 Severe Errors
Print Screen экрана D1c.com
Задание 2
Листинг D2e.exe
Page 60,132
TITLE D2e.EXE
0000 STACKSG SEGMENT PARA STACK 'Stack'
0000 STACKSG ENDS
0000 DATASG SEGMENT PARA 'Data'
0000 DATASG ENDS
0000 CODESG SEGMENT PARA 'Code'
0000 BEGIN PROC FAR
ASSUME CS:CODESG, DS:DATASG, SS:STACKSG, ES:NOTHING
0000 1E PUSH DS
0001 2B C0 SUB AX,AX
0003 50 PUSH AX
0004 B8 ---- R MOV AX, DATASG
0007 8E D8 MOV DS, AX
0009 B8 0600 mov ax,0600h
000C B3 46 MOV BL,70
000E B9 0000 mov cx,0000
0011 BA 184F mov dx,184fh
0014 CD 10 int 10h
0016 BA 0000 MOV DX,00
0019 BB 0000 M2:MOV BX,00
001C 4B M1:DEC BX
001D 75 FD JNZ M1
001F 4A DEC DX
0020 75 F7 JNZ M2
0022 CB RET
0023 BEGIN ENDP
0023 CODESG ENDS
END BEGIN
Segments and Groups:
N a m e Length Align Combine Class
CODESG . . . . . . . . . . . . . 0023 PARA NONE 'CODE'
DATASG . . . . . . . . . . . . . 0000 PARA NONE 'DATA'
STACKSG . . . . . . . . . . . . 0000 PARA STACK 'STACK'
Symbols:
N a m e Type Value Attr
BEGIN . . . . . . . . . . . . . F PROC 0000 CODESG Length = 0023
M1 . . . . . . . . . . . . . . . L NEAR 001C CODESG