Лабораторная работа №3 Объявление и инициализация простых типов данных. Представление данных в памяти компьютера icon

Лабораторная работа №3 Объявление и инициализация простых типов данных. Представление данных в памяти компьютера




НазваЛабораторная работа №3 Объявление и инициализация простых типов данных. Представление данных в памяти компьютера
Дата03.08.2012
Розмір82.6 Kb.
ТипЛабораторная работа

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


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


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


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


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


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


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


Данные простого типа:

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

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

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

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


Очень важно уяснить себе порядок размещения данных в памяти. Он напрямую связан с логикой работы микропроцессора с данными^ . Микропроцессоры Intel требуют следования данных в памяти по принципу: младший байт по младшему адресу.


ASM предоставляет очень широкий набор средств описания и обработки данных, который вполне сравним с аналогичными средствами некоторых языков высокого уровня. Для описания простых типов данных в программе используются специальные директивы резервирования и инициализации данных, которые по сути являются указаниями транслятору на выделение определенного объема памяти. Если проводить аналогию с языками высокого уровня, то директивы резервирования и инициализации данных являются определениями переменных. Машинного эквивалента этим директивам нет; При работе с этими директивами и с дампами памяти не забывайте о принципе <младший байт по младшему адресу>, в соответствии с которым при сохранении данных в памяти младшая часть значения всегда записывается перед старшей частью.

Все директивы позволяют задавать строковые значения, но в памяти они могут выглядеть не так, как вы их описали в директиве. Поэтому старайтесь использовать для определения строк директиву db. Задаваемые таким образом строки должны заключаться в кавычки. Эти кавычки могут быть одинарными (' ') или двойными (""). Если задать внутри строки два таких ограничителя подряд, то это будет означать, что данная кавычка должна

быть частью строки.

^

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


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


[имя] директива dup_выражение [,dup_выражение]


Синтаксис параметра dup_выражение может быть следующим:

  • ? (неинициализированные данные)

  • значение (значение элемента данных)

  • количество_повторов DUP(dup_выражение [,dup_выражение ]) (объвление и инициализация массивов)


К директивам объявления и инициализации простых данных относятся:


DВ (Define Byte) - определить байт

Директивой db можно задавать следующие значения:

  • выражение или константу, принимающую значение из диапазона:

  • для чисел со знаком -128...+127;

  • для чисел без знака 0...255;

  • 8-битовое относительное выражение, использующее операции HIGH и LOW;

  • символьную строку из одного или более символов. Строка заключается в кавычки. В этом случае определяется столько байт, сколько символов в строке.


DW (Define Word) -- определить слово

Директивой dw можно задавать следующие значения:

- выражение или константу, принимающую значение из диапазона:

для чисел со знаком -32768...32767;

для чисел без знака 0...65535;

- О выражение, занимающее 16 или менее бит, в качестве которого может

выступать смещение в 16-битовом сегменте или адрес сегмента;

- 1- или 2-байтовая строка, заключенная в кавычки.


DD (Define Double word) - определить двойное слово

Директивой dd можно задавать следующие значения:

- выражение или константу, принимающую значение из диапазона:

для 8086:

для чисел со знаком -32768...+32767;

для чисел без знака 0...65533;

для i386 и выше:

для чисел со знаком -2147483648...+2147483647;

для чисел без знака 0...4 294 967 295;

- относительное или адресное выражение, состоящее из 16-битового адреса

сегмента и 16-битового смещения;

- строку длиной до 4 символов, заключенную в кавычки.


DQ (Define Quarter word) - определить учетверенное слово

Директивой DQ можно задавать следующие значения:

- выражение или константу, принимающую значение из диапазона:

для МП i8086:

для чисел со знаком -32 768...+32 767;

для чисел без знака 0...65 535;

для МП i386 и выше:

для чисел со знаком -2 147 483 648... +2 147 483 647;

для чисел без знака 0...4 294 967 295;

- относительное или адресное выражение, состоящее из 32 или менее бит

(для i80386) или 16 или менее бит (для младших моделей

микропроцессоров Intel);

- константу со знаком из диапазона -2**63...2**63 - 1;

- константу без знака из диапазона 0...2**64 - 1;

- строку длиной до 8 байт, заключенную в кавычки.


DF (Define Far word) - определить указатель дальнего слова

DP (Define Pointer) /I определить указатель 48 бит


Директивами DF и DP можно задавать следующие значения:

- выражение или константу, принимающую значение из диапазона:

для 8086:

для чисел со знаком -32 768...+32 767;

для чисел без знака 0...65 535;

для i386 и выше:

для чисел со знаком -2 147 483 648...+2 147 483 647;

для чисел без знака 0...4 294 967 295;

- относительное или адресное выражение, состоящее из 32 или менее бит

(для i80386) или 16 или менее бит (для младших моделей микропроцессо-

ров Intel);

- адресное выражение, состоящее из 16-битового сегмента и 32-битового

смещения;

- константу со знаком из диапазона -2**47...2**47 - 1;

- константу без знака из диапазона 0...2**48 - 1;

- строку длиной до 6 байт, заключенную в кавычки.


DT (Define Ten Bytes) - определить 10 байт

Директивой DT можно задавать следующие значения:

- выражение или константу, принимающую значение из диапазона:

для 18086:

для чисел со знаком -32 768...+32 767;

для чисел без знака 0...65 535;

для i386 и выше:

для чисел со знаком -2 147 483 648... +2 147 483 647;

для чисел без знака 0...4 294 967 295;

- относительное или адресное выражение, состоящее из 32 или менее бит (для

i80386) или 16 или менее бит (для младших моделей);

- адресное выражение, состоящее из 16-битового сегмента и 32-битового

смещения;

- константу со знаком из диапазона -2**79...2**79 - 1;

- константу без знака из диапазона 0...2**80 - 1;

- строку длиной до 10 байт, заключенную в кавычки;

- упакованную десятичную константу в диапазоне 0...99 999 999 999 999 999 999.


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

area dw 128 dup(?) ;резервируется память объемом 128 слов

string db 50 dup(‘*’) ;строка заполняется кодом символа ‘*’

array dw 256 dup(128) ;массив из 256 слов инициализ. числом 128

db 3 dup(5 dup(8)) ;15 восьмерок


В Turbo Assembler есть две директивы, которые можно использовать для присвоения значения идентификатору: EQU и “=”. При использовании директивы EQU можно присваивать идентификаторам как строковые, так числовые значения:


имя EQU выражение


Здесь «выражение» может быть псевдонимом, числом или строкой

psevd equ ax, @data ;псевдоним

numb equ 23*5 ;число

str equ ‘my string’ ;строка


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

Директива = применяется только для назначения численного значения.


имя = выражение


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


var1=45

var2=var1+5*34-21

var1=50

Директивы EQU и “=” не резервируют память.


Примеры:

Листинг 1. Пример применения директив определения данных

dat segment para 'data'

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

v1db db ? ;не инициализировано

v2db db 'Ваша фамилия' ;символьная строка

v3db db 56 ;десятичная константа

v4db db 04fh ;шестнадцатиричная константа

v5db db 0110100b ;двоичная константа

v6db db 1,'dat','name',42 ;таблица

v7db db 8 dup(0) ;восемь нулей

;определение слова

v1dw dw aff3h ;шестнадцатиричная константа

v2dw dw 01101111 ;двоичная константа

v3dw dw v5db ;адресная константа

v4dw dw 24,5,7 ;3 константы

v5dw dw 3 dup(*) ;3 звездочки

;определение двойного слова

v1dd dd ? ;не определено

v2dd dd 'FAdf' ;символьная строка

v3dd dd 08234 ;десятичная константа

v4dd dd v3dw-v4db ;разность адресов

v5dd dd 017h,05fh ;две константы

;определение учетверенного слова

v1dq dq ? ;не определено

v2dq dq a83dh ;константа

;определение десяти байтов

v1dt dt 'Family' ;символьная константа

d1 equ 25

d2 = v3db

d1 equ d2

dat ends

end


Любой переменной, объявленной с помощью директив описания простых данных ассемблер присваивает три атрибута:

  1. Сегмент (seg) - адрес начала сегмента, содержащего переменную.

  2. Смещение (offset) в байтах от начала сегмента с переменной.

  3. Тип (type) - определяет количество памяти, выделяемой переменной в соответствии с директивой объявления данных.

Получить и использовать значение этих атрибутов в программе можно с помощью операторов ассемблера seg, offset, type


Листинг 2. Пример использования директив резервирования и инициализации данных (использованы директивы упрощенного описания сегментов)

masm

model small

.stack 100h

.data

message db 'Запустите эту программу в отладчике','$'

perem_1 db 0f1h

perem_2 dw b7fh

perem_3 dd 0f54d567ah

mas db 10 dup (' ')

pole_1 db 5 dup (?)

adr dw perem_3

adr_full dd perem_3

fin db 'Конец сегмента данных программы $'

.code

start:

mov ax,@data

mov ds,ax

mov ah,09h

mov dx,offset message

int 21h

mov ax,4c00h

int 21h

end start

^

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





  1. Определите и запишите в протокол шестнадцатеричный объектный код для следующих директив резервирования памяти:

db 'Ваше имя'

dw Ваш год рождения + номер в группе

db ‘?' ;вместо вопроса подставьте дату вашего рождения

db день рождения, месяц рождения.


  1. .Наберите в редакторе листинг 1. Откомпилируйте программу с помощью TASM, исправьте ошибки и объясните их в протоколе. Получите файл листинга. Изучите его и ответьте на следующие вопросы

1) сколько байт занимает в памяти переменная v6db? Запишите ее объектный код

2) запишите значение переменных v3dw и v4dd

3) запишите в протокол объектный код для v1dw

4) запишите объектный код для v2dq

  1. .Наберите в редакторе листинг 2. Откомпилируйте ее с помощью TASM. Получите .ЕХЕ файл. При компиляции и компоновке используйте опции сохранения отладочной информации.. Загрузите ЕХЕ-файл в Turbo Debuger и выведите дамп памяти. Запишите в протокол:

  • Структуру памяти загруженной программы (содержимое сегментных регистров)

  • адрес сегмента DS после его инициализации значением адреса сегмента данных

  • обьектный код для всех переменных в формате:
    Имя переменной = значение переменной-> соответствующий ей объектный код

  1. Запишите в протокол область данных заданную описанием:

db 2 dup (3 dup(2,6),8)

Схожі:

Лабораторная работа №3 Объявление и инициализация простых типов данных. Представление данных в памяти компьютера iconБаза данных – это совокупность взаимосвязанных, хранящихся вместе данных, с той минимальной избыточностью, позволяющей использовать эти данные в нескольких приложениях. Реляционные базы данных
Знакомство с субд ms access: работа с существующей базой данных, фильтры по данным
Лабораторная работа №3 Объявление и инициализация простых типов данных. Представление данных в памяти компьютера iconЛабораторная работа 4 Предложение select в sql oracle. Основные возможности Содержание Цели лабораторной работы 2 Теоретические основы 2
Приобрести практический опыт по поиску данных в таблицах базы данных с использованием sql*Plus
Лабораторная работа №3 Объявление и инициализация простых типов данных. Представление данных в памяти компьютера iconЛабораторная работа №11 Знакомство с субд ms access: работа с существующей базой данных, фильтры по данным. Вариант 11 Скопировать базу данных «Борей»
Ть базу данных «Борей» (файл nwind. Mdb) из папки M:\msoffice\Office\Samples в свою рабочую папку. Изменить свойства файла: сделать...
Лабораторная работа №3 Объявление и инициализация простых типов данных. Представление данных в памяти компьютера iconЛабораторная работа №11 Знакомство с субд ms access: работа с существующей базой данных, фильтры по данным. Вариант 12 Скопировать базу данных «Борей»
Ть базу данных «Борей» (файл nwind. Mdb) из папки M:\msoffice\Office\Samples в свою рабочую папку. Изменить свойства файла: сделать...
Лабораторная работа №3 Объявление и инициализация простых типов данных. Представление данных в памяти компьютера iconЛабораторная работа №11 Знакомство с субд ms access: работа с существующей базой данных, фильтры по данным. Вариант 15 Скопировать базу данных «Борей»
Ть базу данных «Борей» (файл nwind. Mdb) из папки M:\msoffice\Office\Samples в свою рабочую папку. Изменить свойства файла: сделать...
Лабораторная работа №3 Объявление и инициализация простых типов данных. Представление данных в памяти компьютера iconЛабораторная работа №11 Знакомство с субд ms access: работа с существующей базой данных, фильтры по данным. Вариант 10 Скопировать базу данных «Борей»
Ть базу данных «Борей» (файл nwind. Mdb) из папки M:\msoffice\Office\Samples в свою рабочую папку. Изменить свойства файла: сделать...
Лабораторная работа №3 Объявление и инициализация простых типов данных. Представление данных в памяти компьютера iconЛабораторная работа Использование редактора запросов sql borland sql explorer(TM) для знакомства с основными объектами баз данных. Требования к программному обеспечению
...
Лабораторная работа №3 Объявление и инициализация простых типов данных. Представление данных в памяти компьютера icon1 Создание базы данных
Для создания новой базы данных нужно при открытии ms access выбрать опцию Новая база данных. В появившемся диалоговом окне указать...
Лабораторная работа №3 Объявление и инициализация простых типов данных. Представление данных в памяти компьютера iconЛабораторная работа Синхронизация idef0 и dfd диаграмм бизнес процесса предприятия со структурой реляционной базы данных, на примере case-систем bpwin/erwin Требования к программному обеспечению
Лабораторная работа Синхронизация idef0 и dfd диаграмм бизнес процесса предприятия со структурой реляционной базы данных, на примере...
Лабораторная работа №3 Объявление и инициализация простых типов данных. Представление данных в памяти компьютера iconИспользование списка в качестве базы данных
В microsoft Excel в качестве базы данных можно использовать список. При выполнении обычных операций с данными, например, при поиске,...
Додайте кнопку на своєму сайті:
Документи


База даних захищена авторським правом ©zavantag.com 2000-2013
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації
Документи