Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Директивы резервирования и инициализации данных

Факультет информационных технологий и робототехники (ФИТР)

 

Кафедра программного обеспечения вычислительной техники

и автоматизированных систем

 

Отчет

По лабораторной работе № 2

 

«Типы данных. Директивы резервирования и

инициализации данных»

 

по предмету: ”Языки программирования (ассемблер) ”

 

 

Выполнили студенты группы 107221: В.Е. Кухта

А.О.Коршун

П.В. Федеров

 

Проверила: А.А.Несенчук

 

Минск 2012

Цель работы: разработать и отладить программу на ассемблере с использованием директив резервирования и инициализации данных, с помощью стандартного пакета TASM ассемблера.

 

Краткие сведения из теории

Типы данных

При программировании на языке ассемблера используются данные следующих типов:

1. Непосредственные данные, представляющие собой числовые или символьные значения, являющиеся частью команды.
Непосредственные данные формируются программистом в процессе написания программы для конкретной команды ассемблера.

2. Данные простого типа, описываемые с помощью ограниченного набора директив резервирования памяти, позволяющих выполнить самые элементарные операции по размещению и инициализации числовой и символьной информации.

3. Данные сложного типа, которые были введены в язык ассемблера с целью облегчения разработки программ. Сложные типы данных строятся на основе базовых типов, которые являются как бы кирпичиками для их построения.

Понятие простого типа данных носит двойственный характер. С точки зрения размерности (физическая интерпретация), микропроцессор аппаратно поддерживает следующие основные типы данных (рисунок 1):

· байт — восемь последовательно расположенных битов, пронумерованных от 0 до 7, при этом бит 0 является самым младшим значащим битом;

· слово — последовательность из двух байт, имеющих последовательные адреса. Размер слова — 16 бит; биты в слове нумеруются от 0 до 15. Байт, содержащий нулевой бит, называется младшим байтом, а байт, содержащий 15-й бит - старшим байтом. Микропроцессоры Intel имеют важную особенность — младший байт всегда хранится по меньшему адресу. Адресом слова считается адрес его младшего байта. Адрес старшего байта может быть использован для доступа к старшей половине слова.

· двойное слово — последовательность из четырех байт (32 бита), расположенных по последовательным адресам. Нумерация этих бит производится от 0 до 31. Слово, содержащее нулевой бит, называется младшим словом, а слово, содержащее 31-й бит, - старшим словом. Младшее слово хранится по меньшему адресу. Адресом двойного слова считается адрес его младшего слова. Адрес старшего слова может быть использован для доступа к старшей половине двойного слова.

· учетверенное слово — последовательность из восьми байт (64 бита), расположенных по последовательным адресам. Нумерация бит производится от 0 до 63. Двойное слово, содержащее нулевой бит, называется младшим двойным словом, а двойное слово, содержащее 63-й бит, — старшим двойным словом. Младшее двойное слово хранится по меньшему адресу. Адресом учетверенного слова считается адрес его младшего двойного слова. Адрес старшего двойного слова может быть использован для доступа к старшей половине учетверенного слова.

 

Рисунок 1- Основные типы данных микропроцессора

 

· Цепочка — представляющая собой некоторый непрерывный набор байтов, слов или двойных слов максимальной длины до 4 Гбайт.

· Битовое поле представляет собой непрерывную последовательность бит, в которой каждый бит является независимым и может рассматриваться как отдельная переменная. Битовое поле может начинаться с любого бита любого байта и содержать до 32 бит.

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

 

Директивы резервирования и инициализации данных

Для описания простых типов данных в программе используются специальные директивы резервирования и инициализации данных, которые, по сути, являются указаниями транслятору на выделение определенного объема памяти.

Директивы резервирования и инициализации данных простых типов имеют формат, показанный на рисунке 3.

 

Рисунок 2 - Директивы описания данных простых типов

На рисунке 3 использованы следующие обозначения:

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

· значение инициализации — значение элемента данных, которое будет занесено в память после загрузки программы. Фактически, создается инициализированная переменная, в качестве которой могут выступать константы, строки символов, константные и адресные выражения в зависимости от типа данных. Подробная информация приведена в приложении 1;

· выражение — итеративная конструкция с синтаксисом, описанным на рис. 5.17. Эта конструкция позволяет повторить последовательное занесение в физическую память выражения в скобках n раз.

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

На рис. 3 представлены следующие поддерживаемые TASM директивы резервирования и инициализации данных:

· db — резервирование памяти для данных размером 1 байт.

· dw — резервирование памяти для данных размером 2 байта.

· dd — резервирование памяти для данных размером 4 байта.

· df — резервирование памяти для данных размером 6 байт;

· dp — резервирование памяти для данных размером 6 байт.

· dq — резервирование памяти для данных размером 8 байт.

· dt — резервирование памяти для данных размером 10 байт.

 

2 Задание по лабораторной работе

 

В лабораторной работе необходимо выполнить следующие этапы:

· Сформировать исходный модуль prog.asm, содержащий сегмент данных согласно таблице1;

· Сложить пункт 1 с пунктом 5 и пункт 6 с пунктом 11;

· Выполнить трансляцию созданного исходного модуля;

· Изучить порядок расположения данных в листинге;

· Выполнить компоновку объектного модуля, получить загрузочный модуль;

· Загрузить исполнимый модуль в отладчик td.exe;

· Изучить расположение объявленных в программе переменных с использованием дампа памяти;

· Изучить содержание регистров и длину его изменения в процессе выполнения программы.

 

 

Таблица 1. Исходные данные для составления программы

№ п/п Количество Наличие инициализации Имя Тип данных
    + + байт
    - + байт
    - + байт
    + - строка
    + + байт
    + + слово
    - + слово
    + + двойное слово
    + + 6 байтов
    + + адрес
    + + слово
    + + учетверённое слово

Алгоритм решения задачи

Основные этапы выполнения программы представлены на рисунке 3.

 
 


1

2

 
 


5

 
 


Рисунок 3 – Основные этапы выполнения программы

Контрольные примеры

В результате последовательного выполнения этапов получены исходный объектный и отлаженный загрузочный модули. На рисунке 4 показан процесс разработки программы в среде TASM.

 

 

Рисунок 4 - Этапы разработки программы на ассемблере в среде DOS. Трансляция, компиляция и отладка программы в среде DOS

 

Открытие программы с помощью программы Turbo Debugger представлено на рисунке 5.

 

 

Рисунок 5 – Открытие программы с помощью td.exe

 

Результат заргузки значенния регистра ax в сегмент данных ds показан на рисунке 6.

 

 

Рисунок 6 – Результат выполнения 1 команды

 

Результат перемещения числа 0000 в регистр ax изображён на рисунке 7.

 

 

Рисунок 7 – Результат выполнения 2 команды

 

 

Результат перемещения числа из сегмента данных числа А1 в старшую часть регистра ax – ah представлен на рисунке 8.

 

 

Рисунок 8 – Результат выполнения 3 команды

 

Результат перемещения числа из сегмента данных числа А5 в старшую часть регистра bx – bh представлен на рисунке 9.

 

 

Рисунок 9 – Результат выполнения 4 команды

 

 

Результат сложения старших частей регистров ax и bx – ah и bh и помещение результата сложения в старшую часть регистра ах представлен на рисунке 10.

 

 

Рисунок 10 – Результат выполнения 5 команды

 

Результат перемещения значения из сегмента данных числа А6 в регистр сx изображён на рисунке 11.

 

 

Рисунок 11 – Результат выполнения 6 команды

 

Результат перемещения значения из сегмента данных числа А11 в регистр dx изображён на рисунке 12.

 

 

Рисунок 12 – Результат выполнения 7 команды

 

Результат сложения старших регистров сx и dx и помещение результата сложения в регистр сх представлен на рисунке 13.

 

 

Рисунок 13 – Результат выполнения 8 команды

 

 

Результат перемещения числа 4c00h в регистр ax показан на рисунке 14.

 

 

Рисунок 14 – Результат выполнения 9 команды

 

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

 

 

Рисунок 15 – Прерывание выполнения программы

 

 

Завершение выполнения программы представлено на рисунке 16.

 

 

Рисунок 16 – Завершение выполнения программы

 

Выводы

1. Изучили директивы резервирования и инициализации данных.
разработали программц сожержащию сегмент данных

Список использованной литературы

 

1. Рудаков П., Финогенов К. Программирование на языке Ассемблера IBMPC. Обнинск: Принтер, 1999.

2. Юров В., Хорошенко С. Ассемблер. Учебный курс. СПб: Питер, 2006.

 

 

ПРИЛОЖЕНИЕ А

 

Листинг программы

Turbo Assembler Version 4.1 09/03/12 12:30:00 Page 1

prog.asm

 

 

1 0000.model Small

2 0000.Stack 256

3 0000.data

4 0000 21 A1 db 21h

5 0001 02*(??) A2 db 2 dup()

6 0003 03*(??) A3 db 3 dup()

7 0006 54 41 53 4D db 'TASM'

8 000A 21 A5 db 21h

9 000B 0210 A6 dw 210h

10 000D 02*(????) A7 dw 2 dup()

11 0011 00000210 A8 dd 210h

12 0015 000000000010 A9 df 10h

13 001B 000Br adr dw A6

14 001D 0210 A11 dw 210h

15 001F 0000000000000210 A12 dq 210h

16 0027.code

17 0000 B8 0000s Start: mov ax,@data

18 0003 8E D8 mov ds,ax

19 0005 B8 0000 mov ax,0000

21 0008 8A 26 0000r mov ah,A1

22 000C 8A 3E 000Ar mov bh,A5

23 0010 02 E7 add ah,bh

24 0012 8B 0E 000Br mov cx,A6

25 0016 8B 16 001Dr mov dx,A11

26 001A 03 CA add cx,dx

27 001C B8 4C00 mov ax,4c00h

28 001F CD 21 int 21h

29 End Start


Turbo Assembler Version 4.1 09/03/12 12:30:00 Page 2

Symbol Table

 

 

Symbol Name Type Value Cref (defined at #)

 

??DATE Text "09/03/12"

??FILENAME Text "prog "

??TIME Text "12:30:00"

??VERSION Number 040A

@32BIT Text 0 #1

@CODE Text _TEXT #1 #1 #16

@CODESIZE Text 0 #1

@CPU Text 0101H

@CURSEG Text _TEXT #3 #16

@DATA Text DGROUP #1 17

@DATASIZE Text 0 #1

@FILENAME Text PROG

@INTERFACE Text 000H #1

@MODEL Text 2 #1

@STACK Text DGROUP #1

@WORDSIZE Text 2 #3 #16

A1 Byte DGROUP:0000 #4 21

A11 Word DGROUP:001D #14 25

A12 Qword DGROUP:001F #15

A2 Byte DGROUP:0001 #5

A3 Byte DGROUP:0003 #6

A5 Byte DGROUP:000A #8 22

A6 Word DGROUP:000B #9 13 24

A7 Word DGROUP:000D #10

A8 Dword DGROUP:0011 #11

A9 Pword DGROUP:0015 #12

ADR Word DGROUP:001B #13

START Near _TEXT:0000 #17 29

 

Groups & Segments Bit Size Align Combine Class Cref (defined at #)

 

DGROUP Group #1 1 17

STACK 16 0100 Para Stack STACK #2

_DATA 16 0027 Word Public DATA #1 #3

_TEXT 16 0021 Word Public CODE #1 1 #16 16

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...