Главная » Просмотр файлов » 2015. Таблица - справочник по командам NASM

2015. Таблица - справочник по командам NASM (1110694)

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

Текст из файла

Disclaimer

Данный справочник составил студент 103 группы (2014 – 2015 год обучения) Аграновский Михаил.

Вы читаете версию от 24.08.2015. Правка и распространение приветствуются.
Надеюсь, что этот документ поможет Вам в успешном прохождении курса по Архитектуре ЭВМ и языку ассемблера!

Ахтунг! В тексте могут содержаться ошибки и неточности – будьте осторожны.


Для понимания, что же такое регистр, (если оно не пришло на лекции) советую прочитать следующий .pdf – документ: http://www.itsusu.ru/pdf/information_technology/work_11.pdf

(Возможно, Вы его уже скачали под именем “Ассемблер NASM для процессоров с архитектурой IA-32. Адресация. Флаги. Вызов внешних подпрограмм.pdf”)

Желаю удачи!

Оглавление

Disclaimer 0

Оглавление 1

Таблица команд 2

Сложение и вычитание 2

Умножение и деление 3

Перемещение данных и приведение типов 5

Сдвиги и вращения 6

Команды работы с битами 10

Команды сканирования битов 10

Команды проверки и модификации битов 10

Организация стека 11

Организация стекового фрейма функции. 12

Регистр EFLAGS 14

Условные переходы (условная передача управления) 16

Условная передача данных 18

Строковые инструкции 19

Числа с плавающей точкой. Сопроцессор x87. 22

Еще команды процессора x86: 24

Средства ввода/вывода io.inc 25

Источники 27

Таблица команд

КОМАНДА

ОПИСАНИЕ

СИНТАКСИС

Комментарий

XCHG op1, op2

Обмен значениями.
Команда XCHG выполняет обмен значений своих операндов.

  • XCHG r/m 8/16/32, r/m 8/16/32
    (память, память нельзя)

Требование: sizeof(op1) == sizeof(op2)

BSWAP op1

Перевод op1 из одной формы адресации в другую (Big-endian <-> Little-endian).

Иначе говоря, разворот байтов.­­­

  • DSWP r32

На флаги не влияет.

http://www.c-jump.com/CIS77/ASM/DataTypes/T77_0230_bswap.htm

Сложение и вычитание

NEG op1

Изменение знака (получение двоичного дополнения к) op1.

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

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

  • если источник=0, то его значение не меняется.

Команда используется для формирования двоичного дополнения операнда в памяти или регистре. Операция двоичного дополнения предполагает инвертирование всех разрядов операнда с последующим сложением операнда с двоичной единицей. Если операнд отрицательный, то операция neg над ним означает получение его модуля.

ADD op1, op2

Сложение

Требование: sizeof(op1) == sizeof(op2)

ADC op1, op2
SBB
op1, op2

ADC:
Сложение двух целочисленных двоичных операндов с учётом флага переноса CF.
op1 = op1 + op2 + CF

SBB:

Вычитание двух целочисленных двоичных операндов с учётом флага CF. Состояние флага CF представляет собой заём от предыдущего вычитания.

op1 = op1 - op2 - CF

Вроде бы:

  • r/m 8/16/32, r/m; (sizeof(op2) = sizeof(op1) )

  • r/m 8/16/32, imm; (sizeof(imm) <= sizeof(op1) )

Флаги:

(для обеих операций)

OF=r SF=r ZF=r AF=r PF=r CF=r

imm [immediate value]– непосредственная константа (число)

AND op1, op2

Побитовое "и"

Неразрушающий аналог:

TEST op1, op2

SUB op1, op2

Вычитание

Неразрушающий аналог:

CMP op1, op2

Умножение и деление

MUL op1

Команда выполняет целочисленное умножение без учёта знака. Явно задается один из множителей. Второй множитель задается неявно в регистре AL/AX/EAX (это местоположение фиксировано). Местоположение результата умножения определяется кодом операции и размером множителей:

Размер операндов

Первый множитель

Второй множитель

Результат

Байт

AL

r/m8

AX

Слово

AX

r/m16

DX:AX

Двойное слово

EAX

r/m32

EDX:EAX

  • r/m 8/16/32

Флаги:

Если старшая половина результата нулевая:

OF=CF=0 SF=? ZF=? AF=? PF=?.

Если старшая половина результата ненулевая:

OF=CF=1 SF=? ZF=? AF=? PF=?.

IMUL

Умножение со знаком

Команда имеет три формы, различающиеся количеством операндов:

  • С одним операндом — требует явного указания местоположения только одного сомножителя, который может быть расположен в ячейке памяти или регистре. Местоположение произведения зависит от размерности множителей:

    Размер операндов

    Первый множитель

    Второй множитель

    Результат

    Байт

    AL

    r/m8

    AX

    Слово

    AX

    r/m16

    DX:AX

    Двойное слово

    EAX

    r/m32

    EDX:EAX

  • С двумя операндами — первый операнд определяет местоположение первого сомножителя. На его место впоследствии будет записан результат. Второй операнд определяет местоположение второго сомножителя.

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

(не совсем совпадает с лекцией)

  • r 8/16/32

  • r 16/32, r/m 16/32

  • r 16/32, r/m 16/32, imm 16/32

imm должен по размеру совпадать с первым множителем или быть размерности до байта.

Флаги:

  • Для однооперандной команды:
    OF=1 CF=1 — значимые биты переносятся в верхнюю половину результата; OF=0 CF=0 — результат помещается точно в младшей половине результата. Состояние остальных флагов: SF=? ZF=? AF=? PF=?.

  • Для двух- и трехоперандной команды:
    OF=1 CF=1 — результат слишком большой и усекается; OF=0 CF=0 — размер результата точно соответствует операнду назначения. Состояние остальных флагов: SF=? ZF=? AF=? PF=?.

Двухоперандная форма не рекомендуема к использованию при умножении на imm – поддерживается не всеми машинами.

DIV op1

Деление без знака.

Команда выполняет целочисленное деление без учёта знака. Делимое задается неявно, и его размер зависит от размера делителя, который явно указывается в команде. Местоположения делимого, делителя, частного и остатка — в зависимости от их размерности:

Размер операнда

Делимое

Делитель

Частное

(a div b)

Остаток

(a mod b)

Байт

AX

r/m8

AL

AH

Слово

DX:AX

r/m16

AX

DX

Двойное слово

EDX:EAX

r/m32

EAX

EDX

  • r/m 8/16/32

IDIV

Деление со знаком.

Команда выполняет целочисленное деление со знаком. Делимое задается неявно, и его размер зависит от размера делителя, который явно указывается в команде. Местоположения делимого, делителя, частного и остатка — в зависимости от их размерности:

Размер операнда

Делимое

Делитель

Частное

Остаток

Байт

AX

r/m8

AL

AH

Слово

DX:AX

r/m16

AX

DX

Двойное слово

EDX:EAX

r/m32

EAX

EDX


Остаток всегда имеет знак делимого. Знак частного зависит от состояния знаковых битов (старших разрядов) делимого и делителя.

  • r/m 8/16/32

Перемещение данных и приведение типов

CBW

CWDE

CWD

CDQ

CBW — преобразование байта в слово.

Команда копирует знаковый бит регистра AL/AX на все биты регистра АН/ЕАХ (используется при подготовке к знаковому делению):

movsx ax, al

CWD, CWDE — преобразование слова в двойное слово.

Команда CWD копирует значение старшего бита регистра АХ на все биты регистра DX (используется при подготовке к знаковому делению):

mov dx, ax

sar dx, 15

CWDE же:

movsx eax, ax

CDQ — преобразование двойного слова в учетверённое слово.

Команда CDQ копирует знаковый бит регистра ЕАХ на все биты регистра EDX (используется при подготовке к знаковому делению):

mov edx, eax

sar edx, 31

Convert Byte to Word;

Convert Word to Dword;

Convert Double to Quad.

MOVZX op1, op2

MOVSX op1, op2

op2 преобразуется к типу op1 и записывается в него. При этом:


MOVZX
выполняет беззнаковое расширение данных (число до нужного размера дополняется слева нулями);
MOVSX выполняет знаковое расширение данных (число до нужного размера дополняется слева битами со значением знакового разряда исходного числа).

  • MOVZX (r 32), (r/m 16)

  • MOVSX (r 16/32), (r/m 8)

movsx (move signed extension);

movzx (move zero extension).

Например:
mov bx, 0xA67B ; bx ← 0xA67B

movzx ebx, bx ; ebx ← 0x0000A67B

movsx eax, bx ; eax ← 0xFFFFA67B

movsx ecx, bl ; ecx ← 0x0000007B

LEA op1, op2

Получение эффективного адреса (смещения) источника.

При этом обращение к памяти (op2) не производится (несмотря на применение квадратных скобок), а, вместо этого, в регистр (op1) заносится адрес, вычисленный обычным способом для второго операнда. (В op1 запишутся младшие sizeof(op1) байт вычисленного адреса).

Общий вид адресного кода при обращении к памяти:

- r (16) / 32, m

Например: lea eax, [ebx+esi*2+2]

«Load Effective Address»

Опр. Эффективный адрес — адрес, по которому происходит обращение к памяти; численно совпадает с виртуальным адресом.

  • в качестве базы может выступать любой РОН (регистр общего назначения);

  • индексом может быть любой РОН, кроме ESP;

  • коэффициент масштабирования может принимать численное значение 1, 2, 4 или 8;

  • смещение задается константой.

http://www.konetlasc..ru/cdo/programmes/assembler/lea.html

Суть:

Пусть имеются переменные int *a, *b и eax = a, ebx = b.

Тогда:
mov eax, [ebx + 4]; <=> a = *(b+1)

lea eax, [ebx + 4]; <=> a = b + 4

Сдвиги и вращения

SHL op1, op2

SHR op1, op2

Логический (беззнаковый) сдвиг влево / вправо

Для SHR:

Сдвиг всех битов операнда вправо на количество разрядов, указанное операндом op2, при этом выдвигаемый справа бит становится значением флага переноса CF. Одновременно слева в операнд вдвигается нулевой бит.

  • op1 = r/m 8/16/32

  • op2 = CL / imm

Флаги:

SHR:
CF=r OF=?r SF=r ZF=r PF=r AF=?

Флаг CF содержит значение последнего выдвинутого из операнда бита. При сдвиге на 1 бит флаг OF устанавливается равным старшему значащему биту исходного операнда. Если количество сдвигов (значение op2) больше 1, то OF=0.

SHL:

CF=r OF=?r SF=r ZF=r PF=r AF=?

Флаг CF содержит значение последнего выдвинутого из операнда бита. Флаг OF представляет интерес, если сдвиг осуществляется на один разряд. При сдвиге на несколько разрядов его значение не определено. По его значению можно судить об изменении знакового разряда операнда:

  • если OF=1, то значение флага CF и значение старшего бита операнда после выполнения сдвига различны;

  • если OF=0, то значение флага CF и значение старшего бита операнда после выполнения сдвига совпадают.

ROL op1, number or CL

ROR op1, number or CL

Циклический сдвиг влево / вправо

ROR:

При циклическом сдвиге разрядов операнда вправо его младший выдвигаемый бит вдвигается в op1 слева и становится одновременно значением старшего бита операнда и флага переноса CF.

ROL:

При циклическом сдвиге разрядов операнда влево его старший выдвигаемый бит вдвигается в операнд справа и становится одновременно значением младшего бита операнда и флага переноса CF.

  • op1 = r/m 8/16/32

  • op2 = {число, CL}

Флаги:

ROR:
CF=r OF=?r SF=r ZF=r PF=r AF=?
Флаг OF представляет интерес, если сдвиг осуществляется на один разряд. При сдвиге на несколько разрядов его значение не определено. По его значению можно судить об изменении знакового разряда операнда:

  • если OF=1, то значение флага CF и значение старшего бита операнда после выполнения сдвига различны;

  • если OF=0, то значение флага CF и значение старшего бита операнда после выполнения сдвига совпадают.



ROL:

CF=r OF=?r SF=r ZF=r PF=r AF=?
Флаг OF представляет интерес, если сдвиг осуществляется на один разряд. При сдвиге на несколько разрядов его значение не определено. По его значению можно судить об изменении знакового разряда операнда:

  • если OF=1, то значение флага CF и значение старшего бита операнда после выполнения сдвига различны;

  • если OF=0, то значение флага CF и значение старшего бита операнда после выполнения сдвига совпадают.

RCR, RCL

Циклический сдвиг влево / вправо с учетом CF:
CF не только запоминает только что вытолкнутое значение, но и участвует в цикле (похоже на единичную задержку на схеме автомата)

SAR op1, op2
SAL op1, op2

SAR:

Арифметический сдвиг вправо.

Сдвиг всех битов операнда вправо на количество разрядов, указанное операндом количество_сдвигов, при этом выдвигаемый справа бит становится значением флага переноса CF. По мере сдвига вправо освобождающиеся места заполняются значением знакового разряда.

SAL:
- сдвиг всех битов операнда влево на один разряд, при этом выдвигаемый слева бит становится значением флага переноса cf;

- одновременно справа в операнд вдвигается нулевой бит;

- указанные выше два действия повторяются количество раз, равное значению второго операнда.

SAR операнд, количество_сдвигов

Флаги

CF=r OF=?r SF=r ZF=r PF=r AF=?

Флаг CF содержит значение последнего выдвинутого из операнда бита. Команда SAR всегда сбрасывает в ноль флаг OF в операциях сдвига на один разряд.

Команды работы с битами


Работать с отдельными битами операндов можно, используя логические операции и сдвиги. Однако кроме них в системе команд x86 существуют специальные команды для работы с битами: это команды сканирования битов и команды проверки (и модификации) битов.

КОМАНДА

ОПИСАНИЕ

СИНТАКСИС

Комментарий

Команды сканирования битов

BSF op1, op2

BSR op1, op2

Поиск самого правого (самого левого) бита-единицы.

Команда BSF (BSR) просматривает биты op2 от младшего (т.е. самого правого) к старшему (BSR - от старшего к младшему) и помещает индекс [в обоих случаях отсчитываемый от младшего бита] первого единичного бита в регистр. Биты нумеруются, начиная с нуля. Если единичный бит найден, то флаг нуля сбрасывается (ZF=0). Если все биты нулевые, то флаг нуля устанавливается (ZF=1), а значение первого операнда будет неопределённым (на разных процессорах может быть по-разному).

  • op1 = r 16/32

  • op2 = r/m 16/32

Команды проверки и модификации битов

BT op1, op2

Копирует из слова op1 значение проверяемого бита (номер бита – op2) в флаг CF.

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

  • op1 = r/m 16/32

  • op2 = r/imm 16/32

Bite Test

BTR

Копирует значение бита в флаг CF и затем сбрасывает его.

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

BTS

Копирует значение бита в флаг CF и затем устанавливает его в 1

BTC

Копирует значение бита в флаг CF и затем инвертирует его

Организация стека

КОМАНДА

ОПИСАНИЕ

СИНТАКСИС

Комментарий

PUSH op1

Помещение в стек.
Команда уменьшает значение регистра-указателя стека ESP на 4 и затем записывает значение источника в вершину стека:

sub esp, 4

mov [esp], op1

- r/m/imm

POP op1

Извлечение из стека.

Команда восстанавливает содержимое вершины стека в регистр, ячейку памяти или сегментный регистр, после чего значение ESP увеличивается на 4:

mov op1, [esp]

add esp, 4

- r/m

Недопустимо восстановление значения в сегментный регистр CS.

LEAVE

Эквивалентна применению 2-х команд:

­­MOV ESP, EBP; (уничтожили фрейм)

POP EBP; вернулись на место стека, откуда функция была вызвана.

CALL func_name

В стек заносится адрес возврата и производится передача управления

-r/m/imm (имя метки / непосредственно адрес в памяти)

RET

Pop'ит с вершины стека 4-байта и записывает их в регистр EIP. Трактует их как адрес возврата (передает управление по этому адресу)

return

RET op1

Относится к соглашению stdcall, заключающемуся в том, что вызываемая функция сама снимает со стека свои аргументы. Делается это просто:

ret num; где num = 4 * число_аргументов

Как следствие, соглашение stdcall не позволяет реализовывать функции с переменным числом параметров, передаваемых по значению через стек.

Организация стекового фрейма функции.

Опр.: Фрейм – блок памяти на стеке, содержащий данный данного вызова функции.

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

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

Тип файла документ

Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.

Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.

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

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

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