Отчет 2

advertisement
Поволжский Государственный Университет
Телекоммуникаций и Информатики
Архитектура ЭВМ и систем
Отчёт по лабораторной работе №2
Изучение основ программирования на языке Ассемблера. Упрощенное
оформление программ. Создание исполняемых *.com файлов.
Выполнил студент группы ИТ-71
Горцунов В.В.
Самара 2008
Оглавление
1. Ответы на контрольные вопросы. ..................................................................... 3
2. Выполнение работы ............................................................................................ 6
2.1. Создание hello_2s.asm ................................................................................... 6
2.2. Создание hello_2c.asm................................................................................... 7
Использованная литература ................................................................................... 8
2
1. Ответы на контрольные вопросы.
1. Команды и директивы ассемблера. Формат и отличия.
Команды имеют следующий формат:
[метка:] мнемоника [операнд(ы)] [;комментарий]
Директивы Ассемблера позволяют управлять процессом ассемблирования и
формирования листинга. Их используют для распределения памяти, обеспечения связи
между программными модулями и работы с символическими именами. Часто их называют
псевдокомандами. Формат директив похож на формат команд:
[имя] Директива [операнд(ы)] [;комментарий]
Каждая команда при трансляции генерирует машинный код команды, размер
которого зависит от способов задания операндов.
В отличии от команд директивы действуют только в процессе ассемблирования
программы и не генерируют машинных кодов.
2. Какова цель сегментации памяти?
Для того, чтобы с помощью 16-разрядных чисел адресовать любой байт памяти,
предусмотрена сегментная адресация памяти, реализуемая с помощью сегментных
регистров процессора. Суть сегментной адресации в следующем. Обращение к памяти
осуществляется исключительно с помощью сегментов – логических преобразований,
накладываемых на те или иные участки памяти. Исполнительный адрес любой ячейки
памяти вычисляется процессором путем сложения начального адреса сегмента, в котором
располагается эта ячейка, со смещением к ней от начала сегмента. Это смещение иногда
называют относительным адресом.
3. Сколько и каких сегментов может иметь программа?
Обычно программа имеет не менее 3 сегментов – сегмента данных, сегмента стека,
сегмента кода.
4. В каких случаях имеет смысл использовать упрощенную сегментацию?
Упрощенная сегментация или упрощенное оформление программ на ассемблере
используется для создания простых программ, которые содержат по одному сегменту для
данных и кода, а также для программ модули которых предполагается связывать с
программами на языках высокого уровня, используя упрощенные директивы сегментации.
При этом структура исходного модуля упрощается.
5. Какие директивы упрощенной сегментации используются?
.model, .code, .data, .const, .data?, .stack [размер], .fardata [имя], .fardata? [имя]
3
6. Какие модели памяти используются при упрощенной сегментации?
Имя
Tiny
Тип
кода
near
Тип
данных
near
Определение
cs=ds=ss=dgroup
Код и данные объединены в
одну группу с именем
dgroup.
Small
near
near
cs=_text;
Код занимает один сегмент.
Данные объединены в одну
группу с именем dgroup.
Medium
far
near
cs=<model>_text
Несколько сегментов кода.
Данные объединены в одну
группу с именем dgroup.
Compact
near
far
cs=_text
Код в одном сегменте.
Данные объединены в одну
группу с именем dgroup.
Large
far
far
cs=<model>_text
Код в нескольких сегментах.
Данные объединены в одну
группу с именем dgroup.
Huge
far
far
cs=<model>_text
Tchuge
far
far
cs=<model>_text
Flat
near
near
cs=text
ds=ss=flat
Назначение модели
Для создания *.com
программ
Для небольших и средних
программ (*.exe). Для
программ на Ассемблере.
Для больших программ с
малым объемом данных.
Сегмент кода 64К. Объем
данных не ограничен.
Размер кода и данных не
ограничены. Для больших
программ.
Тоже, что и large. Ведена
для совместимости с
ЯВУ.
Используется при
программировании на
Turbo C и Borland C++.
Используется в среде
OS/2.
7. Какими директивами описывается сегмент?
Директива
Описание: Начало или продолжение
Сегмента
кода
.code
Сегмента инициализированных данных
.data
Сегмента постоянных данных
.const
Сегмента неинициализированных данных
.data?
.stack [размер] Сегмента стека. Параметр задает размер стека
.fardata [имя] Сегмента инициализированных данных типа far.
.fardata? [имя] Сегмента неинициализированных данных типа far.
9. Как производится ассемблирование и компоновка программы при упрощенной
сегментации?
Так же, как и для программы с стандартной сегментацией.
10. Как выглядит типовая форма для создания *.exe приложений упрощенной
сегментацией?
;Forma_1 - упрощенное оформление программ
.MODEL SMALL
;модель памяти ближнего типа
.STACK 100h
;определить стек размером 100h
.DATA
; Открыть сегмент данных
В этом сегменте определяются данные
с использованием символических имен
; Открыть сегмент кодов
; Инициализировать
.CODE
Start: mov AX, @DATA
4
; сегментный регистр DS
mov DS, AX
Здесь следуют команды, которые определяются
алгоритмом решаемой задачи
mov AL, 0
mov AH, 4Ch
int 21h
END Start
; Завершить программу
; с помощью
; DOS
; Конец исходного модуля.
11. В каких случаях используются программы *.com?
Если объем программы оказывается меньше 64 Кб.
12. Как выглядит типовая форма для создания *.com приложений?
;Forma_2 - исходный модуль для создания *.com приложения
.MODEL TINY
;модель памяти ближнего типа
.CODE
; Открыть сегмент кодов
ORG 100h
; 256 байт для PSP
Begin: jmp Start
; Безусловный переход на первую команду
Здесь определяются данные с использованием
символических имен
Start:
; Здесь следуют команды, которые определяются
; алгоритмом решаемой задачи
mov AX, 4C00h
int 21h
END Begin
; Завершить программу
; с помощью DOS
; Конец исходного модуля.
13. Из каких сегментов состоит исходный модуль программы типа *.com?
Один сегмент в котором расположены и данные и стек и код
14. Каким образом располагается программа типа *.com после загрузки в память?
Все сегментные регистры указывают на начало сегмента, в котором располагается
программа, фактически на начало PSP. Регистр указателя стека SP автоматически
загружается числом – начальной точкой входа в стек FFFEh.
15. Каков размер области сегмента префикса программы (PSP) ?
64 Кбайт.
16. Каков размер стека в программах типа *.com?
256 байт.
17. Как производится ассемблирование и компоновка программ типа *.com?
tasm /z /zi /n %1 %1 %1
tlink /t %1
5
2. Выполнение работы
2.1. Создание hello_2s.asm
Содержание hello_2s.asm
; Program Hello_2s - Упрощенное оформление программ
.MODEL SMALL
.STACK 100h
.DATA
Greet DB 'Hello, My Friends !', 13, 10, '$'
Greet_2 DB 'My name is Vlad', 13, 10, '$'
; Модель памяти ближнего типа
; Определить стек размером 100h
; Открыть сегмент данных
; Определить строку символов с именем Greet
; Определить строку символов с именем Greet_2
.CODE
Start: mov AX, @DATA
mov DS, AX
mov AH, 09h
mov DX, OFFSET Greet
int 21h
; Открыть сегмент кода
; Инициализировать
; сегментный регистр DS через регистр AX
; Вывести строку Greet
; на экран
; с помощью DOS
mov AH, 09h
mov DX, OFFSET Greet_2
int 21h
mov AX, 4C00h
int 21h
END Start
; Вывести строку Greet_2
; на экран
; с помощью DOS
; Корректно завершить программу
; с помощью DOS
; Конец исходного модуля
6
2.2. Создание hello_2c.asm
Содержание hello_2c.asm
; Program Hello_2c - исходный модуль для создания *.com файла
.MODEL TINY
; Модель памяти ближнего типа
.CODE
; открыть сегмент кода
ORG 100h
; Отвести 256 байт под PSP
Begin: jmp Start
Greet DB 'Hello, My Friends !', 13, 10, '$'
Greet_2 DB 'My name is Vlad', 13, 10, '$'
Start:
mov AH, 09h
mov DX, OFFSET Greet
int 21h
mov AH, 09h
mov DX, OFFSET Greet_2
int 21h
mov AX, 4C00h
int 21h
END Begin
; Перейти на точку входа в программу
; Определить строку символов с именем Greet
; Определить строку символов с именем Greet_2
; Вывести строку Greet
; на экран
; с помощью DOS
; Вывести строку Greet_2
; на экран
; с помощью DOS
; Корректно завершить программу
; с помощью DOS
; Конец исходного модуля
7
Использованная литература
Assembler. Учебник для вузов. 2-е изд. /В. И. Юров – СПб.: Питер, 2004. с.121…141.
К. Г. Финогенов. Основы языка Ассемблера. – М.: Радио и связь, 2000. с. 22…31.
Абель П. Язык Ассемблера для IBM PC и программирования /Пер. c англ.- М.:Высш.шк.,
1992.с 51…75.
8
Download