作業系統與網路實現 之二十 乙

2021-07-25 20:08:34 字數 4252 閱讀 7125

kernel.asm [

bits32]

[global

start

];我們必須匯出

start

這個入口,以便讓鏈結器識別 ,

[extern

_ya_main

];用到本檔案外定義的函式 在

kernel.c

jmpstart

start:

call

_ya_main      

;呼叫c

jmp$

kernel.c

#include "..\include\graph.h"

#include "..\include\pciprobe.h"

unsigned

short

color ;

void

ya_main()

//ya_draw_chars(  250, 50, "北橋存在

" , color) ;

pciprobe();

//ya_draw_4bit_bmp(500 , 20 , 0x68400) ;

netcardprobe();

// 顯示記憶體中

0x400120

開始的數值,以

16進製制

0x顯示,每行八個,共三行

char*b

=(char

*)0x400120;

show_data(b

,8,0

,40,color );

b =b+

0x20

;//下一行八個雙字

8x4 = 32 = 0x20

show_data(b

,8,0

,60,color );

netinitial

();

} graph.c

#include "..\include\graph.h"

unsigned

int*

addr =(

int*)

0x10050;

// 顏色合成函式

unsigned

short

rgb_mix

(unsigned

charr ,

unsigned

charg ,

unsigned

charb )

sa;

}ua;

ua.sa.

r =r >>3;

ua.sa

.g =g

>>2;

ua.sa

.b =b

>>3;

returnua.

color ;

}

// 畫點函式

void

draw_dot

(unsigned

intx

,unsigned

inty

,unsigned

short

color )

// 顯示英文

void

ya_draw_english

(unsigned

intx

,unsigned

inty

,unsigned

intaddr_in_font

,unsigned

short

color )

} ta

++;// 顯示下一行

tb =x

; }

}

// 顯示漢字

void

ya_draw_chinese

(unsigned

intx

,unsigned

inty

,unsigned

intaddr_in_font

,unsigned

short

color )

} }ta

++;// 顯示下一行

tb =x

; }

}

// 顯示字串

void

ya_draw_chars

(intx,

inty

,char

*chars

,unsigned

short

color)

else }

} void

ya_draw_4bit_bmp

(unsigned

intx

,unsigned

inty

,unsigned

intaddr)

;//調色盤值

intlx =x ;

//每行要從這裡開始,保留這個值

int*ta =(

int*)(

addr

+0xa);

//位圖資料開始偏移量 在第

0xa位元組共四位元組

int*tb =(

int*)(

addr

+0x22);

//位圖資料長 在第

0x22

位元組共四位元組

int*width =(

int*)(

addr

+0x12);

//點陣圖寬  在第

0x12

位元組共四位元組

int*height =(

int*)(

addr

+0x16);

//點陣圖高 在第

0x16

位元組共四位元組

inttd ;

//一行要讀的位元組數

intte ;

//補幾個位元組

inttf ;

//圖寬

tf =*

width ;

switch(tf

%8)

inttc =

td +

te ;

char

*string =(

char

*)(addr

+*ta

+*tb-tc

);//資料從最末端

-32位元組處開始

for(inti=

0;i<

*height ;i

++)

unsigned

char

c2 =

ch &

0xf;

//取得低四位

pa =color[c2

];//取得調色盤的對應顏色值 if

(pa!=0xffff)

string++;

x++;

}string

=string

+te -tc

*2;//必須是四個位元組寬,補

x個位元組,然後後退

xx位元組 x

=lx ;

y++; }

} //讀記憶體值

,n是要顯示的個數

void

show_data

(char

*string

,intn ,

intx

,inty ,

unsigned

short

color )

//0的

ascii

值為0x30

else

//a+0x57 = 0x61,正是小a的值

ya_draw_english(x

,y ,pos

,color );

x +=8

; if(

lo4

<

0xa)

//0的

ascii

值為0x30

else

//a+0x57 = 0x61,正是小a的值

ya_draw_english(x

,y ,pos

,color );

x +=8

; *string

--; }

x +=16;

//多加乙個

8,中間有空格好看

string

=string +8

;//前面減了4再加

8相當於加

4,指向下乙個雙字

,*string = *string + 8

是向其指向的值加8

} }

作業系統與網路實現 之二十 丙

port.c unsigned char readb unsigned shortp 讀位元組8位 unsigned short readw unsigned shortp 讀字16位 unsigned intreadl unsigned shortp 讀雙字32位 void writeb unsi...

作業系統 作業系統的設計與實現

系統設計的首要問題是定義目標和規範。從高層來說,系統設計取決於所選硬體和系統型別 批處理 分時 單使用者 多使用者 分布式 實時或通用。除了最高設計層外,需求可能很難說清,但需求可以分為兩類 使用者目標和系統目標。使用者要求系統具有一定的優良效能 系統應該易於學習和使用 可靠 安全和快速。研發人員為...

作業系統與網路 2019 1 30

void cmodifymemory firstfind dword nfindvalue 6.完成 findonepage 函式,首先用乙個陣列來儲存查詢到的內容 dword sz buffer 1024 7.讀程序位址空間的內容,讀失敗則返回 if 0 readprocessmemory m h...