root / lab4 / .minix-src / include / i386 / stackframe.h @ 13
History | View | Annotate | Download (1.67 KB)
1 | 13 | up20180614 | #ifndef STACK_FRAME_H
|
---|---|---|---|
2 | #define STACK_FRAME_H
|
||
3 | |||
4 | #include <sys/types.h> |
||
5 | |||
6 | typedef unsigned reg_t; /* machine register */ |
||
7 | typedef reg_t segdesc_t;
|
||
8 | |||
9 | /* The stack frame layout is determined by the software, but for efficiency
|
||
10 | * it is laid out so the assembly code to use it is as simple as possible.
|
||
11 | * 80286 protected mode and all real modes use the same frame, built with
|
||
12 | * 16-bit registers. Real mode lacks an automatic stack switch, so little
|
||
13 | * is lost by using the 286 frame for it. The 386 frame differs only in
|
||
14 | * having 32-bit registers and more segment registers. The same names are
|
||
15 | * used for the larger registers to avoid differences in the code.
|
||
16 | */
|
||
17 | struct stackframe_s {
|
||
18 | u16_t gs; /* last item pushed by save */
|
||
19 | u16_t fs; /* ^ */
|
||
20 | u16_t es; /* | */
|
||
21 | u16_t ds; /* | */
|
||
22 | reg_t di; /* di through cx are not accessed in C */
|
||
23 | reg_t si; /* order is to match pusha/popa */
|
||
24 | reg_t fp; /* bp */
|
||
25 | /* reg_t st; */ /* hole for another copy of sp */ |
||
26 | reg_t bx; /* | */
|
||
27 | reg_t dx; /* | */
|
||
28 | reg_t cx; /* | */
|
||
29 | reg_t retreg; /* ax and above are all pushed by save */
|
||
30 | /* reg_t retadr; */ /* return address for assembly code save() */ |
||
31 | reg_t pc; /* ^ last item pushed by interrupt */
|
||
32 | reg_t cs; /* | */
|
||
33 | reg_t psw; /* | */
|
||
34 | reg_t sp; /* | */
|
||
35 | reg_t ss; /* these are pushed by CPU during interrupt */
|
||
36 | }; |
||
37 | |||
38 | #endif /* #ifndef STACK_FRAME_H */ |