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

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

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

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

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

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

Директива DT определяет элементы данных, имеющие длину в десять байт. Назначение этой директивы связано с “упакованными десятичными” числовыми значениями. По директиве DT генерируются различные константы в зависимости от версии ассемблера; для практического применения ознакомьтесь с руководством по имеющемуся у вас ассемблеру.

непосредственные операнды

Команда пересылает непосредственную константу 0123Н в регистр АХ.

MOV АХ,0123Н

Трехбайтовый объектный код для этой команды 882301, где В8 обозначает “переслать непосредственное значение в регистр АХ”, а следующие два байта содержат само значение. Многие команды имеют два операнда: первый операнд может быть регистром или адресом памяти, а второй - непосредственной константой.

Использование непосредственного операнда более эффективно, чем определение числовой константы в сегменте данных и организация ссылки на нее в операнде команды MOV,например

АМТ1 DW 012ЗН
MOV АХ,АМТ1

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

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

MOV AL, 0123Н (ошибка)

Однако, если непосредственный операнд короче, чем получающий
операнд, как в примере

ADD AX,25H то ассемблер расширяет непосредственный операнд до

двух байт, 0025 и записывает объектный код в виде 2500,

Непосредственные форматы

Непосредственная константа может быть шестнадцатеричной, например 0123Н; десятичной, например 291 (которую ассемблер конвертирует в 0123Н); или двоичной, например 100100011В (которая, преобразуется в 0123Н).

Ниже приведена классификация команд, которые допускают непосредственные операнды:

Команды пересылки и сравнения: MOV, CMP

Арифметические команды: ADC, ADD, SBB, SUB

Команды сдвига: RCL, RCR, ROL, ROR,

SHL, SAR, SHR

Логические команды: AND, OR, TEST, XOR

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

Для создания элементов, длиннее чем два байта, можно использовать цикл или строковые команды.

ДИРЕКТИВА EQU

Директива EQU не определяет элемент данных, но определяет значение, которое можно использовать для подстановки в других командах. Предположим, что в сегменте данных закодирована следующая директива EQU:

TIMES EQU 10

Имя, s данном случае TIMES, может быть представлено любым допустимым в ассемблере именем. Теперь в какой бы команде или директиве ни использовалось слово TIMES, ассемблер подставит значение 10. Например, ассемблер преобразует директиву

FIELDA DB TIMES DUP (?)
в директиву

FIELDA DB 10 DUP (?)

Имя, связанное с некоторым значением с помощью директивы EQU, может использоваться в командах, например:

COUNTR EQU 05

MOV CX,COUNTR

Ассемблер заменяет имя COUNTR в команде MOV на значение 05, создавая операнд с непосредственным значением, как если бы было закодировано

MOV СХ,05 ;Ассемблер подставляет 05

Page 60,132

TITLE EXIMM (EXE) ;Пример непосредственных операндов

; (Кодируется для ассемблирования, но не для выполнения)

0000 DATASG SEGMENT PARA ‘'Data’

0000 ?? FLD1 DB ?

0001 ???? FLD2 DW ?

0003 ENDS

0000 CODESG SEGMENT PARA ‘Code’ '

0000 BEGIN PROC FAR

ASSUME CS:CODESG, DS:DATASG

;Операции пересылки и сравнения:

0000 ВВ 0113 MOV BX,275 ; Пересылка

0003 ЗС 19 CMP AL,H ;Сравнение

;Арифметические операции:

0005 14 05 ADC АL, 5 ;Сложение с переносом

0007 80 С7 ОС ADD ВН ,12 ;Сложение

000А 1C 05 SBB AL, 5 ;Вычитание с заемом

000С 80 2Е 0000 R 05 SUB FLD1, 5 ;Вычитание

; Ротация и сдвиг (только на 1 бит):

0011 DO D3 RCL BL, 1 ; Ротация влево с переносом

0013 DO DC RCR АН,1 ;Ротация вправо с

; переносом

0015 01 06 0001 R ROL FID2, 1 ;Ротация влево

0019 DO C8 ROR AL, 1 ;Ротация вправо

001B Dl El SAL СХ , 1 ;Сдвиг влево

0010 Dl FB SAR ВХ ,1 ;Арифм. сдвиг вправо

001F DO 2E 0000 R SHR FLD1, 1 ;Сдвиг вправо

;Логические операции:

0023 24 2C AND AL, 00101100В ;AND (регистр)

0025 80 CF ZA OR ВН, 2АН ;OR (регистр)

0028 F6 СЗ 7А TEST BL, 7AH ;TEST (регистр)

002B 80 36 0000 R 23 OR FLD1, 23H ;XOR (память)

0030 BEGIN ENDP

0030 CODESG ENDS

END

Рис.4.2. Команды с непосредственными данными

Преимущество директивы EQU заключается в том, что многие команды могут использовать значение, определенное по имени COUNTR. Если это значение должно быть изменено, то изменению подлежит лишь одна директива EQU. Естественно, что использование директивы EQU разумно только там, где подстановка имеет смысл для ассемблера. В директиве EQU можно применять символические имена:

1. ТР EQU TOTALPAY

2. MPY EQU MUL

Первый пример предполагает, что в сегменте данных программы определено имя TOTALPAY. Для любой команды, содержащей операнд ТР, ассемблер заменит его на адрес TOTALPAY. Второй пример, показывает возможность использования в программе слова MPY вместо обычного мнемокода MUL.

ОСНОВНЫЕ ПОЛОЖЕНИЯ НА ПАМЯТЬ

Имена элементов данных в программе должны быть уникальны и по возможности наглядны. Например, элемент для зарплаты служащего может иметь имя EMPWAGE.

Для определения символьных строк используйте директиву DB, так как ее формат допускает строки длиннее двух байтов и формирует их в нормальной последовательности (слева направо).

Будьте внимательны при указании десятичных и шестнадцатиричных значений. Сравните, например, сложение содержимого регистра АХ с десятичным 25 и с шестнадцатиричным 25H:

ADD AX,25 ;Прибавить 25
ADD AX,25H ;Прибавить 37

Помните, что директивы DW, DD и DQ записывают числовое значение в объектном коде в обратной последовательности байтов.

Используйте элементы DB для операций с полурегистрами (AL, АН, BL и т.д.) и DW для операций с полными регистрами (АХ, ВХ, СХ и т.д.). Числовые элементы, определенные директивами DD и DQ, имеют специальное применение.

Следите за соответствием непосредственных операндов размеру регистра: однобайтовая константа - однобайтовый регистр (AL, ВН), двухбайтовая константа - полный регистр (АХ, ВХ).

Программы в СОМ-файлах

Цель: объяснить назначение и использование СОМ-файлов и перевод ассемблерных программ в формат СОМ-файлов.До сих пор вы писали, ассемблировали и выполняли программы в ЕХЕ-формате. Компоновщик LINK, автоматически генерирует особый формат для ЕХЕ-файлов, в котором присутствует специальный начальный блок (заголовок) размером не менее 512 байт.

Для выполнения программ можно также создавать СОМ-файлы. Примером часто используемого СОМ-файла является COMMAND.COM. Программа EXE2BIN.COM в операционной системе DOS преобразует ЕХЕ-файлы в СОМ-файлы. фактически эта программа создает BIN (двоичный) файл, поэтому она и называется преобразователь ЕХЕ в BIN (EXE-to-BIN). Выходной BIN-файл можно переименовать в СОМ-файл.

РАЗЛИЧИЯ МЕЖДУ ПРОГРАММАМИ В ЕХЕ- и СОМ-файлах.

Несмотря на то, что EXE2ВIN преобразует ЕХЕ-файл в СОМ-файл, существуют определенные различия между программой, выполняемой как ЕХЕ-файл и программой, выполняемой как СОМ-файл.

Размер программы. Программа в формате ЕХЕ может иметь любой размер, в то время как СОМ-файл ограничен размером одного сегмента и не превышает 64 К. Размер СОМ-файла всегда меньше, чем размер соответствующего ЕХЕ-файла; одна из причин этого - отсутствие в СОМ-файле 512-байтового заголовка ЕХЕ-файла.

Сегмент стека. В ЕХЕ-программе определяется сегмент стека, в то время как СОМ-программа генерирует стек автоматически. Таким образом, при создании ассемблерной программы, которая будет преобразована в СОМ-файл, стек должен быть опущен.

Сегмент данных. В ЕХЕ- программе обычно определяется сегмент данных, а регистр DS инициализируемся адресом этого сегмента. В СОМ-программе все данные должны быть определены в сегменте кода. Ниже будет показан простой способ выполнения этого требования.

Инициализация. В ЕХЕ-программе выполняются запись нулевого слова в стек и инициализация регистра DS. Так как в СОМ-программе стек и сегмент данных не определены, то эти шаги отсутствуют. Когда СОМ-программа начинает работать, все сегментные регистры содержат адрес префикса программного сегмента (PSP) - 256-байтовый (100Н) блок, который резервируется операционной системой DOS непосредственно перед СОМ- или ЕХЕ-программой в памяти. Так как адресация начинается со смещения 100H от начала PSP, то в программе после оператора SEGMENT кодируется директива ORG 100H.

Обработка. Для программ в ЕХЕ-. и СОМ-форматах выполняются ассемблирование для получения OBJ-файла и компоновка для получения ЕХЕ-файла. Если программа создается для выполнения как ЕХЕ-файл, то ее уже можно выполнить. Если же программа создается для выполнения как СОМ-файл, то компоновщиком будет выдано сообщение:

Warning: No STACK Segment

Это сообщение можно игнорировать, так как определение стека в программе не предполагалось. Для преобразования ЕХЕ-файла в СОМ-файл используется программа EXE2BIN. Предположим, что EXE2BIN имеется на дисководе А, а скомпонованный файл по имени CALC.EXE - на дисководе В. Введите

EXE2BIN B:CALC,B:CALC.COM

Так как первый операнд всегда предполагает ЕХЕ-файл, то можно не кодировать тип ЕХЕ. Второй операнд может иметь другое имя (не CALC.COM). Если не указывать тип СОМ, то EXE2BIN примет по умолчанию тип BIN, который впоследствии можно переименовать в СОМ. После того как преобразование будет выполнено, можно удалить OBJ- и ЕХЕ-файлы.

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

ПРИМЕР СОМ-ПРОГРАММЫ

Программа ЕХСОМ1, приведенная на рис. 5.1, аналогична программе на рис. 4.3, но изменена согласно требованиям СОМ-формата. Обратите внимание на следующие изменения в этой СОМ-программе:

  • Стек и сегмент данных отсутствуют.

  • Оператор ASSUME указывает ассемблеру на необходимость установить относительные адреса с начала сегмента кодов. Регистр CS также содержит этот адрес, являющийся к тому же адресом префикса программного сегмента (PSP). Директива ORG служит для резервирования 100Н байт от начального адреса под PSP.

  • Директива ORG 100H устанавливает относительный адрес для начала выполнения программы. Программный загрузчик устанавливает этот адрес в командном указателе.

  • Команда JMP служит для обхода данных, определенных в программе.

Для обработки и выполнения этой программы необходимы следующие шаги:

MASM [ответы на запросы обычные]

LINK [ответы на запросы обычные]

EXE2BIN В:ЕХСОМ1,В:ЕХСОМ1.СОМ

DEL B:EXCOM1.OBJ,B:EXCOM1.EXE [удаление OBJ- и ЕХЕ-файлов]

Размеры ЕХЕ- и СОМ-программ - 788 и 20 байт соответственно. Учитывая такую эффективность СОМ-файлов, рекомендуется все небольшие программы создавать в СОМ-формате. Для трассировки выполнения программы от начала и до команды RET (но не включая ее) введите DEBUG В:ЕХСОМ1.СОМ.

Некоторые программисты кодируют элементы данных после команд так, что первая команда JMP не требуется. Кодирование элементов данных перед командами позволяет ускорить процесс ассемблирования и является хорошим стилем, рекомендуемым в руководствах по ассемблеру.

Page 60,132

TITLE XCOM1 СОM ; для пересылки и сложения

CODESG SEGMENT PARA ‘'Code’

ASSUME CS:CODESG, DS:CODESG, SS:CODESG, ES:CODESG .

ORG 100H ;Начало в конце PSP

BEGIN: JMP MAIN ;0бход через данные

FLDA DW 250 ;Определение данных

FLDB DW 125

FLDC DW ?

MAIN PROC NEAR

MOV AX, FLDA ;.-Переслать 0250 в АХ

ADD AX, FLDB ;Прибавить 0125 к АХ

MOV FLDC,AX ; Записать сумму в FLDC

RET ;Вернуться в DOS

MAIN ENDP

CODESG ENDS

END BEGIN

Рис. 5.1 Пример СОМ-программы

СТЕК ДЛЯ СОМ-ПРОГРАММЫ

Для СОМ-файла DOS автоматически определяет стек и устанавливает одинаковый, общий сегментный адрес во всех четырех сегментных регистрах. Если для программы размер сегмента в 64 К достаточен, то DOS устанавливает в регистре SP адрес конца сегмента - FFFE. Это будет вершина стека. Если 64-Кбайтный сегмент не имеет достаточно места для стека, то DOS устанавливает стек в конце памяти. В обоих случаях DOS записывает затем в стек нулевое слово.

Возможность использования стека зависит от размера программы и ограниченности памяти. С помощью команды DIR можно определить размер файла и вычислить необходимое пространство для стека.

Все небольшие программы в этой книге в основном рассчитаны на СОМ-формат.

ОСОБЕННОСТЬ ОТЛАДКИ

Несоблюдение хотя бы одного требования СОМ-формата может послужить причиной неправильной работы программы. Если EXE2BIN обнаруживает ошибку, то выдается сообщение о невозможности преобразования файла без указания конкретной причины. Необходимо проверить в этом случае директивы SEGMENT, ASSUME и END. Если опущен ORG 100H, то на данные в префиксе программного сегмента будут установлены неправильные ссылки с непредсказуемым результатом при выполнении.

При выполнении СОМ-программы под управлением отладчика DEBUG необходимо использовать команду D CS:100 для просмотра данных и команд. Не следует выполнять в отладчике команду RET; предпочтительнее использовать команду Q отладчика. Некоторые программисты используют INT 20Н вместо команды RET.

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

ОСНОВНЫЕ ПОЛОЖЕНИЯ НА ПАМЯТЬ

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