1個人開發作業系統之陣列與字串的使用

2021-08-22 05:10:34 字數 1354 閱讀 9054

1個人開發作業系統之介面與字型》一文中有遺留乙個困擾我

3周的問題。既字串和陣列編譯後屬於

.data section

,使用objcopy

,將obj

檔案轉換為

binary

檔案後,程式不能正確地找到這些

.data section

的位址。其實問題不在

objcopy

,而是ld

。靜態陣列和字串指標位址是

.data section

在記憶體中的相對位址。所謂相對位址指相對於記憶體中

.text section

位址。在沒有制定

ld聯結器

.text section

位址時,

ld預設為

.text section

位址為0x1000

。這樣,

.data section

的位址是根據

0x1000

計算出來的。而我的

colimasmain

函式是從

0x280000

開始執行的,所以陣列與字串的位址是錯的。要改正

.data section

的位址非常簡單,只需要告訴

ld我的

text section

的正確位址。

我在makefile

檔案裡加入ld的

flags ldflags =-ttext 0x280000

。修改bootpack.c

,增加資料組變數,用於設定

16種顏色。

static unsigned char table_rgb[16 * 3] = ;

修改set_palette

函式void set_palette(unsigned char *rgb)

io_store_eflags(eflags);

return;

}編譯後和前文結果一樣。《os

自作入門》給出一套完整的字型物件檔案,該

obj檔案可以和我的程式連線在一起,因此就不需要

font.h

和font.c

檔案。顯示字串函式為:

void drawstring(char *vram, int xsize, int x, int y, char c, unsigned char *s)

return;

}在介面上顯示字串:

void colimasmain(void) }

執行結果:

乙個人寫的作業系統 Sparrow OS

自己寫乙個作業系統,這是在過去的幾年裡我一直為之努力的目標,現在終於完成了。自己動手寫作業系統的動機最初來自於學習linux遇到的困難。我是乙個linux愛好者,這裡所說的linux主要指核心。但我的工作從來都沒有與linux聯絡得上 一開始的幾年是做嵌入式linux手機上的一些應用,在愛可信 ac...

作業系統之程序與執行緒1 程序概述

管理cpu時,引出 程序 執行緒 對於含有io指令和不含io指令的一段程式,cpu的執行時間要查好幾個量級,因為cpu在硬體電路上工作,速度特別快,io指令在磁碟 磁臂 機械結構 工作,所以執行速度差好幾個量級。可以把cpu看做人,其他指令操作都看成要做的事情,因此就可以產生 等待 先做別的事不斷檢...

Orange s 乙個作業系統的實現之筆記1

orange s 乙個作業系統的實現 之筆記1 從今天開始,我們要自己設計乙個超簡陋的os了,主要的參考教材就是于淵的 orange s 乙個作業系統的實現 這是一本非常非常好的書!俗話說,工欲善其事,必先利其器,我們需要以下工具 bochs 執行我們的os的主要平台,這是乙個x86指令集模擬器,非...