This research addresses the problem of retargeting tools used to translate, analyze, instrument, improve, and migrate programs. Such tools include not only compilers, but also assemblers, linkers, debuggers, binary-code modifiers, and binary translators. The primary retargeting technique being applied is the generation of machine-dependent components from compact, reusable descriptions of machine properties. The research objectives are to describe machine properties clearly and concisely, to represent instruction semantics in a way that supports retargeting, to reuse specifications to retarget a variety of tools, and to reuse analyses of specifications to derive components for multiple machines. Instruction semantics are specified in three layers. Descriptions of whole instruction sets will be written using the metalanguage layer. These descriptions will be mechanically transformed into the register-transfer layer, which defines each instruction's semantics in a form that is easy to analyze. The interpretation layer will provide semantic interpretations of register transfers; different interpretations support different analyses and component generators. The major payoff of this research is in developing new capabilities in machine specification; it should deepen our understanding of properties of machines, foster innovation in machine-level tools, and help others save effort, cost, and time in developing tools of scientific and practical value.