This paper formulates as integer programming problems three methods for assigning data items to registers in the compilation process-r-the one-one, many-one, and many-few global assignment methods.Three algorithms are described for obtaining feasible solutions to the many-one and many-few global assignment problems. One provides an optimal solution. The others, which provide good approximations, appear to be sufficiently fast for inclusion in an optimizing compiler.The assignment of data items to registers is one of the functions performed by a compiler during the preparation of a program for execution. The way in which this function is performed affects the execution characteristics of the program. A good register assignment scheme can, for example, reduce the number of movements of data items between main storage and registers and can allow use of the faster register-to-register type instructions. In this paper, we consider three related methods of assigning data items to registers.After establishing some basic definitions and assumptions, and distinguishing between global and local assignment, we discuss the three methods of global assignment-c-one-one, many-one, and many-few.Global one-one assignment associates exactly one data item with each register in the region of assignment. The method is interesting because it is used in commercially available compilers. In this paper, it is used as a standard for measuring the effectiveness of the many-one and many-few global assignment methods.Global many-one assignment associates at least one data item with a single register in the region of assignment. We describe a branch-and-bound procedure for obtaining optimal solutions to No.4· 1970 ASSIGNING DATA ITEMS TO REGISTERS 281