Об ассемблере



страница27/52
Дата14.08.2018
Размер3.59 Mb.
#43964
ТипЛекция
1   ...   23   24   25   26   27   28   29   30   ...   52

OR


(logical OR)

Логическое включающее ИЛИ

 


Схема команды: 

or приемник,маска 

Назначение: операция логического ИЛИ над битами операнда назначения.

Синтаксис

Алгоритм работы:

  • выполнить операцию логического ИЛИ над битами операнда назначения, используя в качестве маски второй операнд — маска. При этом бит результата равен 0, если соответствующие биты операндов маска и назначения равны 0, в противном случае бит равен 1;

  • записать результат операции в источник (операнд маска остается неизменным);

  • установить флаги.

Состояние флагов после выполнения команды:

11

07

06

04

02

00

OF

SF

ZF

AF

PF

CF

0

r

r

?



0

Применение:

Команду or можно использовать для работы с операндами на уровне битов. Типичное использование команды — установка определенных разрядов первого операнда в единицу.



        mov     al,01h

        or      bl,al   ;установить нулевой бит в 1

        


См. также: урок 9 и команды and, xor, not

OUT


(OUT operand to port)

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

 


Схема команды: 

out ном_порта,аккумулятор 

Назначение: вывод значения в порт ввода-вывода.

Синтаксис

Алгоритм работы:

Передать байт, слово, двойное слово из регистра al/ax/eax в порт, номер которого определяется первым операндом.



Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение:

Команда применяется для прямого управления оборудованием компьютера посредством портов. Номер порта задается первым операндом в виде непосредственного значения или значения в регистре dx. Непосредственным значением можно задать порт с номером в диапазоне 0...255. Для указания порта с большим номером используется регистр dx. Размер данных определяется размерностью второго операнда и может быть байтом, словом или двойным словом.



        out     64h,al

        


См. также: уроки 2, 7, 16, 17 и команды in, ins/insb/insw/insd, outs

OUTS/OUTSB/OUTSW/OUTSD


(OUTput Byte/Word/Double word String to port)

Вывод строки байтов/слов/двойных слов в порт

 


Схема команды: 

outs порт,источник 

outsb 


outsw 

outsd


Назначение: вывод в порт из памяти последовательности байт, слов, двойных слов.

Синтаксис

Алгоритм работы:

  • передать данные в порт ввода-вывода, номер которого загружен в регистр dx, из ячейки памяти по адресу ds:esi/si;

  • в зависимости от состояния флага df изменить значение регистров esi/si:

    • если df=0, то увеличить содержимое этих регистров на длину структурного элемента последовательности;

    • если df=1, то уменьшить содержимое этих регистров на длину структурного элемента последовательности;

  • при наличии префикса выполнить определяемые им deiqrbh (см. команду rep/repe/repz/repne/repnz).

Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение:

Команда выводит данные в порт ввода-вывода, номер которого загружен в регистр dx, из ячейки памяти по адресу ds:esi/si (допускается замена сегмента). Недопустимо задание номера порта в команде в виде непосредственного операнда — для этого используется регистр dx. Размеры вводимых элементов зависят от применяемой команды. Команда outs может работать с элементами размером в байт, слово или двойное слово. В качестве операнда в команде указывается символическое имя ячейки памяти, из которой элемент выводится в порт ввода-вывода. Реально символическое имя используется лишь для получения типа элемента последовательности, а ее адрес должен быть предварительно загружен в пару регистров ds:esi/si. Транслятор, обработав команду outs и выяснив тип операндов, генерирует одну из машинных команд outsb, outsw или outsd. Машинного аналога для команды outs нет.

Для того чтобы эти команды можно было использовать для вывода в порт последовательности элементов, имеющих размерность байт, слово или двойное слово, необходимо использовать префикс rep. Он заставляет циклически выполняться команду вывода в порт до тех пор, пока содержимое регистра ecx/cx не станет равным нулю.


.286

;вывести последовательность 10 байт в порт 300h

;(номер порта взят условно)

str_10  db      10 dup(0)

adr_str dd      str_10

        lds     si,adr_str

        mov     dx,300h

rep     outsb

        


См. также: уроки 2, 7, 11 и команды cmps/cmpsb/cmpsw/cmpsd, lods/lodsb/lodsw/lodsd, movs/movsb/movsw/movsd, ins/insb/insw/insd, scas/scasb/scasw/scasd, stos/stosb/stosw/stosd, rep/repe/repz/repne/repnz




Поделитесь с Вашими друзьями:
1   ...   23   24   25   26   27   28   29   30   ...   52




База данных защищена авторским правом ©vossta.ru 2022
обратиться к администрации

    Главная страница