B
Glossary

Symbols

.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.

A

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.

B

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.

C

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.

D

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.

E

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

F

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.

G

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.

H

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

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.

L

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.

M

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++.

N

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.

O

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).

P

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.

Q

qword

Quad word (four 16-bit values, forming a 64-bit value).

R

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.

S

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.

T

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.

U

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).

V

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.

W

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.