Команда neg выполняет вычитание целочисленного операнда со знаком из нуля, превращая положительное число в отрицательное и наоборот. Исходный операнд затирается. В качестве операнда можно указывать регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Команда воздействует на флаги OF, SF, ZF, AF, PF и CF.
Пример
mov АХ,0 0 01 neg AX ;AX=FFFFh=-1
Пример
mov BX,-2 ;BX=FFFEh=-2 neg BX ;BX=0002h
Пример
;В полях данных nmb dw 800lh ;Если число со знаком, ;то -32767 ;В программном сегменте neg nmb ;nmb=7FFFh=+32767
Пример
mov ECX, 5 neg ECX ;ECX=FFFFFFFBh=-5
NOP Холостая команда
По команде пор процессор не выполняет никаких действий, кроме увеличения на 1 содержимого указателя команд IP (поскольку команда пор занимает 1 байт). Команда иногда используется в отладочных целях, чтобы "забить" какие-то ненужные команды, не изменяя длину загрузочного модуля или, наоборот, оставить место в загрузочном модуле для последующей вставки команд. В ряде случаев команды пор включаются в текст объектного модуля транслятором. Команда не имеет ни параметров, ни операндов и не воздействует на флаги процессора.
NOT Инверсия, дополнение до 1, логическое отрицание
Команда not выполняет инверсию битов указанного операнда, заменяя 0 на 1 и наоборот. В качестве операнда можно указывать регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Команда не воздействует на флаги процессора.
Правила побитовой инверсии:
Операнд-бит 0 1 Бит результата 1 0
Пример
mov AX,0FFFFh not AX ;AX=0000h
Пример
mov SI,5551h not SI ;SI=AAAEh
Пример
mov EAX,0C00SFF00h not EAX ;EAX=3FFC00FFh
OR Логическое ВКЛЮЧАЮЩЕЕ ИЛИ
Команда or выполняет операцию логического (побитового) сложения двух операндов. Результат замещает первый операнд (приемник); второй операнд (источник) не изменяется. В качестве первого операнда можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды команды or могут быть байтами или словами. Команда воздействует на флаги OF, SF, ZF, PF и CF, при этом флаги CF и OF всегда сбрасываются в 0.
Правила побитового сложения:
Первый операнд-бит 0101 Второй операнд-бит 0011 Бит результата 0111
Пример
mov AX,000Fh mov BX,00F0h or AX,BX ;AX=00FFh, BX=00F0h
Пример
mov AX,000Fh mov BX,00F7h or AX,BX ;AX=00FFh, BX=00F7h
Пример
mov AX,000Fh or AX,8001h ;AX=800Fh
Пример
; В полях данных mask db 80h ;B программном сегменте mov CH,17h or CH,mask ;CH=97h
Пример
;В полях данных mem dd 80000000h ; В программном сегменте or mem,0C0h ;mem=800000C0h
OUT Вывод в порт
Команда out выводит в порт, указываемый первым операндом, байт или слово соответственно из регистра AL или АХ. Адрес порта помещается в регистр DX. Если адрес порта не превышает 255, он может быть указан непосредственным значением. Указание регистра-источника (AL или АХ) обязательно, хотя с другими регистрами команда out не работает, и их указывать нельзя. Команда не воздействует на флаги процессора.
Пример
mov AL,20h ;Команда конца прерывания (EOI) out 20h,AL ;Вывод команды EOI в порт ;20h контроллера прерываний
Пример
mov DX,3CEh ; Адрес порта mov AL,5 ;Данное out DX,AL ;Вывод байта из AL в порт 3CEh
Пример
mov ЕАХ,1А008РРЗh;Пересылаемое данное mov DX,345h ;Адрес порта out DX,EAX ;Вывод в порт двойного слова