- •Уже знаем
- •Директивы сегмента
- ••;Простая программа с тремя сегментами ;Укажем соответствие сегментных регистров сегментам assume CS:code,DS:data
- ••1. Какие команды заставляют ассемблер печатать заголовок в началекаждой страницы листинга и делать
- •1.Создайте LST-файл.
- •Сегментация памяти
- •Экзотическая особенность представления чисел в ПК
- •Директивы
- •Директива присваивания
- •Выражения
- •Старшинство операторов
- •Оператор указания типа
- •• Задания на 5-7 слайдах
Уже знаем
или
Директивы сегмента
•Имя SEGMENT {счетный} {комбинированный} {‘класс’}
•Имя ENDS
•В качестве счетного типа может использоваться
»Byte
»Word
»Para
»Page
•В качестве комбинированного типа:
•Public
•Stack
•Common
•Memory
•At адрес
•;Простая программа с тремя сегментами ;Укажем соответствие сегментных регистров сегментам assume CS:code,DS:data
;Опишем сегмент команд
code segment ;Откроем сегмент команд begin: mov AX,data ;Настроим DS
mov DS,AX ;на сегмент данных; Выведем на экран строку текста
mov АН,09h ;Функция DOS вывода на экран mov DX,offset msg ;Адрес выводимой строки int 21h ;Вызов DOS
;Завершим программу
mov AX,4C00h ;Функция DOS завершения программы int 21h ;Вызов DOS
code ends ;Закроем сегмент команд ;Опишем сегмент данных
data segment ;Откроем сегмент данных
msg db "Программа работает!$' ;Выводимая строка data ends ;Закроем сегмент данных
;Опишем сегмент стека
stk segment stack ;Откроем сегмент стека db 256 dup (?) ;Отводим под стек 256 байт stk ends ;Закроем сегмент стека
end begin ;Конец текста с точкой входа
•1. Какие команды заставляют ассемблер печатать заголовок в началекаждой страницы листинга и делать прогон листа?
•2. Какие из следующих имен неправильны: а) PC_AT, б) $50, в) @$_Z,г) 34B7, д) AX?
•3. Какое назначение каждого из трех сегментов, описанных в этойглаве?
•4. Что конкретно подразумевает директива END, если она завершает а)программу, б) процедуру, в) сегмент?
•5. Укажите различия между директивой и командой.
•6. Укажите различия в назначении RET и END.
•7. Для сегментов кода, данных и стека даны имена CDSEG, DATSEG и STKSEG соответственно. Сформируйте директиву ASSUME.
•8. Напишите три команды для инициализации стека адресом в DS инулевым адресом.
1.Создайте LST-файл.
2.Вызовите DEBUG файл .EXE
3. Для просмотра сегмента стека введите |
D SS:0 |
4.Введите R для просмотра содержимого регистров и
5.выполните прогpамму с помощью команды T (трассировка). Обратите внимание на воздействие двухкоманд PUSH на стек - в вершине стека теперь находится содержимое регистра DS и нулевой адрес. В процессе пошагового выполнения программы обратите внимание на содержимое регистров. Когда вы дойдете до команды RET, можно ввести Q(Quit - выход) для завершения работы отладчика.
Сегментация памяти
•Производить обмен с памятью можно только относительно одного из 4х этих сегментных регистров. Таким образом, физический адрес числа или команды вычисляется центральным процессором по формуле
где SEG – значение сегментного регистра, а A –заданное в команде смещение. Физический адрес берётся по модулю 220, чтобы он не
вышел за максимальный адрес памяти.