Сист. прогр. Ч1 (Методические указания к выполнению лабораторных работ по СПО), страница 8

2018-01-12СтудИзба

Описание файла

Файл "Сист. прогр. Ч1" внутри архива находится в следующих папках: Методические указания к выполнению лабораторных работ по СПО, сист прогр лабы. Документ из архива "Методические указания к выполнению лабораторных работ по СПО", который расположен в категории "". Всё это находится в предмете "операционные системы" из 7 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "операционные системы" в общих файлах.

Онлайн просмотр документа "Сист. прогр. Ч1"

Текст 8 страницы из документа "Сист. прогр. Ч1"

Объем СОМ-файла ограничен 64 Кбайт.

Файл в СОМ-формате меньше, чем соответствующий ЕХЕ- файл.

Программа, написанная для выполнения в СОМ-формате, не содержит стека и сегмента данных и не требует инициализации регистра DS.

Программа, написанная для выполнения в СОМ-формате,

использует директиву ORG 100H после директивы SEGMENT для выполнения с адреса после префикса программного сегмента.

  • Программа EXE2BIN преобразует ЕХЕ-файл в СОМ-файл, обусловленный указанием типа СОМ во втором перанде.

  • Операционная система DOS определяет стек для СОМ-
    программы или в конце программы, если позволяет размер,
    или в конце памяти. .

ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ

Каков максимальный размер СОМ-файла?

Какие сегменты можно определить в программе, которая будет преобразована в СОМ-файл?

Определение стека в СОМ-файлах отсутствует. Как ведет себя СОМ-файл с учетом этого обстоятельства?

Программа в результате компоновки получила имя SAMPLE.EXE. Напишите команду DOS для преобразования ее в СОМ-файл.

6. КОМАНДЫ ПЕРЕХОДА

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

Безусловный переход: JMP

Цикл: LOOP

Условный переход: Jnnn (больше, меньше, равно)

Вызов процедуры: CALL

Заметим, что имеется три типа адресов: SHORT, NEAR и FAR. Адресация SHORT используется при циклах, условных переходах и некоторых безусловных переходах. Адресация NEAR и FAR используется для вызовов процедур (CALL) и безусловных переходов, которые не квалифицируются как SHORT. Все три типа передачи управления воздействуют на содержимое регистра IP; тип FAR- также изменяет регистр CS.

КОМАНДА JMP

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

В СОМ-программе на рис.6.1 используется команда JMP. В регистры АХ, ВХ, и СХ загружается значение 1, и затем в цикле выполняются следующие операции:

прибавить 1 к регистру АХ,

прибавить АХ к ВХ,

удвоить значение в регистре СХ.

Повторение цикла приводит к увеличению содержимого регистра АХ: 1,2,3,4..., регистра ВХ: 1,3,6,10..., регистра СХ: 1,2,4,8... Начало цикла имеет метку, в данном случае А20: - двоеточие обозначает, что метка находится внутри процедуры (в данном случае BEGIN) в сегменте кода. В конце цикла находится команда

JMP A20,

указывающая на то, что управление должно быть передано команде с меткой А20. Обратите внимание, адресная метка в операнде команды указывается без двоеточия. Данный цикл не имеет выхода и приводит к бесконечному выполнению - такие циклы обычно не используются.

page 60,132

TITLE EXJUMP (СОM) ; Организация цикла с помощью JMP CODESG SEGMENT PARA 'Code'

ASSUME: CS:CODESG, DS:CODESG, SS:CODESG

ORG 100H

0100 MAIN PROC NEAR

0100 В8 0001 MOV AX, 01

0103 ВВ 0001 MOV BX, 01

0106 В9 0001 MOV CX,01

0109 А20:

0109 05 0001 ADD AX, 01

010C 03 D8 ADD BX.,AX

010Е Dl E1 SHL CX,1

0110 ЕВ F7 JMP A20

0112 MAIN ENDP

0112 CODESG ENDS

END MAIN



Рис.6.1. Использование команды JMP

Метку можно кодировать на одной строке с командой:

А20: ADD AX,01

или на отдельной строке:

А20:

ADD AX,01

В обоих случаях адрес А20 указывает на первый байт команды ADD. Двоеточие в метке А20 означает тип метки - NEAR. Запомните, что отсутствие двоеточия в метке является частой ошибкой. В нашем примере А20 соответствует -9 байтам от команды JMP, в чем можно убедиться по объектному коду команды - EBF7. Здесь ЕВ представляет собой машинный код для короткого перехода JMP, a F7-отрицательное значение смещения

(-9). Команда JMP прибавляет F7 к командному указателю (IP), который содержит адрес команды после JMP (0112):

Дес. Шест.

Командный указатель: 274 112
Адрес в команде JMP: -9 F7 (двоичное
дополнение)

Адрес перехода: 265 109

В результате сложения получается адрес перехода - 109Н. Проверьте по листингу программы, что относительный адрес метки действительно соответствует 109Н. Соответственно операнд в команде JMP для перехода вперед имеет положительное значение. Команда JMP для перехода в пределах от -128 до +127 байт имеет тип SHORT. Ассемблер генерирует в этом случае однобайтовый операнд в пределах от 00 до FF. Команда JMP, превосходящая эти пределы, получает тип FAR, для которого генерируются другой машинный код и двухбайтовый операнд. Ассемблер в первом просмотре исходной программы определяет длину каждой команды. Однако, команда JMP может быть длиной два или три байта. Если к моменту просмотра команды JMP ассемблер уже вычислил значение операнда (при переходе назад)

А50:

………………..

JMP A50

то он генерирует двухбайтовую команду. Если ассемблер еще не вычислил значение операнда (при переходе вперед):

JMP A90

………..

А90:

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

JMP SHORT A90

………

А90:

В качестве упражнения введите программу, проассемблируйте ее, скомпонуйте и переведите в СОМ-формат. Определение данных не требуется, поскольку непосредственные операнды генерируют все необходимые данные. Используйте отладчик DEBUG для пошагового выполнения СОМ-модуля и просмотрите несколько повторений цикла. Когда регистр АХ будет содержать 08, ВХ и СХ увеличатся до 24Н (36) и З0Н (128) соответственно. Для выхода из отладчика используйте команду Q.

КОМАНДА LOOP

Команда JMP в примере на рис.6.1 реализует бесконечный цикл. Но более вероятно подпрограмма должна выполнять определенное количество циклов. Команда LOOP, применяемая в этом случае, использует начальное значение в регистре СХ. В каждом цикле команда LOOP автоматически уменьшает содержимое регистра СХ на 1. Пока значение в СХ не равно нулю, управление передается по адресу, указанному в операнде, и если в СХ будет 0, управление переходит на следующую после LOOP команду.

page 60,132

TITLE EXLOOP (СОM) ; Организация цикла командой LOOP
0000 CODESG SEGMENT PARA 'Code'

ASSUME CS: CODESG, DS: CODESG, SS: CODESG
0100 ORG 100H

0100 BEGIN PROC NEAR

0100 B8 0001 MOV AX, 01 ; Инициализация АХ,

0103 BB 0001 MOV BX, 01 ; BX,

0106 BA 0001 MOV DX, 01 ; и DX

0109 B9 OOOA MOV CX, 10 ; Число циклов

010C A20:

010C 40 INC AX ; Прибавить 01 к АХ

0100 03 D8 ADD BX, AX ; Прибавить АХ к ВХ

010F D1 E2 SHL DX, l ; Удвоить DХ

0111 Е2 F9 LOOP A20 ; Уменьшить СХ и повторить

; цикл, если не нуль

0113 C3 RET ; Завершить работу

0114 BEGIN ENDP

0114 COOESG ENDS

END BEGIN

Рис. 6.2. Использование команды LOOP

Программа на рис. 6.2, иллюстрирующая использование команды LOOP, выполняет действия, аналогичные приведенным в примере на рис.6.1, за исключением того, что после десяти циклов программа завершается. Команда MOV инициализирует регистр СХ значением 11. Так как команда LOOP использует регистр СХ, то в программе для удвоения начального значения 1 вместо регистра СХ используется DX. Команда JMP A20 заменена командой LOOP, и для эффективности команда ADD AX,01 заменена командой INC АХ (увеличение АХ на 1). Аналогично команде JMP, операнд команды LOOP определяет расстояние от конца команды LOOP до адреса метки А20, которое прибавляется к содержимому командного указателя. Для команды LOOP это расстояние должно быть в пределах от -128 до +127 байт. Если операнд превышает эти границы, то ассемблер выдаст сообщение "Relative jump out of range" (Превышение относительной границы перехода).

Для проверки команды LOOP рекомендуется изменить соответствующим образом программу, приведенную на рис.6.1, выполнить ее ассемблирование, компоновку и преобразование в СОМ-файл. Для трассировки всех десяти циклов используйте отладчик DEBUG. Когда значение в регистре СХ уменьшится до нуля, содержимое регистров АХ, ВХ и DX будет соответственно 000ВН, 0042Н и 0400Н. Для выхода из отладчика введите команду Q.

Дополнительно существует две разновидности команды LOOP - это LOOPE (или LOOPZ) и LOOPNE (или LOOPNZ). Обе команды также уменьшают значение регистра СХ на 1. Команда LOOPE передает управление по адресу операнда, если регистр СХ имеет ненулевое значение и флаг нуля установлен (ZF= 1). Команда LOOPNE передает управление по адресу операнда, если регистр СХ имеет ненулевое значение и флаг нуля сброшен (ZF = 0).

ФЛАГОВЫЙ РЕГИСТР

Следующий материал данной главы требует более детального ознакомления с флаговым регистром. Этот регистр содержит 16 бит флагов, которые управляются различными командами для индикации состояния операции. Во всех случаях флаги сохраняют свое значение до тех пор, пока другая команда не изменит его. Флаговый регистр содержит следующие девять используемых битов (звездочками отмечены неиспользуемые биты):

Номер бита

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

Флаг

*

*

*

*

O

D

I

T

S

Z

*

A

*

P

*

C



Рассмотрим эти флаги в последовательности справа налево,

CF (Carry Flag - флаг переноса). Содержит значение "переносов" (0 или 1) из старшего разряда при арифметических операциях и некоторых операциях сдвига и циклического сдвига .

PF (Parity Flag - флаг четности). Проверяет младшие восемь битов результатов операций над данными. Нечетное число битов приводит к установке этого флага в 0, а четное - в 1. Не следует путать флаг четности с битом контроля на четность.

AF (Auxiliary Carry Flag - вспомогательный флаг переноса).

Устанавливается в 1, если арифметическая операция приводит к переносу четвертого справа бита (бит номер 3) в регистровой однобайтовой команде. Данный флаг имеет отношение к арифметическим операциям над символами кода ASCII и к десятичным упакованным полям.

ZF (Zero Flag - флаг нуля]. Устанавливается в качестве результата арифметических команд и команд сравнения. Как это ни странно, ненулевой результат приводит к установке нулевого значения этого флага, а нулевой - к установке единичного значения. Кажущееся несоответствие является, однако, логически правильным, так как 0 означает "нет" (т.е. результат не равен нулю), а единица означает "да" (т.е. результат равен нулю). Команды условного перехода JE и JZ проверяют этот флаг.

SF (Sign Flag - флаг знака). Устанавливается в соответствии со знаком результата (старшего бита) после арифметических операций: положительный результат устанавливает 0, а отрицательный - 1. Команды условного перехода JG и JL проверяют этот флаг.

TF (Trap Flag - флаг трассировки). Этот флаг вам уже приходилось устанавливать, когда использовалась команда Т в отладчике DEBUG. Если этот флаг установлен в единичное состояние, то процессор переходит в режим пошагового выполнения команд, т.е. в каждый момент выполняется одна команда под пользовательским управлением.

IF (Interrupt Flag - флаг прерывания). При нулевом состоянии этого флага прерывания запрещены, при единичном - разрешены.

DF (Direction Flag - флаг направления). Используется в строковых операциях для определения направления передачи данных. При нулевом состоянии команда увеличивает содержимое регистров S1 и DI, вызывая передачу данных слева направо, при нулевом -уменьшает содержимое этих регистров, вызывая передачу данных справа налево.

OF (Overflow Flag-флаг переполнения). Фиксирует
арифметическое переполнение, т.е. перенос в(из) старший
(знаковый) бит при знаковых арифметических операциях,

Например, команда СМР сравнивает два операнда и воздействует на флаги AF, CF, OF, PF, SF, ZF. Однако нет необходимости проверять все эти флаги по отдельности. В следующем примере проверяется, содержит ли регистр ВХ нулевое значение:

СМР ВХ,00 ; Сравнение ВХ с нулем

JZ В50 ; Переход на B50, если нуль

.. (действия при ненуле)

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5224
Авторов
на СтудИзбе
426
Средний доход
с одного платного файла
Обучение Подробнее