Мегаобучалка Главная | О нас | Обратная связь


Вся запись занимает слово)



2018-07-06 345 Обсуждений (0)
Вся запись занимает слово) 0.00 из 5.00 0 оценок




Год, записанный двумя последними цифрами 26<Ymax= 99< 27

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

Начальное значение должно вписываться в отведённое ему место при описании записи.

Приоритетными являются значения начальные.

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

Определенное директивой record имя типа (Trec, TData) используется далее как директива для описания переменных –записей такого типа.

имя записи имя типа записи <начальные значения>,

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

Начальными значениями могут быть:

1) константное выражение,

2) знак ?,

3) пусто

В отличие от структуры, знак ? определяет нулевое начальное значение, а «пусто», как и в структуре, определяет начальное значение равным значению по умолчанию. Например:

Rec1 TRec< 3, > ; 7 6 A B 0

0 0 3 7

Rec2 TRec< , ? > 0 0 0 0

Dat1 TData< 80, 7, 4 > ; 15 Y M D 0

80 7 4

также , как и для структур:

Dat1 TData< 00, , > == Dat1 TData< 00 >

Dat2 TData< , , > == Dat2 TData<>

Одной директивой можно описать массив записей, используя несколько параметров в поле операндов или конструкцию повторения, например,

MDatTData 100 Dup ( <> )

Описали 100 записей с начальными значениями, равными принятыми по умолчанию.

Со всей записью в целом можно работать как обычно с байтами или со словами, т.е. можно реализовать присваивание Rec1 = Rec2 :

MovAL, Rec2

MovRec1, AL

Оператор width

Для работы с отдельными полями записи существуют специальные операторы width и mask.

width<имя поля записи>

width<имя записи или имя типа записи>

Значением оператора width является размер в битах поля или всей записи в зависимости от операнда.

Oператорmask имеет вид:

Mask<имя поля записи>

Mask<имя записи или имя типа записи>

Значением этого оператора является «маска» - это байт или слово, в зависимости от размера записи, содержащее единицы в тех разрядах, которые принадлежат полю или всей записи, указанных в качестве операнда, и нули в остальных, не используемых разрядах. Например:

mask A = 00111000b

mask B = 00000111b

mask Y = 1111111000000000b

mask Rec1 = mask TRec = 00111111b

Этот оператор используется для выделения полей записи.

Пример. Выявить всех родившихся 1-го числа, для этого придется выделять поле D и сравнивать его значение с 1-ей.

m1: -------------------------

Mov AX, Dat1

andAX, maskDвыделяем разряды относящиеся к дню

Cmp AX, 1

Je yes

no: ---------------------

---------------------
jmp m1
yes: ------------------------

При работе с записями, ассемблер имени любого поля приписывает в качестве значения число, на которое нужно сдвинуть вправо это поле, чтобы оно оказалось прижатым к правой границе ячейки, занимаемой записью. Так значением поля D для записи типа

TData является ноль,

для поля M – 5, для поля Y – 9.

Значения имен полей используются в командах сдвига, например, определить родившихся в апреле можно так:

m1: ----------------------------

mov AX, Dat ; AX = Y M D

and AX, mask M ; AX = 0 M 0

mov CL, M ; CL = 5

shr AX, CL ; AX = 0 0 M

cmp AX, 4 ; M = 4 ?

Je yes

no: ------------------

Jmp m1

----------------------

yes: --------------------------

Подпрограммы в ассемблере:

Основная программа и другие в ассемблере оформляется как процедура дальнего вызова FAR, к которой обращается ОС или отладчик, выходим из которой с помощью ret. Программа, оформленная как процедура, к которой обращение происходит из ОС, заканчивается командой возврата ret.

Подпрограмма, как вспомогательный алгоритм, к которому возможно многократное обращение помощью команды call, тоже оформляется как процедура с помощью директив proc и endp. Структуру процедуры можно оформить так:

<имя процедуры>proc<параметр>

<тело процедуры>

Ret

<имя процедуры>endp

В Ассемблере один тип подпрограмм – процедура.

Размещать ее можно в любом месте программы, но так, чтобы управление на нее не попадало случайно, а только по команде call. Поэтому описание ПП принято располагать в конце программного сегмента (после последней исполняемой команды), или вначале его – перед первой исполняемой команды. Если программа содержит большое количество подпрограмм, то ПП размещают в отдельном кодовом сегменте. Тогда структуру программы с использованием ПП можно представлять в следующем виде:

Замечания:

1) После имени в директивах proc и endp двоеточие не ставится, ноимя считается меткой, адресом первой исполняемой командыпроцедуры.

2) Метки, описанные в ПП, не локализуются в ней, поэтому они должны быть уникальными в рамках всей программы.

3) Параметр в директиве начала процедуры один – FAR или NEAR

Основная проблема при работе с ПП в Ассемблере – это передача параметров и возврат результатов в вызывающую программу.

Существуют различные способы передачи параметров:

1) по значению,

2) по ссылке,

3) по возвращаемому значению,

4) по результату,

5) отложенным вычислением.

Параметры можно передавать:

1) через регистры,

2) в глобальных переменных,

3) через стек,

4) в потоке кода,

5) в блоке параметров.

Передача параметров через регистры – наиболее простой способ. Вызывающая программа записывает в некоторые регистры фактические параметры, ПП оттуда их извлекает, использует и возможно записывает в них результаты. Примерами использования этого метода являются вызовы некоторых прерываний OC и BIOS.



2018-07-06 345 Обсуждений (0)
Вся запись занимает слово) 0.00 из 5.00 0 оценок









Обсуждение в статье: Вся запись занимает слово)

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (345)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)