Главная » Просмотр файлов » Описание системы команд

Описание системы команд (1110646), страница 6

Файл №1110646 Описание системы команд (Семинары) 6 страницаОписание системы команд (1110646) страница 62019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Большинство языков высокого уровня хранят локальные данныеблоков в стеке. Эти переменные называют еще автоматическими или динамическими.Память для них резервируется путем уменьшения значения регистра-указателя стекаesp/sp на величину, равную длине области, занимаемой этими динамическимипеременными. Доступ к этим переменным осуществляется посредством регистра ebp/bp.Если один блок вложен в другой, то для его динамических (локальных) переменных такжевыделяется место (кадр) в стеке, но в этот кадр помещается указатель на кадр стека длявключающего его блока.

Команды enter и leave как раз и позволяют поддержать в языкеассемблера принципы работы с переменными блоков как в блочно-структурированныхязыках. Дисплей организуется с помощью второго операнда команды enter и стека.Например, в начале работы главной процедуры A и после вызова процедуры B кадр стекабудет выглядеть так.Соответственно, после вызова процедур C и D стек будет выглядеть, как показано ниже.Таким образом, видно, что используя дисплей, мы фактически имеем адреса областейинициализации, доступных по признаку вложенности объемлющих блоков. Обратныйпроцесс завершения работы с блоками и удаления соответствующих областейинициализации поддерживается командой leave..286proc1proc;зарезервировать в стеке место длялокальных переменных;proc1 16 байт;лексический уровень вложенности 0enter16,0...leaveretproc1endpСм. также: урок 14 и команды leave, retHLT(HaLT)ОстановкаhltСхема команды:Назначение: остановка микропроцессора до прерывания или перезагрузки.СинтаксисАлгоритм работы:перевод микропроцессора в состояние остановки.Состояние флагов после выполнения команды:выполнение команды не влияет на флагиПрименение:В результате выполнения команды микропроцессор переходит в состояние остановки.

Изэтого состояния его можно вывести сигналами на входах RESET, NMI, INTR. Если длявозобновления работы микропроцессора используется прерывание, то сохраненноезначение пары cs:eip/ip указывает на команду, следующую за hlt. Для иллюстрацииприменения данной команды рассмотрим еще один способ переключениямикропроцессора из защищенного в реальный режим и его возврата обратно в реальныйрежим (см.

урок 16). Как известно, в микропроцессоре не предусмотрено специальныхсредств для подобного переключения. Сброс микропроцессора можно инициировать, есливывести байт со значением 0feh в порт клавиатуры 64h. После этого микропроцесорпереходит в реальный режим и управление получает программа BIOS, котораяанализирует байт отключения в CMOS-памяти по адресу 0fh. Для нас интереспредставляют два значения этого байта — 5h и 0ah:••5h — сброс микропроцессора инициирует инициализацию программируемогоконтроллера прерываний на значение базового вектора 08h (см.

уроки 15 и 17).Далее управление передается по адресу, который находится в ячейке областиданных BIOS 0040:0067;0ah — сброс микропроцессора инициирует непосредственно передачу управленияпо адресу в ячейке области данных BIOS 0040:0067 (то есть безперепрограммирования контроллера прерываний).Таким образом, если вы не используете прерываний, то достаточно установить байт 0fh вCMOS-памяти в 0ah. Предварительно, конечно, вы должны инициализировать ячейкуобласти данных BIOS 0040:0067 значением адреса, по которому необходимо передатьуправление после сброса.

Для программирования CMOS-памяти используются номерапортов 070h и 071h. Вначале в порт 070h заносится нужный номер ячейки CMOS-памяти,а затем в порт 071h — новое значение этой ячейки.;работаем в реальном режиме, готовимсяк переходу;в защищенный режим:pushesmovax,40hmoves,axmovword ptres:[67h],offset ret_real;ret_real — метка в программе, скоторой должно;начаться выполнение программы послесбросаmoves:[69h],csmoval,0fh ;будемобращаться к ячейке 0fh в CMOSout70h,aljmp$+2;чутьзадержимся, чтобы аппаратура отработала;сброс без перепрограммированияконтроллераmoval,0ahout71h,al;переходим в защищенный режимустановкой;бита 0 cr0 в 1 (см. урок 16);работаем в защищенном режиме;готовимся перейти обратно в реальныйрежимmoval,01fchout64h,al ;сбросмикропроцессора hlt;остановка до физического окончанияпроцесса сбросаret_real:...;метка,на которую будет передано;управлениепосле сбросаСм. также: уроки 15, 16, 17IDIV(Integer DIVide)Деление целочисленное со знакомidiv делительСхема команды:Назначение: операция деления двух двоичных значений со знаком.СинтаксисАлгоритм работы:Для команды необходимо задание двух операндов — делимого и делителя.

Делимоезадается неявно, и размер его зависит от размера делителя, местонахождение которогоуказывается в команде:•••если делитель размером в байт, то делимое должно быть расположено в регистреax. После операции частное помещается в al, а остаток — в ah;если делитель размером в слово, то делимое должно быть расположено в паререгистров dx:ax, причем младшая часть делимого находится в ax. После операциичастное помещается в ax, а остаток — в dx;если делитель размером в двойное слово, то делимое должно быть расположено впаре регистров edx:eax, причем младшая часть делимого находится в eax.

Послеоперации частное помещается в eax, а остаток — в edx;Остаток всегда имеет знак делимого. Знак частного зависит от состояния знаковых битов(старших разрядов) делимого и делителя.Состояние флагов после выполнения команды:11 07 06 04 02 00OF SF ZF AF PF CF??????Применение:Команда выполняет целочисленное деление операндов с учетом их знаковых разрядов.Результатом деления являются частное и остаток от деления. При выполнении операцииделения возможно возникновение исключительной ситуации: 0 — ошибка деления.

Этаситуация возникает в одном из двух случаев: делитель равен 0 или частное слишкомвелико для его размещения в регистре eax/ax/al.;деление словmovmovcwdделимого dx:axidivостаток в dxax,1045 ;делимоеbx,587 ;делитель;расширениеbx;частное в ax,См. также: урок 8, приложение 7 и команду divIMUL(Integer MULtiply)Умножение целочисленное со знакомimul множитель_1imul множ_1,множ_2imul рез-т,множ_1,множ_2Назначение: операция умножения двух целочисленных двоичных значений со знаком.Схема команды:СинтаксисАлгоритм работы:Алгоритм работы команды зависит от используемой формы команды.

Форма команды содним операндом требует явного указания местоположения только одного сомножителя,который может быть расположен в ячейке памяти или регистре. Местоположение второгосомножителя фиксировано и зависит от размера первого сомножителя:•••если операнд, указанный в команде, — байт, то второй сомножитель располагаетсяв al;если операнд, указанный в команде, — слово, то второй сомножительрасполагается в ax;если операнд, указанный в команде, — двойное слово, то второй сомножительрасполагается в eax.Результат умножения для команды с одним операндом также помещается в строгоопределенное место, определяемое размером сомножителей:•при умножении байтов результат помещается в ax;••при умножении слов результат помещается в пару dx:ax;при умножении двойных слов результат помещается в пару edx:eax.Команды с двумя и тремя операндами однозначно определяют расположение результата исомножителей следующим образом:••в команде с двумя операндами первый операнд определяет местоположениепервого сомножителя.

На его место впоследствии будет записан результат. Второйоперанд определяет местоположение второго сомножителя;в команде с тремя операндами первый операнд определяет местоположениерезультата, второй операнд — местоположение первого сомножителя, третийоперанд может быть непосредственно заданным значением размером в байт, словоили двойное слово.Состояние флагов после выполнения команды:11 07 06 04 02 00OF SF ZF AF PF CFr????rКоманда imul устанавливает в ноль флаги of и cf, если размер результата соответствуетрегистру назначения.

Если эти флаги отличны от нуля, то это означает, что результатслишком велик для отведенных ему регистром назначения рамок и необходимо указатьбольший по размеру регистр для успешного завершения данной операции умножения.Конкретными условиями сброса флагов of и cf в ноль являются следующие условия:•••для однооперандной формы команды imul регистры ax/dx/edx являются знаковымирасширениями регистров al/ax/eax;для двухоперандной формы команды imul для размещения результата умножениядостаточно размерности указанных регистров назначения r16/r32;то же для трехоперандной команды умножения.Применение:Команда выполняет целочисленное умножение операндов с учетом их знаковых разрядов.Для выполнения этой операции необходимо наличие двух сомножителей. Размещение изадание их местоположения в команде зависит от формы применяемой командыумножения, которая, в свою очередь, определяется моделью микропроцессора. Так, длямикропроцессора i8086 возможна только однооперандная форма команды, дляпоследующих моделей микропроцессоров дополнительно можно использовать двух- итрехоперандные формы этой команды..486...movbx,186imuleax,bx,8;если результату не хватило размерностиоперанда1,;то перейдем на m1, где скорректируемситуацию:jcm1См.

также: урок 8, приложение 7 и команду mulIN(INput operand from port)Ввод операнда из портаin аккумулятор,ном_портаСхема команды:Назначение: ввод значения из порта ввода-вывода.СинтаксисАлгоритм работы:Передает байт, слово, двойное слово из порта ввода-вывода в один из регистров al/ax/eax.Состояние флагов после выполнения команды: выполнение команды не влияет на флаги.Состояние флагов после выполнения команды:выполнение команды не влияет на флагиПрименение:Команда применяется для прямого управления оборудованием компьютера посредствомпортов. Номер порта задается вторым операндом в виде непосредственного значения илизначения в регистре dx. Непосредственным значением можно задать порт с номером вдиапазоне 0-255.

При использовании порта с большим номером используется регистр dx.Размер данных определяется размерностью первого операнда и может быть байтом,словом, двойным словом. В качестве примера применения рассмотрим фрагментобработчика прерывания от клавиатуры 9. Это прерывание вызывается всякий раз принажатии любой клавиши на клавиатуре. Обработчик этого прерывания должен прочитатьскан-код клавиши, подтвердить микропроцессору клавиатуры факт приема скан-кода,преобразовать этот код в соответствии с клавишами-переключателями и поместитьпреобразованный код в буфер клавиатуры, находящийся в области BIOS. Действия чтенияи подтверждения приема скан-кода могут выглядеть, к примеру, так:al,60h;читаем скан-pushaxна времяinal,61h61horal,80hбайта из порта 61h в 1out61h,alфакт приема скан-кодаpopaxout61h,alбайт в порту 61h;сохраним егокодin;читаем порт;старший бит;подтверждаем;восстановилиСм.

также: урок 7 и команды out, ins/insb/insw/insd, outsINC(INCrement operand by 1)Увеличить операнд на 1inc операндСхема команды:Назначение: увеличение значения операнда в памяти или регистре на 1.СинтаксисАлгоритм работы:команда увеличивает операнд на единицу.Состояние флагов после выполнения команды:11 07 06 04 02OF SF ZF AF PFrrrrrПрименение:Команда используется для увеличения значения байта, слова, двойного слова в памятиили регистре на единицу. При этом команда не воздействует на флаг cf.incaxзначение в ax на 1;увеличитьСм. также: урок 8 и команды dec, add, adcINS/INSB/INSW/INSD(Input String Byte/Word/Double word operands)Ввод строк байтов/слов/двойных слов из портаins приемник,портinsbСхема команды:inswinsdНазначение: ввод из порта в память последовательности байт, слов, двойных слов.СинтаксисАлгоритм работы:•••передать данные из порта ввода-вывода, номер которого загружен в регистр dx, впамять по адресу es:edi/di;в зависимости от состояния флага df изменить значение регистров edi/di:o если df=0, то увеличить содержимое этих регистров на длину структурногоэлемента последовательности;o если df=1, то уменьшить содержимое этих регистров на длину структурногоэлемента последовательности;при наличии префикса выполнить определяемые им действия (см.

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

Тип файла
PDF-файл
Размер
1,53 Mb
Материал
Тип материала
Высшее учебное заведение

Список файлов семинаров

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