Дипломированных специалистов «Информатика и вычислительная техника»



Download 12,06 Mb.
Pdf ko'rish
bet61/357
Sana22.02.2022
Hajmi12,06 Mb.
#115195
TuriДиплом
1   ...   57   58   59   60   61   62   63   64   ...   357
Bog'liq
assembler uchebnik dlya vuzov 2-e izd YuRXUW1

 Атрибут класса сегмента (тип класса) — это заключенная в кавычки строка,
помогающая компоновщику определить нужный порядок следования сегмен-
тов при сборке программы из сегментов нескольких модулей. Компоновщик
объединяет вместе в памяти все сегменты с одним и тем же именем класса (имя
класса в общем случае может быть любым, но лучше, если оно отражает функ-
циональное назначение сегмента). Типичным примером использования имени
класса (обычно класса code) является объединение в группу всех сегментов кода
программы. С помощью механизма типизации класса можно группировать так-
же сегменты инициализированных и неинициализированных данных.
 Атрибут размера сегмента. Для процессоров i80386 и выше сегменты могут
быть
или 32-разрядными. Это влияет прежде всего на размер сегмента и по-
рядок формирования физического адреса внутри него. Далее перечислены воз-
можные значения атрибута:
П USE16 — сегмент допускает 16-разрядную адресацию. При формировании
физического адреса может использоваться только 16-разрядное смещение.
Соответственно, такой сегмент может содержать до 64 Кбайт кода или дан-
ных;
П USE32 — сегмент должен быть 32-разрядным. При формировании физиче-
ского адреса может использоваться 32-разрядное смещение. Поэтому такой
сегмент может содержать до 4 Гбайт кода или данных.
Все сегменты сами по себе равноправны, так как директивы SEGMENT и ENDS не
содержат информации о функциональном назначении сегментов. Для того чтобы
использовать их как сегменты кода, данных или стека, необходимо предваритель-
но сообщить транслятору об этом с помощью специальной директивы
фор-
мат которой показан на рис. 5.15. Эта директива сообщает транслятору, какой сег-


 Глава 5. Синтаксис ассемблера
мент к какому сегментному регистру привязан. В свою очередь, это позволяет транс-
лятору корректно связывать символические имена, определенные в сегментах.
Привязка сегментов к сегментным регистрам осуществляется с помощью операн-
дов этой директивы, в которых имя_сегмента должно быть именем сегмента, опре-
деленным в исходном тексте программы директивой
или ключевым сло-
вом NOTHING. Если в качестве операнда используется только ключевое слово
NOTHING, то предшествующие назначения сегментных регистров аннулируются,
причем сразу
всех
регистров. Ключевое слово NOTHING можно
также использовать вместо аргумента имя сегмента; в этом случае будет выборочно
разрываться связь между сегментом с именем имя сегмента и соответствующим сег-
ментным регистром.
Рис.
Директива ASSUME
Рассмотренные ранее директивы сегментации используются для оформления
программы в трансляторах MASM и TASM. Поэтому их называют стандартными
директивами сегментации.
Для простых программ, содержащих по одному сегменту для кода, данных и сте-
ка, хотелось бы упростить их описание. Для этого в трансляторы MASM и TASM
была введена возможность использования упрощенных директив сегментации. При
этом возникла проблема, связанная с тем, что необходимо было как-то компенси-
ровать невозможность напрямую управлять размещением и комбинированием сег-
ментов. Для этого совместно с упрощенными директивами сегментации стали ис-
пользовать директиву указания модели памяти MODEL, которая частично стала
управлять размещением сегментов и выполнять функции директивы ASSUME (по-
этому при введении в программу упрощенных директив сегментации директиву


Директивы сегментации
ASSUME можно не указывать). Директива MODEL связывает сегменты, которые при
наличии упрощенных директив сегментации имеют предопределенные имена,
с сегментными регистрами (хотя все равно придется явно инициализировать
регистр DS).
Для сравнения приведем два листинга с программами на ассемблере. Функцио-
нально они одинаковы и выводят на консоль сообщение: «Hello World! No
and
bomb! Let's live friendly and learn assembler
Листинг 5.1 содержит про-
грамму со стандартными директивами сегментации, а листинг 5.2, соответствен-
но, — с упрощенными.
Листинг
Использование стандартных директив сегментации
data segment para public
message db
World! No war and
assembler language. $'
data ends
stk segment stack
db 256
('?')
stk ends
code segment para public
main proc
assume
mov
mov
mov
mov
message
int 21h
mov
int 21h
main endp
code ends
end main
bomb! Let us live friendly and learn
сегмент стека
начало сегмента кода
начало процедуры main
адрес сегмента данных в регистр ах
ах в ds
вывод сообщения на экран
пересылка
в регистр ах
вызов прерывания с номером 21h
конец процедуры main
конец сегмента кода
конец программы с точкой входа main

Download 12,06 Mb.

Do'stlaringiz bilan baham:
1   ...   57   58   59   60   61   62   63   64   ...   357




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish