Assembler - язык неограниченных возможностей

         

Запись команд


Названия команд, не принимающих операндов, совпадают с названиями, принятыми в синтаксисе Intel:

nop

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

b — байт;

w — слово;

l — двойное слово;

q — учетверенное слово;

s — 32-битное число с плавающей запятой;

l — 64-битное число с плавающей запятой;

t — 80-битное число с плавающей запятой.

// mov byte ptr variable,0 movb $0,variable // fild qword ptr variable fildq variable

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

// movsx edx,al movsbl %al,%edx

Команды преобразования типов имеют в AT&T названия из четырех букв — С, размер источника, Т и размер приемника:

// cbw cbtw // cwde cwtl // cwd cwtl // cdq cltd

Но многие ассемблеры понимают и принятые в Intel формы для этих четырех команд.

Дальние команды передачи управления (jmp, call, ret) отличаются от ближних префиксом l:

// call far 0007:00000000 lcall $7,$0 // retf 10 lret $10

Если команда имеет несколько операндов, операнд-источник всегда записывается первым, а приемник — последним, то есть в точности наоборот по сравнению с Intel-синтаксисом:

// mov ax,bx movw %bx,%ax // imul eax.ecx,16 imull $16,%ecx,%eax

Все префиксы имеют имена, которыми они задаются как обычные команды, — перед командой, для которой данный префикс предназначен. Имена префиксов замены сегмента — segcs, segds, segss, segfs, seggs, имена префиксов изменения разрядности адреса и операнда- addr16 и data 16:

segfs movl variable,%eax rep stosd

Кроме того, префикс замены сегмента будет включен автоматически, если используется оператор «:» в контексте операнда:

movl %fs:variable, %eax



Содержание раздела