Главная » Просмотр файлов » ЗАД НА ЛАБ РАБ СПС

ЗАД НА ЛАБ РАБ СПС (1085773), страница 2

Файл №1085773 ЗАД НА ЛАБ РАБ СПС (Задания на лабораторные работы и домашнюю работу по СПО) 2 страницаЗАД НА ЛАБ РАБ СПС (1085773) страница 22018-01-12СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

3. SUB AX,AX ;Установить ноль в АХ
PUSH AX ;3аписать ноль в стек

4. MOV AX,DATASG ;3анести адрес
MOV DS,AX ; DATASG в DS

5. RET ;Возврат в DOS

BEGIN ENDP

CODESG ENDS

END BEGIN

Рис.1. Инициализация ЕХЕ-программы

Этот пример набивать не надо, выполнение лабораторных работ надо начинать с примера на рис. 2.

ПРИМЕР ИСХОДНОЙ ПРОГРАММЫ

На рис.2 обобщены предыдущие сведения в простой исходной программе на ассемблере. Программа содержит сегмент стека -STACKSG и сегмент кода - CODESG.

Сегмент STACKSG содержит один элемент DB (определить байт), который определяет 12 копий слова ‘STACKSEG’. В последующих программах стек не определяется таким способом, но при использовании отладчика для просмотра ассемблированной программы на экране данное определение помогает локализовать стек.

Сегмент кода CODESG содержит выполняемые команды программы, хотя первая директива ASSUME не генерирует кода. Директива ASSUME назначает регистр SS для STACKSG и регистр CS для CODESG. В действительности эта директива сообщает ассемблеру, что для адресации в STACKSG необходимо использовать адрес в регистре SS и для адресации в CODESG -адрес в регистре CS. Системный загрузчик при загрузке программы с диска в память для выполнения устанавливает действительные адреса в регистрах SS и CS. Программа не имеет сегмента данных, так как в ней нет определения данных и соответственно в ASSUME нет необходимости ассигновать регистр DS.

page 60,132

TITLE EXASM1 (EXE) Пример регистровых операций

STACKSG SEGMENT PARA STACK 'Stack'

DB 12 DUP('STACKSEG')

STACKSG ENDS

CODESG SEGMENT PARA 'Code'

BEGIN PROC FAR

ASSUME SS:STACKSG, CS:CODESG, DS:NOTHING

PUSH DS ;3аписать DS в стек

SUB AX, AX ;3аписать ноль

PUSH AX ; в стек

MOV AX, 0123H .-Записать 0123 в АХ

ADD AX, 0025H ;Прибавить 25 к АХ

MOV BX,AX ;Переслать АХ в ВХ

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

MOV CX, BX ; Переслать ВХ в СХ

SUB CX, AX ; Вычесть АХ из СХ

SUB AX, AX ;0чистить АХ

NOP

RET ; Возврат в DOS

BEGIN ENDP ; Конец процедуры

CODESG ENDS ;Конец сегмента

END BEGIN ;Конец программы

Рис.2. .Пример исходной программы на ассемблере



АССЕМБЛИРОВАНИЕ И ВЫПОЛНЕНИЕ ПРОГРАММ

Всегда необходимо вводить имя исходного файла и обычно запрашивать OBJ-файл - это требуется для компоновки программы в загрузочный файл. Возможно, потребуется указание LST-файла, особенно, если необходимо проверить сгенерированный машинный код. CRF-файл полезен для очень больших программ, где необходимо видеть, какие команды ссылаются на какие поля данных. Кроме того, ассемблер генерирует в LST-файле номера строк, которые используются в CRF-файле.

Пример вызова ассемблера

Путь:TASM путь: filename.ASM, путь: filename.OBJ, путь: filename.LST

Или проще сделать так:

Скопировать TASM.exe в Вашу рабочую библиотеку, где Вы и будете создавать Ваш файл на языке Ассемблер.

Установить Ваш рабочий каталог и набрать:

TASM.exe filename.ASM, filename.OBJ,filename.LST

В результате в Вашем рабочем каталоге появятся файлы с расширением .OBJ и .LST.

Ассемблер преобразует исходные команды в машинный код и выдает на экран сообщения о возможных ошибках. Типичными ошибками являются нарушения ассемблерных соглашений по именам, неправильное написание команд (например, MOVE вместо MOV), а также наличие в операндах неопределенных имен. Программа ASM выдает только коды ошибок, которые объяснены в руководстве по ассемблеру, в то время как программа ТASM выдает и коды ошибок, и пояснения к ним. Всего имеется около 100 сообщений об ошибках.

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

В начале листинга обратите внимание на реакцию ассемблера на директивы PAGE и TITLE. Никакие директивы, включая SEGMENT, PROC, ASSUME и END, не генерируют машинных кодов.

Листинг содержит не только исходный текст, но также в левой части транслированный машинный код в шестнадцатеричном формате. В самой левой колонке находятся шестнадцатеричные адреса команд и данных.

Сегмент стека начинается с относительного адреса 0000. В действительности он загружается в память в соответствии с адресом в регистре SS и нулевым смещением относительно этого адреса. Директива SEGMENT устанавливает 16-кратный адрес и указывает ассемблеру на то, что это начало стека. Сама директива не генерирует машинный код. Команда DB также находится по адресу 0000, содержит 12 копий слова 'STACKSEG'; машинный код представлен значениями 0С (десятичное 12) и шестнадцатеричным представлением ASCII-символов. (В дальнейшем можно использовать отладчик для просмотра результатов в памяти.)

Сегмент стека заканчивается по адресу 0060, что эквивалентно десятичному значению 96 (12x8).

  1. Page 60,132

  2. TITLE EXASМ1 (EXE) ;Пример регистровых операций

  3. ; --------------------------------------

  4. 0000 STACKSG SEGMENT PARA STACK ‘Stack ‘

  5. 0000 0C [ DB 12 DUP (‘STACKSEG’)

  6. 53 54 41 43

  7. 4B 53 45 47

  8. ]

  9. 0060 STACKSG ENDS

  10. ;----------------------------

  11. 0000 CODESG SEGMENT PARA ‘Code’

  12. 0000 BEGIN PROC FAR

  13. ASSUME SS:STACKSG,CS:CODESG,DS:NOTHING

  14. 0000 1E PUSH DS ;3аписать DS в стек

  15. 0001 2B С0 SUB AX, AX ; Записать ноль

  16. 0003 50 PUSH AX ; в стек

  17. 0004 B8 0123 MOV AX., 0123H ; Записать шест. 01223 в AX

  18. 0007 05 0025 ADD AX, 0025H ;Прибавить шест. 25 к AX

  19. 000А 88 D8 MOV BX, AX

  20. 0000C 03 D8 ADD BX, AX

  21. 000E 8B CB MOV CX, BX

  22. 0010 2B C8 SUB CX,AX

  23. 0012 2B C0 SUB AX,AX

  24. 0014 90 NOP

  25. 0015 CB RET

  26. 0016 BEGIN ENDP

  27. 0016 CODESG ENDS

  28. END BEGIN ; Конец программы

Segments and Groups:

Name Size Align Combine Class


CODESG ............ 0016 PARA NONE 'CODE'

STACKSG. ........... 0060 PARA STACK 'STACK1



Symbols:

NAME Type Value Attr

Begin F PROC 0000 CODESG Length = 16

Рис.3. Листинг ассемблирования программы

Сегмент кода также начинается с относительного адреса 0000: Он загружается в память в соответствии с адресом в регистре CS и нулевым смещением относительно этого адреса. Поскольку ASSUME является директивой ассемблеру, то первая команда, генерирующая машинный код,- это PUSH DS, однобайтовая команда (1E), находящаяся в сегменте на нулевом смещении. Следующая команда SUB АХ,АХ генерирует двухбайтовый машинный код (2В С0), начинающийся с относительного адреса 0001. Пробел между байтами предназначен только для удобства чтения. В данном примере встречаются одно-, двух- и трехбайтовые команды.

Последняя команда END содержит операнд BEGIN, который имеет отношение к имени команды PROC по смещению 0000. Это адрес сегмента кодов, с которого начинается выполнение после загрузки программы. Листинг ассемблирования программы EXASM1 .LST имеет по директиве PAGE ширину 132 символа и может быть распечатан

Таблица идентификаторов

За листингом ассемблирования программы следует таблица идентификаторов. Первая часть таблицы содержит определенные в программе сегменты и группы вместе с их размерами в байтах, выравниванием и классом. Вторая часть содержит идентификаторы - имена полей данных в сегменте данных (в нашем примере их нет) и метки, назначенные командам в сегменте кодов (одна в нашем примере).



КОМПОНОВКА ПРОГРАММЫ

Если в результате ассемблирования не обнаружено ошибок, то следующий шаг - компоновка объектного модуля. Файл .OBJ содержит только машинный код в шестнадцатеричной форме. Так как программа может загружаться почти в любое место памяти для выполнения, то ассемблер может не определить все машинные адреса. Кроме того, могут использоваться другие (под)программы для объединения с основной. Назначением программы LINK является завершение определения адресных ссылок и объединение (если требуется) нескольких программ.

В нашем примере, наберите

Путь:Link.EXE Путь:имя_программы.OBJ и на вопросы ответьте нажатием клавиши Return. В результате в вашей библиотеке появится файл .EXE.

Трассировка программы под отладчиком DEBUG.

Введите DEBUG имя_программы. EXE.

В результате DOS загрузит программу DEBUG, которая в свою очередь загрузит требуемый EXE-модуль. После этого отладчик выдаст дефис (-) в качестве приглашения. Для просмотра сегмента стека введите D SS:0 , сегмента кода D CS:0.

Команда R дает возможность посмотреть регистры, команда T – трассировка позволит выполнить пошагово всю вашу программу. Команда Q – выход , осуществит выход из отладчика.

Лабораторная работа № 2.

При выполнении этой работы студенты познакомятся с правилами описания непосредственных операндов в командах

Использование непосредственных операндов в командах

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 ;Сложение

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

ОООС 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. Команды с непосредственными данными

Лабораторная работа № 3.

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

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. Использование СОM программ

Лабораторная работа № 4.

Знакомство с использованием циклов в языке Ассемблер.

Циклы

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. Использование команды LOOP

Лабораторная работа № 5.

РАСШИРЕННЫЕ ОПЕРАЦИИ ПЕРЕСЫЛКИ

page 65,132

TITLE MOVE (EXE) ;Расширенная пересылка

STACKSG SEGMENT PARA STACK 'Stack'

DW 32DUP(?)

STACKSG ENDS

DATASG SEGMENT PARA 'Data'

NAME1 DB 'ABCDEFGHI'

NAME2 DB ‘JKLMNOPQR'

NAМE3 DB 'STUVWXYZ*'

DATASG ENDS

CODESG SEGMENT PARA ‘Code’

Характеристики

Тип файла
Документ
Размер
197 Kb
Тип материала
Высшее учебное заведение

Список файлов учебной работы

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