.code
A section for program code.
.const
A declaration section for initialized read-only values.
.data
A declaration section for initialized variables.
.data?
A declaration section for uninitialized variables.
ABI
See application binary interface.
address bus
A set of electronic signals that hold a binary address of a memory element.
aggregate data types
Data types composed of one or more smaller data types.
API
Application programming interface.
application binary interface
A set of conventions that code uses to ensure interoperability between code that calls other functions or procedures and the functions or procedures being called.
ASCII
American Standard Code for Information Interchange.
assembly unit
The assembly of a source file plus any files it includes or indirectly includes.
associativity
Associativity dictates the grouping of operations within a complex expression in which the operators all have the same precedence. For example, if you have two operators, op1 and op2, associativity determines the order of evaluation of the expression x op1 y op2 z. Left-associative operators would produce the result of the evaluation (x op1 y) op2 z, whereas right-associative operators would produce the result of the evaluation x op1 (y op2 z).
automatic variables
See local variables.
AVX
Advanced Vector Extensions.
BCD
Binary-coded decimal.
big endian
Multi-byte data objects in memory are big endian if their HO byte appears at the lowest address in memory and their LO byte appears at the highest address in memory.
calling convention
The protocol for passing data to and from a procedure, including where the data is to be passed, the alignment of the data, and the size of the data.
CLI
Command line interface, or command line interpreter (Windows cmd.exe application).
code snippets
See snippets.
coercion
Forcing a data type to behave as another data type; for example, treating a character value as an integer.
column-major ordering
A function for storing elements of multidimensional array elements in linear memory by storing the elements of a column in contiguous locations and then placing each column after the previous column in memory.
commutative
An operation is commutative if (A op B) is always equal to (B op A).
composite data types
See aggregate data types.
control bus
A set of electronic signals from the CPU that control activities such as reading, writing, and generating wait states.
control characters
Special nonprinting characters that control aspects of the machine printing the characters. This includes operations such as carriage return (moving the printer carriage to the beginning of the line), line feed (moving the printer device down one line), and backspace (moving the print position back one character on the current line).
CTL
Compile-time language.
dangling pointer
Use of a pointer to allocated memory after that memory has been freed and returned to the system (and is possibly being used for another purpose).
data bus
A set of electronic signals from the CPU that transfer data between the CPU and external devices (such as memory or I/O).
delimiter characters
Characters that separate a sequence of other characters belonging to a set (such as a string of numeric characters delimited by spaces or commas).
dependencies
In a makefile, one file is dependent on another if changing that other file requires a recompilation (or other operation) on the original file.
dereference
Access data at an address specified by a pointer variable.
descriptor
A data structure that describes another data structure. Typically, a descriptor contains information such as a pointer to the actual data, type information, or length information.
directive
An assembly language statement that provides information to the assembler but is not a machine instruction and does not generate any code.
domain (of a function)
The set of all possible input values that a function accepts.
dword
Double word (two 16-bit words, forming a 32-bit value).
dynamic type system
A program organization that allows types of objects to change during runtime.
effective address
The ultimate address in memory that an instruction will access, after all the address calculations are complete.
epilogue
The standard exit sequence that cleans up local variable storage for a procedure. Typically, this consists of the following statements:
leave
ret
facade code
Code that changes the parameter or return result interface between calling code and a function or procedure being called to make the calling sequences compatible.
false precision
Extra bits in a computed result that contain garbage values; their presence indicates more precision than is actually present in the result.
field
A member of a record and struct or object.
floating-point unit
A section of a CPU that implements floating-point arithmetic.
FPU
See floating-point unit.
full pathname
A pathname beginning with a backslash (\) character, specifying a path that starts at the root directory. Also see pathnames.
granularity
The smallest unit of access; for example, an MMU may access memory by using page granularity, where the granularity is 4096 bytes.
guard digits (or bits)
Extra digits (or bits) maintained during a calculation to enhance the accuracy of a long chain of calculations.
heap
An area in memory where a program keeps dynamically allocated memory objects.
HLL
High-level language.
HO
High order.
horizontal addition or subtraction
Adding or subtracting adjacent lanes in an XMM or a YMM register rather than the usual corresponding lanes in separate XMM or YMM registers. Also see vertical addition or subtraction.
I/O
Input/output.
IDE
See integrated development environment.
idiom
An idiosyncrasy of the machine.
indirection
A technique in which an instruction’s operand provides the location where the instruction can find the address of the object, rather than the object itself.
induction variable
A variable whose value depends entirely on the value of another variable (typically during the execution of a loop).
integrated development environment
A set of programmer tools including compilers and assemblers, linkers, debuggers, and editors that allow you to develop software all within the same system.
lane
An element of a vector (SSE/AVX packed data types).
leaf function
A function that does not call any other functions. The name comes from a call tree graph, in which its leaf nodes are those procedures that do not call any other procedures (and have no edges coming out of their nodes).
lexicographical ordering
Alphabetical ordering (or, more correctly, ordering based on the character code). Strings are compared on a character-by-character basis from the first character to the length of the shorter string. If two strings are equal to the length of the shorter string, the longer string is the greater of the two. Two strings are equal only if they have the same length and all characters in the string are equal.
library module
A collection of object files. Typically organized into a .lib file (though this is not a requirement for a library module).
lifetime
A period of time, ranging from when storage is first bound to a variable to the point when the storage is no longer available for that variable.
LIFO
Last in, first out.
little endian
Multi-byte data objects in memory are little endian if their LO byte appears at the lowest address in memory and their HO byte appears at the highest address in memory.
LO
Low order.
local variables
Variables (more properly called automatic variables) that have their storage allocated upon entry into a procedure and that storage is returned for other use when the procedure returns to its caller.
loop-invariant computation
A calculation that appears within a loop and always yields the same result on each iteration.
machine code
Binary (or numeric) encoding of assembly language instructions.
macro
A textual sequence that a macro processor will substitute for a macro identifier everywhere that identifier appears in the source file.
macroarchitecture
That view of the CPU’s architecture that is visible to software.
macro function
A macro that you can invoke anywhere in the body of the source file (including in the operand field of an instruction or directive); the macro returns a textual string that the macro invocation substitutes for the invocation.
manifest constant
An identifier representing a constant value. MASM directly substitutes the value of the manifest constant everywhere the identifier appears in the program.
MASM
Microsoft Macro Assembler.
memory management unit
A component of the CPU that translates program addresses into physical memory addresses and handles illegal memory accesses.
microarchitecture
The design of the CPU below the level that is visible to software.
MMU
See memory management unit.
MMX
Multimedia Extensions (extended instruction set for the x86 CPU to support multimedia operations).
mnemonic
Literally, this means memory aid. Applied to instruction names, mnemonic effectively means abbreviation. For example, the mnemonic lea stands for load effective address.
MSVC
Microsoft Visual C++.
namespace pollution
Having many names in a source file, thus limiting the number of available new names a programmer can use. (When a source file contains a large number of symbols, programmers commonly create conflicts by reusing the same name, leading to duplicate symbol errors in the compilation process.)
NaN
Not a number. A floating-point exceptional value indicating that a valid numeric result is unobtainable.
opcode
Operation code. The numeric encoding of a machine instruction.
ordered comparisons
Comparisons between two values, neither of which are NaNs.
oword
Octal word (eight 16-bit words, or a 16-byte value).
partial pathname
A pathname that begins with a directory name (not a backslash character), denoting a path off the current (default) directory.
pass by reference
A parameter-passing mechanism whereby the caller passes the address of the actual parameter data to a procedure or function.
pass by value
A parameter-passing mechanism whereby the caller passes the actual value of a parameter to a procedure or function.
pathnames
A sequence of (sub)directory names separated by backslash (\) characters, possibly ending with a filename.
PC
Program counter. The current instruction or directive address in an assembly language program. PC-relative addressing is an offset from the current machine instruction.
powerset
A set data type implemented by using a single bit to represent each object in the set. If the cardinality of the set (number of members in the set) is n, the set data type will require n bits. In mathematics, the power set of any set S is the set of all subsets of S, including the empty set and S itself; this requires 2n different sets, which is representable by an n-bit bit string.
precedence
When two different operators appear in an expression (without parentheses to denote the order of evaluation), precedence controls which operations occur first. For example, with the operators op1 and op2, and the expression x op1 y op2 z, the order of evaluation is determined by the precedence of the operators. If op1 has higher precedence than op2, the expression is evaluated as (x op1 y) op2 z. If op2 has a higher precedence than op1, the expression is evaluated as x op1 (y op2 z). If both operators have the same precedence, associativity rules control the order of evaluation (see also associativity).
precision
The number of digits or bits maintained in a computation.
programming in the large
Using processes, methodologies, and tools to handle the development of large software systems.
prologue
The standard entry sequence to a procedure, typically consisting of these statements:
push rbp
mov rbp, rsp
sub rsp, size_of_local_variables
proper subset
A set whose elements are all contained within another set, and the two sets are not equal.
proper superset
A set that contains all the elements of another set, and the two sets are not equal.
qword
Quad word (four 16-bit values, forming a 64-bit value).
range (of a function)
The set of all possible output values a function produces.
record
See struct.
row-major ordering
A function for arranging multidimensional arrays in linear memory by storing elements of each row in contiguous memory locations and then placing each row, one after the other, in memory.
saturation
The process of converting a larger (bit-sized) value to a smaller one by clipping (that is, forcing the maximum- or minimum-sized value if the original value is too large to fit in the smaller result).
scalar data type
A primitive, indivisible data type (for example, an integer or a floating-point value) that cannot be broken into any smaller parts (other than individual bits).
scope
The scope of an identifier determines where that identifier is visible (accessible) in the source file during compilation. In most HLLs, the scope of a procedure local variable is the body of that procedure; the identifier is inaccessible outside that procedure.
sign contraction
The process of converting a larger signed value to a smaller signed value.
significant digits
The (number of) digits whose values are maintained during a calculation.
SIMD
See single-instruction, multiple-data instructions.
single-instruction, multiple-data instructions
Specialized machine instructions that operate on two or more pieces of data simultaneously. Provides higher-performance operations for certain multimedia and other applications.
SISD
Single instruction, single data.
snippets
Small pieces of code that demonstrate a concept.
SSE
Streaming SIMD Extensions.
state machine
Programming logic that maintains a history of prior execution via a state maintained by the program. The state could be maintained in variables or in the current execution location of the state machine.
static variables
Variables whose lifetime is the execution time of the whole program; typically, you declare static variables in the .data
, .data?
, or .const
section of an assembly language program.
strength-reduction optimizations
Using a less expensive operation to compute the same result as a more expensive operation.
string descriptor
A data structure that provides information about string data. Typically, a string descriptor contains a pointer to the actual string data, the number of characters in the string (its length), and possibly the string type or encoding (such as ASCII, UTF-8, or information describing other encoding).
struct
A composite data structure composed of a collection of heterogeneous (different typed) objects.
system bus
A collection of electronic signals comprising the address, data, and control buses.
timestamp
A numeric (usually time-based) value associated with an event in the system. Timestamps are monotonically increasing; that is, if two events have timestamps associated with them, the later event will have a larger timestamp value.
TOS
Top of stack.
trampoline
A fixed point in the code where a program can jump (or call) to transfer to another point in the code that is outside the normal range of a jmp
or call
instruction.
tricky programming
Programming constructs that use non-obvious results of a computation.
unordered comparisons
Comparisons between two values, where at least one of the values is a NaN.
unraveling loops
Pulling the body out of a loop and expanding it in place several times (once for each loop iteration) to avoid the overhead of loop control at runtime.
URL
Uniform resource locator (web address).
variant type
A data type that can change dynamically during program execution (that is, it is a varying type).
vector instructions
Instructions that operate on multiple pieces of data simultaneously (SIMD instructions). Specifically, an array of two or more data values.
vertical addition or subtraction
Adding or subtracting corresponding lanes in two XMM or YMM registers. Also see horizontal addition or subtraction.
whitespace characters
Characters that reserve space on a display but don’t otherwise have a printable glyph (such as the space and tab characters).
word
A 16-bit value.
wrapper code
Code that is written to change the behavior of a function call without directly modifying that function (such as changing where the caller passes parameters to the underlying function). Wrapper code is also known as a facade.