Next: i386-Syntax, Previous: i386-Options, Up: i386-Dependent [Contents][Index]
.lcomm symbol , length[, alignment]
Reserve length (an absolute expression) bytes for a local common denoted by symbol. The section and value of symbol are those of the new local common. The addresses are allocated in the bss section, so that at run-time the bytes start off zeroed. Since symbol is not declared global, it is normally not visible to ld
. The optional third parameter, alignment, specifies the desired alignment of the symbol in the bss section.
This directive is only available for COFF based x86 targets.
.largecomm symbol , length[, alignment]
This directive behaves in the same way as the comm
directive except that the data is placed into the .lbss section instead of the .bss section Comm.
The directive is intended to be used for data which requires a large amount of space, and it is only available for ELF based x86_64 targets.
.value expression [, expression]
This directive behaves in the same way as the .short
directive, taking a series of comma separated expressions and storing them as two-byte wide values into the current section.
.insn [prefix[,...]] [encoding] major-opcode[
+r|/extension
] [,operand[,...]]This directive allows composing instructions which as
may not know about yet, or which it has no way of expressing (which can be the case for certain alternative encodings). It assumes certain basic structure in how operands are encoded, and it also only recognizes - with a few extensions as per below - operands otherwise valid for instructions. Therefore there is no guarantee that everything can be expressed (e.g. the original Intel Xeon Phis MVEX encodings cannot be expressed).
VEX
[.len
][.prefix
][.space
][.w
]EVEX
[.len
][.prefix
][.space
][.w
]XOP
space[.len
][.prefix
][.w
]Here
LIG
, 128
, 256
, or (EVEX only) 512
as well as L0
/ L1
for VEX / XOP and L0
...L3
for EVEXNP
, 66
, F3
, or F2
0f
, 0f38
, 0f3a
, or M0
...M31
for VEX08
...1f
for XOP0f
, 0f38
, 0f3a
, or M0
...M15
for EVEXWIG
, W0
, or W1
Defaults:
LIG
otherwise. (Obviously len has to be omitted when theres EVEX rounding control specified later in the operands.)NP
.WIG
otherwise.+r
can be suffixed to the major opcode expression to specify register-only encoding forms not using a ModR/M byte. /extension
can alternatively be suffixed to the major opcode expression to specify an extension opcode, encoded in bits 3-5 of the ModR/M byte.Encoding of operands: While for a memory operand (of which there can be only one) it is clear how to encode it in the resulting ModR/M byte, register operands are encoded strictly in this order (operand counts do not include immediate ones in the enumeration below, and if there was an extension opcode specified it counts as a register operand; VEX.vvvv is meant to cover XOP and EVEX as well):
obviously with the ModR/M.rm slot skipped when there is a memory operand, and obviously with the ModR/M.reg slot skipped when there is an extension opcode. For Intel syntax of course the opposite order applies. With +r
(and hence no ModR/M) there can only be a single register operand for legacy encodings. VEX and alike can have two register operands, where the second (first in Intel syntax) would go into VEX.vvvv.
Immediate operands (including immediate-like displacements, i.e. when not part of ModR/M addressing) are emitted in the order specified, regardless of AT&T or Intel syntax. Since it may not be possible to infer the size of such immediates, they can be suffixed by {:sn}
or {:un}
, representing signed / unsigned immediates of the given number of bits respectively. When emitting such operands, the number of bits will be rounded up to the smallest suitable of 8, 16, 32, or 64. Immediates wider than 32 bits are permitted in 64-bit code only.
For EVEX encoding memory operands with a displacement need to know Disp8 scaling size in order to use an 8-bit displacement. For many instructions this can be inferred from the types of other operands specified. In Intel syntax DWORD PTR and alike can be used to specify the respective size. In AT&T syntax the memory operands can be suffixed by {:dn}
to specify the size (in bytes). This can be combined with an embedded broadcast specifier: 8(%eax){1to8:d8}.
.noopt
Disable instruction size optimization.
Next: i386-Syntax, Previous: i386-Options, Up: i386-Dependent [Contents][Index]