2015. Таблица - справочник по командам NASM (1110694), страница 3
Текст из файла (страница 3)
Команды пересылают элемент из одной ячейки памяти в другую. Размеры пересылаемых элементов зависят от применяемой команды. Команда movs может работать с элементами размером в байт, слово, двойное слово. В качестве операндов в команде указываются идентификаторы последовательностей этих элементов в памяти. Реально эти идентификаторы используются лишь для получения типов элементов последовательностей, а их адреса должны быть предварительно загружены в указанные выше пары регистров. Транслятор, обработав команду movs и выяснив тип операндов, генерирует одну из машинных команд movsb, movsw или movsd. Машинного аналога для команды movs нет. Для адресации операнда приемник обязательно должен использоваться регистр es.
Для того чтобы эти команды можно было использовать для пересылки последовательности элементов, имеющих размерность байт, слово, двойное слово, необходимо использовать префикс rep. Префикс rep заставляет циклически выполняться команды пересылки до тех пор, пока содержимое регистра ecx/cx не станет равным нулю.
str1 db 'str1 копируется в str2'
len_str1=$-str1
a_str1 dd str1
str2 db len_str1 dup (' ')
a_str2 dd str2
...
mov cx,len_str1
lds si,str1
les di,str2
cld
rep movsb
Числа с плавающей точкой. Сопроцессор x87.
Размер числа с плавающей точкой (бит) | Соответствующая директива объявления переменной |
32 | dd |
64 | dq |
80 | dt (TWORD) |
"Стек" сопроцессора x87: регистры ST0 ... ST7, где ST0 - вершина "стека".
Все команды x87 имеют префикс F.
Суффикс P указывает на то, что при выполнении команды на верхушке стеке освобождается один регистр и все имена оставшихся регистров «сдвигаются» описанным выше образом.
КОМАНДА | ОПИСАНИЕ | СИНТАКСИС | Комментарий |
FINIT | Инициализация сопроцессора x87 | Необходимо выполнить перед началом использования сопроцессора. | |
FLD op1 | Загружает в стек сопроцессора op1 | - m 32/64/80 | Float LoaD |
FLD1 FLDZ FLDPI | Заносят в стек сопроцессора соответственно числа | ||
FST op1 FSTP op1 | FST - копирует содержимое верхушки стека в память (op1) FSTP: FST + pop | - m 32/64/80 | |
FADDP FSUBP FMULP FDIVP FABS | извлекает из стека операнды и кладет в ST0 результат операции sub: ST1-ST0 | ||
fucomi op1 | compare st0 and op1 | - регистр x87 |
Еще команды процессора x86:
КОМАНДА | ОПИСАНИЕ | СИНТАКСИС | Комментарий |
int op1 | инициирование прерывания | - op1 - 16-ричный код прерывания. | int - interrupt |
iter (семейство команд) | возврат из обработчика прерывания | ||
HLT | Команда приостановки процессора до тех пор, пока не возникнет аппаратное прерывание. Когда процессор находится в стадии исполнения этой команды, он потребляет минимальное количество энергии, и, следовательно, почти что не выделяет тепла. | от англ. halt — остановка | |
NOP | Пустая команда. | сокращение от «No OPeration» | |
RDTSC | Ассемблерная инструкция для платформы x86, читающая счётчик TSC (Time Stamp Counter) и возвращающая в регистрах EDX:EAX 64-битное количество тактов с момента последнего сброса процессора. | сокращение от «Read Time Stamp Counter» |
Средства ввода/вывода io.inc
Имя макроса | Описание макроса |
Output | |
PRINT_UDEC size, data PRINT_DEC size, data | Вывод числовых данных заданных параметром data в 10-чном представлении. Параметр size – число, указывающее размерность данность в байтах; допускаются значения 1, 2, 4. В качестве параметра data может выступать числовая константа, символьная константа, имя переменной, имя регистра или адресное выражение (без спецификатора размера данных в памяти). Если задается регистр большего размера, то берется заданное параметром size количество младших разрядов. PRINT_UDEC интерпретирует число как беззнаковое, PRINT_DEC — как знаковое. |
PRINT_HEX size, data | Аналогично предыдущему, но данные выводятся в 16-чном представлении. |
PRINT_CHAR ch | Печатается символ, заданный параметром ch. В качестве параметра может выступать численная константа, символьная константа, имя переменной, имя регистра или адресное выражение (без спецификатора размера данных в памяти). Печатается всегда содержимое 8 младших разрядов. |
PRINT_STRING data | Печать строки текста, оканчивающейся символом с кодом 0. В качестве параметра можно передавать строковую константу, имя переменной или адресное выражение (без спецификатора размера данных в памяти). В случае печати строковой константы, наличие символа с кодом 0 в конце строки необязательно. |
NEWLINE | Переводит печать на новую строку. |
Input | |
GET_UDEC size, data GET_DEC size, data | Ввод числовых данных в 10-чном представлении с клавиатуры. Размер вводимых данных ограничен параметром size, который задается числом (1, 2, 4). Введенные данные обрезаются соответствующим образом. Параметр data– либо имя переменной, либо имя регистра, либо адресное выражение (без спецификатора размера данных в памяти). Если задается регистр большего размера, то старшие разряды заполняются знаковым битом в случае GET_DEC и нулями в случае GET_UDEC. GET_UDEC считывает беззнаковое число, GET_DEC — знаковое. Запрещается использовать в качестве параметра регистр esp. |
GET_HEX size, data | Аналогично предыдущему, но данные задаются в 16-чном представлении с префиксом 0x. |
GET_CHAR data | Аналогично предыдущему, но происходит считывание одного символа, нажатие Enter не требуется. Более того, нажатие Enter будет расцениваться как ввод управляющих символов перевода строки: 0xD 0xA в ОС Windows, 0xA в ОС *nix. Если параметр – регистр, размер которого больше 1 байта, значение считанного символа будет дополнено нулями. |
GET_STRING data, maxsz | Ввод последовательности символов длиной не более чем (maxsz-1). Чтение последовательности останавливается на EOF или переводе строки, причем перевод строки сохраняется в буфере. В конец считанной строки добавляется символ с кодом 0. Параметр data – либо имя переменной, либо адресное выражение (без спецификатора размера данных в памяти). Параметр maxsz –регистр (io.inc версия 1.1) или числовая константа. |
Вызов библиотечных функций языка СИ | |
CEXTERN cfunc_name |
Источники
(упорядочены в порядке уменьшения вклада в данный документ)
-
Материалы лекций (слайды можно скачать на http://asmcourse.cs.msu.ru/ ).
-
http://asmworld.ru/spravochnik-komand/
-
http://www.itsusu.ru/pdf/information_technology/work_11.pdf
-
http://www.kolasc.net.ru/cdo/programmes/assembler/
-
А. В. Столяров. Программирование на языке ассемблера NASM для ОС Unix. Учебное пособие: http://www.stolyarov.info/books/asm_unix
-
Сайт Сергея Бугаева (студента 103 группы по состоянию на 2014-2015 учебный год): https://bugaevc.github.io/asmwall/
Обращаю внимание: названия команд на сайте кликабельны. -
http://pastebin.com/J7d7R6EF