Система машинных команд МП x86 — КиберПедия 

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Система машинных команд МП x86

2020-11-19 114
Система машинных команд МП x86 0.00 из 5.00 0 оценок
Заказать работу

Рассмотрим ассемблерные команды, которые находят применение при решении задач системного программирования. При описании команд использованы условные обозначения:

· R — регистр процессора.

· A — адрес ячейки оперативной памяти или число.

Команды пересылки данных

MOV – запись числа в регистр или ячейку памяти.

MOV R1,R2;R1=R2

MOV R,A;R=A

MOV [R],A;Запись в ячейку памяти значения

MOV R,[R];Сохранения из памяти значения

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

MOVSB – пересылка байтов в оперативной памяти, для работы команды настраиваются регистры процессора:

ESI – адрес источника байтов.

EDI – адрес приемника байтов.

ECX= n – количество пересылаемых байтов.

Для пересылки n байтов команда снабжается префиксом REP. Перед вызовом команды обычно используют команду CLD. Команда сбрасывает флаг регистра флагов направления DF для пересылки байтов в порядке возрастания их адресов в буфере.

Если байты буфера пересылаются в порядке убывания адресов, значение DF = 1. Для установки флага используется команда STD.

Таким образом, при значении DF=0, после завершения пересылки байтов регистры ESI и EDI будут хранить адрес следующей ячейки памяти буфера  источника и буфера приемника.

При DF=1 эти регистры хранят адрес ячейки памяти, которая находится п еред ячейкой буфера источника и приемника.

Упражнение 6.1. В сегменте данных задана строка “ABCDEFG”, которая хранится по адресу msg и буфер buf размером 128 байтов. Каждый байт буфера хранить код LF. Требуется переслать символы строки в буфер.

Тогда команды пересылки байтов строки в буфер примут вид:

mov esi,msg;ESI > msg

mov edi,buf;EDI > buf

mov ecx,msg_size; Число байтов

cld;DF = 0

rep movsb;Переслать все байты

Составьте программу, которая выводит исходную строку до пересылки на экран терминала и содержание буфера, после завершения пересылки кодов.

Занесение кодов в стек

PUSH R – запись числа в стек.

POP R – извлечение числа из стека.

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

Так правильные команды занесения значения регистра EAX примут вид:

push eax

push ax

Следующие команды недопустимы:

push al

push ah

Команда позволяет записывать в стек значения по адресу из оперативной памяти.

Пример. В сегменте данных заданы два адреса:

addr1 dw 1234h

addr2 dd 890fh

Тогда будут допустимы такие команды

push [addr1]

push [addr2]

Следует помнить, что в операциях со стеком могут использоваться только операнды размером с машинное слово (word) и размером в двойное машинное слово (dword)

Для команды POP справедливы те же правила. Так верными будут команды:

pop ebx

pop bx

Команда:

pop bl

недопустима.

Команда обмена значений в регистрах

Формат команды:

XCHG R1, R2

R1 получает значение R2, а R2 получает значение из регистра R1.

Пример. Обмен значение регистров AX и BX

xchg ax,bx

Команды передачи управления

JMP label – безусловный переход.

Данная команда позволяет передать управление команде, которая находиться в том же сегменте, что и команда JMP. В команде label — метка (адрес) команды, которая получает управление.

Пример. Схема передачи управления:

jmp fin

;Команды программы

…................... 

;Завершение работы программы

 fin:

mov eax,1

mov ebx,0

int 0x80

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

Для выполнения определенного участка программа несколько раз используется команда LOOP.

Формат команды:

LOOP label – циклическое выполнение команд. Первая команда блока команд помечается меткой   label. Количество повторений цикла - итераций заносится в регистр ECX:

Пример. Организация цикла на 70 итераций:

mov ECX,70

go:

;Команды

loop go

Каждое выполнение команды LOOP уменьшает значение регистра ECX на единицу. Обработка будет прекращена, когда в ECX будет находиться значение равное нолю.

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

Так число итераций можно записать в младшую часть регистра CX или в одну из частей CH или CL. При этом будет меняться число возможных итераций цикла.


Поделиться с друзьями:

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.01 с.