A subprogram which is generally written using a precise formal definition. The procedure is defined and given an identifier (or name). This identifier can be used subsequently just like any other program instruction. A procedure receives data from the program, manipulates it in some way and makes the results available to the program. Such procedures are usually associated with high-level languages, although sophisticated assembly languages also allow procedure definitions.