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

Приложение 1. Пример сегмента данных программы.

Лабораторная работа № 1

Типы данных

Содержание работы

- цель работы

- введение

- типы данных процессора Intel

- описание типов данных в Ассемблере Intel

- пример программы

- порядок выполнения работы

- содержание отчета

- варианты заданий

- заключение

- приложения

Цель работы

Целью работы является знакомство с типами данных процессора и их описанием в языке Ассемблера.

Введение

Компьютер является средством обработки и хранения информации. Информация представляется как данные, хранящиеся в устройствах компьютера в виде состояний физических элементов. Общепринятым способом кодирования данных в машине является двоичное представление, когда один бит информации хранится в элементарной ячейке с двумя стабильными состояниями, обозначаемыми как «0» и «1» или же «ЛОЖЬ» и «ИСТИНА». В зависимости от типа устройства различают расположение данных в регистрах процессора, в памяти (ОЗУ или ПЗУ) или в регистрах периферийных устройств (портах).

В качестве единицы измерения информации используется, кроме бита, байт (8 бит). Исторически сложилось так, что аппаратные ресурсы компьютера (процессор, шина данных, память) имели разрядность, кратную восьми (8-, 16-, 32-, 64-разрядные системы). Наименьшей адресуемой в памяти единицей информации является один байт. Таким образом, информация (данные) при написании программ рассматривается как наборы байтов.

Типы данных процессора Intel

Физически адресуемыми и обрабатываемыми единицами данных являются данные разрядности 8, 16, 32, 64. Они получили названия, соответственно:

- байт (byte) – 8 бит,

- слово (word) – 16 бит,

- двойное слово (double word) – 32 бита,

- учетверенное слово (quad word) – 64 бита.

Арифметические сопроцессоры (FPU), первым представителем которых был 80287, а сейчас они встроены в один чип с центральным процессором (CPU), могут хранить и обрабатывать числа в форматах с плавающей точкой двойной точности и упакованном BCD (Binary coded decimal) (80 бит или 20 десятичных знаков). Для их описания используется тип:

- десять байт (ten bytes) – 80 бит.

В арифметике принято записывать числа в нотации, когда старшие цифры располагаются слева, а младшие справа.

7 0
Вследствие этого при записи байта для представления его значения нумерацию битов принято вести от младшего (нулевого) к старшему (седьмому) справа налево:

 

               

Для единиц данных, больших, чем 1 байт, нумерация байтов выполняется, так же, как битов в байте, от младшего к старшему справа налево:

 
 

 


               

 

 
 
7 0

 

               

Байт

       
 
15 8
 
7 0

 

               

Слово

               
 
31 24
 
23 16
 
15 8
 
7 0

 

               

Двойное слово

                               
 
63 56
 
55 48
 
47 40
 
39 32
 
31 24
 
23 16
 
15 8
 
7 0

 


               

Учетверенное слово

               
   
15 8
 
7 0
 
79 72
 
71 64
 

 


               

Десять байт

Описание типов данных в Ассемблере Intel

Для описания типов данных используются директивы резервирования и инициализации памяти:

- DB – 1 байт – 8 бит,

- DW – 2 байта – 16 бит,

- DD – 4 байта – 32 бита,

- DQ – 8 байт – 64 бита,

- DT – 10 байт – 80 бит.

Примечание. Дополнительными директивами являются директивы, описывающие данные длиной 6 байт (для дальнего указателя – 2 байта селектор и 4 байта смещение):

- DF – 6 байт – 48 бит,

- DP – 6 байт – 48 бит,

Примеры:

The_byte DB 5; 0... 255 (28-1)

The_word DW 3000; 0... 65 535 (216-1)

The_dword DD 12345678; 0... 4 294 967 295 (232-1)

The_qword DQ 1122334455667788; 0... (264-1)

The_ptr DP 112233445566; 0... (248-1)

При резервировании памяти можно задавать различное количество элементов данных, инициализируя их значения или не инициализируя, присваивая имя или не присваивая. Для описания символов в коде ASCII Ассемблер допускает записывать значения байт в кавычках.

Примеры:

DB?; один байт без инициализации и имени

DB 5, 0Fh; два байта без имени с инициализацией

DB 5,?,7; три байта, два с инициализацией, один – без

Five_bytes DB 0,0,0,0,0; область 5 байт, значения всех нулевые

The_ptr DB 1122334455; 0... (248-1)

Str DB ‘Строка текста’; 13 байт

DB ‘5’; один байт, равный 53 или 35h или ‘5’

DB 5; один байт, равный 5

При заполнении памяти повторяющимися значениями используется оператор dup:

Примеры:

Buffer DB 200h dup (0); буфер 512 байт инициализирован нулями.

String_buf DB 78 dup (‘ ‘); буфер приема строки заполнен пробелами.

К одним и тем же ячейкам памяти можно обращаться как к данным различных типов. Один из способов описания таких ячеек памяти предполагает использование директивы LABEL.

Примеры:

Bytes label byte

Words label word

DB 0,1,2,3,4,5; определены шесть байт или три слова

; слова равны: 0100h, 0302h, 0504h

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

Примеры:

b_or_w db 1,2,3,4; данные

mov al, byte ptr b_or_w; al:= 01

mov ax, word ptr b_or_w; ax:= 0201h

mov al, byte ptr b_or_w+3; al:= 04

mov ax, word ptr b_or_w+2; ax:= 0403h

 

w_or_b dw 0201h,0403h; те же данные

mov al,byte ptr w_or_b+3; al:= 04

mov ax,w_or_b+2; ax:= 0403h

Пример программы

Ниже приведен пример программы на языке Ассемблер с различными типами данных, описанными в сегменте данных. Сегмент данных выделен полужирным шрифтом.

 

 
 


На первой странице листинга программы, приведенной ниже, можно увидеть результаты трансляции рассматриваемой программы. Описанные в исходном модуле данные выделены.

 
 

 

 


На второй странице листинга приведена таблица символических имен с указанием их адресов. Так, адрес переменной x4 равен 0017h, т. е. находится в 23-ей ячейке относительно начала сегмента данных, который находится в группе DGROUP.

 
 


 

Вид модуля в отладчике AFD показан на рис.1.

 
 

Выделенная внизу область – это сегмент данных программы. Адреса данных складываются из двух шестнадцатеричных чисел: в левом столбце и верхней строке над данными. Так, начальный байт имеет адрес 0000h, а его значение равно 42h, или ‘B’ лат., первый символ строки String1 имеет адрес 0030h + 5h = 0035h, а его значение равно 53h или ‘S’ лат. Справа от шестнадцатеричного дампа памяти расположено ASCII-представление этих данных (символьное представление, удобное для чтения текстовых констант).

Рисунок 1

 
 

Сегмент данных в модуле приведен на рис.2. Показаны зарезервированные в исходном модуле области данных. Обратное по отношению с записью в исходном модуле расположение байтов – характерный эффект, связанный с представлением ячеек памяти в окне отладчика слева направо (от младших к старшим). Так, двойное слово x3, значение которого инициализировано шестнадцатеричной константой 12345678h, занимает байты с адресами 13, 14, 15, 16. При этом две младшие цифры числа (7 и 8) занимают младший байт с адресом 13, следующие две цифры (5 и 6) занимают следующий байт с адресом 14 и т.д. Строка текста в окне отладчика читается так же, как и в исходном модуле, т.к. расположение текста в памяти – от начала текста в младших адресах к концу текста в старших адресах – совпадает с естественным расположением читаемого текста слева направо (см. рис.1). Байты с адресами 3E, 3F, значения которых равны нулю, не инициализируются программой. Байты с адресами 40-5F занимают область, зарезервированную с использованием оператора dup.

Рисунок 2

Вид модуля в отладчике TurboDebuger 5.0 показан на рис.3.

 

Рисунок 3

 
 

 

Порядок выполнения работы

1. Создайте исходный модуль ggnn_dt1.asm, содержащий сегмент данных с переменными согласно варианту задания. Здесь gg – две последние цифры номера группы, nn – номер в группе.

2. Выполните трансляцию модуля в ggnn_dt1.exe

3. Посмотрите значения и расположение Ваших данных в листинге программы.

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

5. Просмотрите в окне дампа памяти отладчика все объявленные переменные.

6. Результаты отразите в отчете.

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

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

2. Фрагменты листинга программы с описанными данными.

3. Фрагмент окна отладчика с сегментом данных, в котором указанные данные имеют определенные в исходном модуле значения.

4. Словесное описание определенных в исходном модуле данных, фрагмента листинга, сегмента данных в окне отладчика, анализ полученных результатов.

5. Выводы.

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

№ вар. Тип данных Кол. Инициализ. Имя Примечание
  байт   нет да  
  байт   да нет  
  слово   да да  
  слово   нет нет  
  дв. слово   нет да  
  учетв. слово   да да  
  10 байт   да нет  
  строка   да да  
  символ   да да  
  байт   да да  
  слово   да да  
  байт   нет нет  
  слово   нет да  
  символ   да нет  
  дв. слово   да да  
  учетв. слово   да да  
  10 байт   да нет  
  строка   да да  
  байт   да нет  
  дв. слово   да да  
  байт   нет да  
  строка   да нет  
  слово   да да  
  10 байт   да да  
  слово   нет нет  
  учетв. слово   да да  
  символ   да нет  
  байт   да да  
  10 байт   да да  
  слово   да да  
  слово   нет нет  
  дв. слово   да да  
  строка   да нет  
  учетв. слово   да да  
  байт   нет да  
  символ   да нет  
  байт   да да  
  учетв. слово   да нет  
  байт   нет да  
  дв. слово   да да  
  10 байт   да да  
  слово   да нет  
  строка   да да  
  слово   нет нет  
  символ   да да  
  байт   да да  
  слово   да да  
  символ   да да  
  байт   нет да  
  слово   нет нет  
  дв. слово   да да  
  строка   да да  
  учетв. слово   да нет  
  10 байт   да да  
  байт   да нет  
  учетв. слово   да да  
  байт   нет нет  
  10 байт   да да  
  слово   да да  
  строка   да да  
  слово   нет нет  
  дв. слово   да да  
  символ   да нет  
  байт   да да  
  слово   да нет  
  байт   нет да  
  слово   нет да  
  учетв. слово   да нет  
  10 байт   да да  
  строка   да да  
  дв. слово   да да  
  символ   да нет  
  байт   да да  
  10 байт   да нет  
  байт   нет да  
  слово   да да  
  дв. слово   да нет  
  строка   да да  
  слово   нет да  
  учетв. слово   да да  
  символ   да да  
  байт   да да  
  слово   да нет  
  байт   нет да  
  10 байт   да да  
  строка   да нет  
  слово   нет да  
  дв. слово   да да  
  учетв. слово   да нет  
  символ   да да  

 

 

№ вар. Тип данных Кол. Инициализ. Имя Примечание
  байт   да да  
  байт   нет нет  
  слово   да да  
  строка   да да  
  учетв. слово   да да  
  слово   нет нет  
  10 байт   да да  
  дв. слово   да да  
  символ   да да  
  байт   да нет  
  учетв. слово   да да  
  байт   нет да  
  слово   да нет  
  строка   да да  
  10 байт   да да  
  слово   нет да  
  дв. слово   да нет  
  символ   да да  
  байт   да нет  
  дв. слово   да да  
  байт   нет да  
  слово   да да  
  строка   да да  
  слово   нет нет  
  символ   да да  
  учетв. слово   да нет  
  10 байт   да да  
  слово   да да  
  байт   нет да  
  байт   да да  
  слово   нет нет  
  10 байт   да нет  
  дв. слово   да да  
  строка   да да  
  учетв. слово   да да  
  символ   да нет  
  10 байт   да нет  
  байт   нет да  
  слово   да нет  
  строка   да да  
  слово   нет нет  
  дв. слово   да да  
  байт   да да  
  учетв. слово   да нет  
  символ   да да  

 

 

№ вар. Тип данных Кол. Инициализ. Имя Примечание
  байт   да нет  
  учетв. слово   да да  
  байт   нет да  
  слово   да да  
  символ   да нет  
  слово   нет да  
  10 байт   да нет  
  дв. слово   да да  
  строка   да да  
  строка   да да  
  байт   нет нет  
  слово   да да  
  10 байт   да нет  
  слово   нет да  
  дв. слово   да да  
  символ   да да  
  учетв. слово   да нет  
  байт   да да  
  дв. слово   да да  
  строка   да нет  
  байт   нет да  
  слово   да да  
  слово   нет нет  
  байт   да нет  
  учетв. слово   да да  
  символ   да да  
  10 байт   да да  
  символ   да нет  
  учетв. слово   да да  
  байт   нет да  
  слово   да да  
  10 байт   да да  
  слово   нет нет  
  строка   да да  
  дв. слово   да да  
  байт   да нет  
  байт   да да  
  10 байт   да да  
  дв. слово   да нет  
  байт   нет нет  
  слово   да да  
  слово   нет да  
  учетв. слово   да нет  
  строка   да да  
  символ   да да  

 

Примечание. Можно добавить произвольные данные по своему усмотрению.

Заключение

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

Литература

1. Абель П. Язык Ассемблера для IBM PC и программирования. – М.: Высш. шк., 1992. – 447 с.

2. Коффрон Дж. Технические средства микропроцессорных систем. М. Мир 1983г. - 344 с.

3. Коффрон Дж., В. Лонг. Расширение микропроцессорных систем. М. Машино-строение 1987г. - 320 с.

4. Морису, Э.Т. Есикава. Микро ЭВМ за три дня. М. Мир 1981г. - 194 с.

5. Уокерли Дж.. Архитектура и программирование микро ЭВМ. В 2-х кн. М. Мир 1984г. кн.1 - 486 с., кн. 2 - 341 с.

6. Гивонэ Д., Россер Р.. Микропроцессоры и микрокомпьютеры. Вводный курс. М. Мир 1983г. - 484 с.

7. Гилмор И.. Введение в микропроцессорную технику. М. Мир 1984г. - 334 с.

8. Лю Ю - Чжен, Гибсон Г.. Микропроцессоры семейства 8086/8088. М. Радио и связь 1987г. - 512с.

9. Морс С.П., Алберт Д.Д.. Архитектура микропроцессора 80286. М. Радио и связь 1990г.

10.Григорьев В.Л.. Микропроцессор i486. Архитектура и программирование (в 4-х книгах). – М., ГРАНАЛ, 1993. – с. 346 (кн.1), с. 382 (кн.2-4).

11.Григорьев В.Л.. Программирование однокристальных микропроцессоров. М. Энергоатомиздат 1987г. - 288 с.

12.Дао Л.. Программирование микропроцессора 8088. М. Мир 1988г. - 357 с.

13.Брамм П., Брамм Д.. Микропроцессор 80386 и его программирование. М. Мир 1990г. - 448 с.

14.Смит Б. Э., Джонсон М. Т.. Архитектура и программирование микропроцессора INTEL 80386 М. ТОО “Конкорд” 1992 г. 326 с.

15.Майко Г.В. Ассемблер для IBM PC. М.: Бизнес - Информ, Сирин 1997 г. - 212 с.

16.Пильщиков В.Н. Программирование на языке ассемблера IBM PC. М.: ДИАЛОГ - МИФИ, 1997. - 288 с.

 

 

Приложения

Приложение 1. Пример сегмента данных программы.

Еще один пример описания данных различных типов.

В исходном модуле определен сегмент данных:

.data

db 'Begin of DATAseg'

 

z1 db 12h

z2 dw 12h

z3 dd 12h

z4 dq 12h

z5 dt 12h

z6 dp 12h

z7 df 12h

 

s1 db 'String 1'

db '*'

db?

db?

 

b1 db 10h dup (12h)

 

В листинге сегмент данных получен в следующем виде:

 

7 0000 42 65 67 69 6E 20 6F+ db 'Begin of DATAseg'

8 66 20 44 41 54 41 73+

9 65 67

11 0010 12 z1 db 12h

12 0011 0012 z2 dw 12h

13 0013 00000012 z3 dd 12h

14 0017 0000000000000012 z4 dq 12h

15 001F 00000000000000000012 z5 dt 12h

16 0029 000000000012 z6 dp 12h

17 002F 000000000012 z7 df 12h

19 0035 53 74 72 69 6E 67 20+ s1 db 'String 1'

20 31

21 003D 2A db '*'

22 003E?? db?

23 003F?? db?

25 0040 10*(12) b1 db 10h dup (12h)

 

В окне отладчика сегмент данных имеет следующий вид:

 

0 1 2 3 4 5 6 7 8 9 A B C D E F |

DS:0000 42 65 67 69 6E 20 6F 66 20 44 41 54 41 73 65 67 |Begin of DATAseg

DS:0010 12 12 00 12 00 00 00 12 00 00 00 00 00 00 00 12 |................

DS:0020 00 00 00 00 00 00 00 00 00 12 00 00 00 00 00 12 |................

DS:0030 00 00 00 00 00 53 74 72 69 6E 67 20 31 2A 00 00 |.....Str ing 1*..

DS:0040 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 |................

 

 

Поделиться:





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



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