A dynamic program slice is an executable part of the program whose behavior is identical, for the same program input, to that of the original program with respect to a variable(s) of interest at some execution position. The existing methods of dynamic slice computation are limited for structured programs. In this paper we present a novel approach of dynamic slice computation for unstructured programs. The approach employs the notion of removable blocks in finding dynamic program slices. Dynamic slices are derived by identifying not only these parts of program execution that contribute to the computation of the value of a variable of interest, but also these parts of program execution that do not contribute to the computation of the variable value. Removable blocks are used to identify such non-contributing computations.