請問對組合語言、C\C++熟的高手們

這是一段Boot Sector...

org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov ax, 01301h
mov bx, 000ch
mov dl, 0
int 10h
ret
BootMessage: db "Hello, OS world!"
time 510-($-$$) db 0


dw 0xaa55


有兩個問題想問一下,

1.Boot Sector一定要滿512B嗎?
2.有辦法用C\C++寫這一段並且執行嗎

ps:這是寫作業系統前的一段Boot Sector
2009-03-21 22:05 發佈
1. 一個 Secctor 大小就是 512Bytes
2. 通用型的純 C / C++ 不行,除非它的標準函式庫(如 studio.h)、物件庫(如 iostream)完全沒有用到系統呼叫(如 INT 21h 或 WinAPI...etc.)。
3. 如果你很堅持一定要用 C,或許有個辦法可以讓你比較迂迴,Borland 或是 M$ 的 C/C++ Complier 都有將標準 C/C++ 轉為組語的功能,如果你用純 C 且不使用標準函式庫,只用 C/C++ 來控制變數與流程的話,或許可以考慮下面這個方式:

main()
{

.
.
asm {
...
...
...
}
.
.
.
}

然後轉成組語之後再開編輯器,手工將 main() 用組語改寫,以 tlink 轉為 .com 格式之後再寫入 Sector 之中。

不過相信我,這樣寫除了流程分支控制會稍微舒服一點之外,效率與效能完全不能跟純組語手工打造相比。
kisaraki88 wrote:
1. 一個 Secc...(恕刪)


謝謝大大的解說,這段Sector也只是我在網路上看到的,

一個Sector是512byte是規定好的嗎?也就是說,一開始讀的時候,就算裡面的內容流程一樣,但是沒有512byte就會讀不到

另外,不是說c/c++適合寫一些硬體底層的東西,為什麼還會有分純c不行

不太懂
在無法開花結果的地方努力,就是執著;在可以開花結果的地方努力,就是堅持。
magicianQQ wrote:
謝謝大大的解說,這段Sector也只是我在網路上看到的,

一個Sector是512byte是規定好的嗎?也就是說,一開始讀的時候,就算裡面的內容流程一樣,但是沒有512byte就會讀不到不知

另外,不是說c/c++適合寫一些硬體底層的東西,為什麼還會有分純c不行不知

不太懂orz


一個 Sector 是 Format 的時候就決定了,
去看一下 DOS 下頭的 FORMAT /?
會給你一點概念。這是硬體規格,跟你用什麼語言無關。

我沒說純 c 不行,我只說「通用編譯器的標準函式庫」的問題。

c/c++ 本身其實沒什麼功能,主要的能力都是來自於外部的函式庫,
c/c++ 本體翻出來的組語還滿 ok 的,
但是外部函式庫你根本不知道底層做了什麼事情,
但函式庫若有針對特殊硬體特化,當然要控制什麼都很方便。

boot 的時候,作業系統根本就沒有載入,
你所擁有的資源只有CPU 指令、硬體 I/O 跟 BIOS 中斷而已,
剩下的功能,請自行用組語幹出來。

在 boot 的階段,如果你使用的 c/c++ 裡頭的函式庫有使用到作業系統提供的功能,
(例如 DOS 提供了 INT 21h、Windows 提供的 WinAPI 等)
那麼一定死掉。

所以通用的 C/C++ 函式庫大概都不能使用,
連 printf() 都會死給你看,
如果找不到專門的函式庫,
就乖乖用組合語言手工打造吧!

kisaraki88 wrote:
一個 Sector ...(恕刪)


原來如此,我還在想半天,為什麼一定要填充到512byte,現在懂了

標準函式庫,其實我也不熟

那我想問一下,什麼時候適合引用標準函式庫,什麼時候不適合呢
在無法開花結果的地方努力,就是執著;在可以開花結果的地方努力,就是堅持。
magicianQQ wrote:
標準函式庫,其實我也不熟XD

那我想問一下,什麼時候適合引用標準函式庫,什麼時候不適合呢不知



怎麼會不熟,C 的 studio.h 跟 C++ 的 iostream 都是標準函式庫之一。
其他還有很多,看一下 help 裡頭都會有寫。

kisaraki88 wrote:
怎麼會不熟,C 的 ...(恕刪)


沒錯,標準函式庫,用來用去只有stdio.h、stdlib.h和iostream

其他的不熟
在無法開花結果的地方努力,就是執著;在可以開花結果的地方努力,就是堅持。
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?