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

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

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

□ b - байт;

□ w- слово;

а 1 - двойное слово;

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

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

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

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

// inov byte ptr variable,0

movb      $0,variable // fild qword ptr variable

fildq variable

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

//

variable:

.byte 7

пор

movsbl

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

Ассемблер в среде UNIX

//

cbw

cbtw

//

cwde

cwtl

//

cwd

cwtd

//

cdq

cltd

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

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

// call far 0007:00000000

lcall $7,$0

// retf 10

Iret $10

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

// jkiov ax.bx

movw %bx,%ax // imul eax,ecx,16

imull $16,%ecx,%eax

У всех префиксов перед командой, для которой данный префикс предназна­чен, есть имена, как у обычных команд. Имена префиксов замены сегмента - segcs, segds, segss, segfs, seggs; имена префиксов изменения разрядности адреса и операн­да - addr 16 и data 16:

segfs

movl      variable,Леях

rep stosd

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

movl %fs:variable,teax