13.2 Registers to be saved

---------------------------

Registers to be saved: BP, DI, SI, DS, SS, SP, CS and IP.

BP is used as a pointer to local and function parameters in the stack,

which necessitates saving it.

DI and SI need not be saved if the programmer is aware of the

consequences. DI and SI are often used for indexing arrays as for example:

dog = firehydrant(1,red) + legs[DI];

If DI was not saved in the firehydrant function, the value assigned to

variable dog will most likely be incorrect, since the index for the array

legs was changed. Actually, for all functions to agree closely, the

functions must have a special pointer in the commentary showing that the

contents of DI and/or SI are not saved.

DS points to the data segment, and all operations with global variables

use this value.

SS stores the stack segment and must be saved. SP points to the current

position in the stack and must also be saved.

CS stores the program code segment. All commands are chosen using CS

and IP, consequently these values must be saved. IP, as we know, is the

pointer for the command address, and CS and IP cannot be changed directly

in 8086, 8088, 286, 386, 486 or pentium processors.