锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
2 #include "..\Common\Base.h"
3
4 struct Register_16_Bit
5 {
6 // General Register
7 struct
8 {
9 BYTE AH; // 8Bit
10 BYTE AL; // 8Bit
11 }AX;
12 struct
13 {
14 BYTE BH; // 8Bit
15 BYTE BL; // 8Bit
16 }BX;
17 struct
18 {
19 BYTE CH; // 8Bit
20 BYTE CL; // 8Bit
21 }CX;
22 struct
23 {
24 BYTE DH; // 8Bit
25 BYTE DL; // 8Bit
26 }DX;
27
28 // Segment Register
29 USHORT CS;
30 USHORT DS;
31 USHORT SS;
32 USHORT ES;
33
34 // Special Register
35 USHORT IP;
36 USHORT SP;
37 USHORT BP;
38 USHORT SI;
39 USHORT DI;
40 struct
41 {
42 BYTE OF : 1;
43 BYTE DF : 1;
44 BYTE IF : 1;
45 BYTE TF : 1;
46 BYTE SF : 1;
47 BYTE ZF : 1;
48 BYTE AF : 1;
49 BYTE PF : 1;
50 BYTE CF : 1;
51 BYTE Reserve : 7;
52 }FR;
53
54 Register_16_Bit()
55 {
56 memset(this,0,sizeof(Register_16_Bit));
57 }
58 };
2 #include "..\Common\Base.h"
3
4 class CDisasmContext
5 {
6 public:
7 virtual bool Disasm(BYTE*& ptr)=0;
8 protected:
9 enum OpCodeHeader;
10 };
3.鎴戜滑瀹氫箟涓涓狫mp綾繪潵瀵笿mp鎸囦護榪涜鍒嗘瀽(瑙丩ibrary\Disasm\Jmp)
2 #include "..\DisasmContext.h"
3
4 class CJmp : public CDisasmContext
5 {
6 public:
7 virtual bool Disasm(BYTE*& ptr);
8 protected:
9 enum OpCodeHeader
10 {
11 JMP_SHORT = 0xEB, // 孌靛唴鐩存帴鐭煩
12 JMP_NEAR = 0xE9, // 孌靛唴鐩存帴璺?/span>
13 JMP_FAR = 0xEA, // 孌甸棿鐩存帴璺?/span>
14 JMP_IND = 0xFF, // 孌靛唴(澶?闂存帴璺?/span>
15 };
16
17 bool Jmp_Short(BYTE*& ptr);
18 bool Jmp_Near(BYTE*& ptr);
19 bool Jmp_Far(BYTE*& ptr);
20 };
2 {
3 if(Jmp_Short(ptr)) return true;
4 else if(Jmp_Near(ptr)) return true;
5 else if(Jmp_Far(ptr)) return true;
6 else return false;
7 }
5.鏈鍚庢垜浠畾涔変竴涓狢Disasm綾繪潵椹卞姩鏁翠綋妗嗘灦(瑙丩ibrary\Disasm\Disasm.h)
2 {
3 public:
4 bool Disasm(BYTE* ptr,int size);
5 protected:
6 CJmp Jmp;
7 CMov Mov;
8 };
2 {
3 BYTE* end = ptr + size;
4 while(ptr < end)
5 {
6 if(Jmp.Disasm(ptr));
7 else if(Mov.Disasm(ptr));
8 else return false;
9 }
10 return true;
11 }
鍏蜂綋鐨勫垎鏋愯繃紼嬪叾瀹炲氨鏄煡琛ㄧ殑榪囩▼,榪欓噷涓嶄竴涓鍒椾婦鍑烘潵浜?
鐩墠鍙炕璇戜簡閮ㄥ垎Jmp鍜孧ov鎸囦護,鏈夊叴瓚g殑鍚屽鍙互鏌ヨ〃瀵瑰叾榪涜鎵╁厖.
鎵鏈変唬鐮佸強鎸囦護鎵嬪唽鎵撳寘涓嬭澆
]]>
涓嬮潰鏄祴璇曟楠?
1.涓嬭澆Userkit
2.瀹夎Userkit
3.鍚姩VS2010騫跺垱寤篊osmosKernelTest欏圭洰
4.鎴戜滑涓哄叾緙栧啓涓涓狿rocess鐨勭粨鏋勮〃紺轟竴涓繘紼?br />
2 {
3 protected string name;
4 protected Process next;
5
6 public Process(string name)
7 {
8 this.name = name;
9 }
10
11 public string Name
12 {
13 get
14 {
15 return name;
16 }
17 set
18 {
19 name = value;
20 }
21 }
22
23 public Process Next
24 {
25 get
26 {
27 return next;
28 }
29 set
30 {
31 next = value;
32 }
33 }
34 }
2 {
3 protected Process Head = null;
4 protected Process Tail = null;
5 protected Process Current = null;
6
7 public void AddProcess(Process P)
8 {
9 if (Head == null) Head = Tail = Current = P;
10 else
11 {
12 P.Next = Head;
13 Tail.Next = P;
14 Tail = P;
15 }
16 }
17
18 public void Schedule()
19 {
20 Console.Write(Current.Name + " ");
21 Current = Current.Next;
22 }
23 }
2 {
3 protected ProcessSchedule ps = new ProcessSchedule();
4
5 protected override void BeforeRun()
6 {
7 Console.WriteLine("Cosmos booted successfully. Type a line of text to get it echoed back.");
8 Process ProcessA = new Process("ProcessA");
9 Process ProcessB = new Process("ProcessB");
10 Process ProcessC = new Process("ProcessC");
11 ps.AddProcess(ProcessA);
12 ps.AddProcess(ProcessB);
13 ps.AddProcess(ProcessC);
14 }
15
16 protected override void Run()
17 {
18 ps.Schedule();
19 }
20 }
8.浣跨敤铏氭嫙鏈鴻皟璇曡繖涓搷浣滅郴緇燂紝浣犱細鐪嬪埌灞忓箷涓?涓繘紼嬪湪鏉ュ洖鍒囨崲錛屼絾鏄熷害闈炲父蹇備簬鏄垜浠負鍏舵坊鍔犱竴浜涘驚鐜潵闄嶄綆鍒囨崲閫熷害
2 for (int j = 0; j < 1000; j++)
3 for (int k = 0; k < 100; k++) ;
鍊煎緱娉ㄦ剰鐨勬槸鐩墠榪欎釜欏圭洰騫朵笉鎴愮啛錛屽簲姝ゅ彧鑳藉疄鐜板崟浠誨姟鐨勬搷浣滅郴緇燂紙鍗充竴涓換鍔℃墽琛屽畬鎴愬悗鍐嶈皟搴﹀彟涓涓換鍔★級銆?/span>
鎵鏈夋枃浠舵墦鍖呬笅杞?/a>
]]>
婧愮爜鎵撳寘涓嬭澆
]]>
娣誨姞浜嗙紪璇戠幆澧?br>
婧愮爜鎵撳寘涓嬭澆
鎺ヤ笅鏉ョ爺絀惰繘紼嬭皟搴?/font>
]]>
鏄庡ぉ鏀懼嚭婧愮爜..
]]>
灝唈mp _task1淇敼涓簀mp $
灝唗imer_interrupt淇敼涓?