為什麼組合語言不能越過作業系統操控硬體?

時間 2021-05-05 21:53:10

1樓:

問題就是錯的。

組合語言能直接操控硬體。bios 早期由彙編寫成,不能操控硬體嗎?pc 最早的作業系統是 dos,核心是組合語言寫成,不能操控硬體嗎?

8086 和 dos 對許可權管理幾乎沒有,早期極客繞過 dos 操作硬體是家常便飯。

windows 系統之後,系統啟動就不再給您這個機會,但驅動程式之類的部分照樣能。

所以,不是語言的問題,是系統管理的問題。

2樓:

回答的都有點繞,簡單地說

彙編可以超越OS直接操作硬體,常規參考 BootLoader ,任何語言都可以超過 OS 直接操作硬體。

為什麼在OS裡跑的程式不能超過OS的限制。這是軟硬體結合的限制,比如 X86 開始了保護模式以後你所有的記憶體位址都是要被 OS 對映的。

硬體提供機制,OS提供實現。

3樓:jo ji

可以,在計算機出現的遠古時代,的確沒有作業系統,用機器語言,直接寫程式,直接執行,直接列印,可是現在計算機的複雜度來說,你不要乙個中間抽象層,就直接執行你的程式,會出現的問題,你自己想吧......

4樓:張天師

概念不清楚,把基礎知識搞清楚。

1.組合語言,匯程式設計序。

2.機器語言

3.作業系統與現代作業系統的區別。

4.cpu與記憶體的關係。

5樓:機器在思考

我以前也有這樣的疑問,後來發現只用一句話就可以讓你解惑:

你能用的組合語言和作業系統的組合語言是一樣的,但是你的組合語言執行時的許可權是比作業系統低的,這裡許可權的主要意思就是阻擋你訪問一些記憶體,訪問不了記憶體就操作不了硬體

還有一點重要因果倒置的問題常常讓我們困惑:實際上不是為什麼組合語言不能越過作業系統操控硬體而是cpu為了讓你的組合語言不能越過作業系統控制硬體都做了些什麼?硬體是別人造出來的,指令是你寫的,最後還是硬體執行的,所以intel有一千種方法可以做到,你自己也可以想出來一百種方法,想到這個你馬上就釋然了

6樓:用心閣

作業系統就是對硬體進行封裝和管理以便應用軟體和使用者的使用。

通用多工作業系統上跑了很多應用,作業系統有責任保證乙個應用程式的bug不能導致其他應用的正常執行。比如乙個程式崩潰了,作業系統要保證作業系統本身,以及執行的其他程式不受影響。

由於作業系統要管理硬體,並且保障乙個應用程式的缺陷不影響其他程式,必然要存在不同的許可權級別,作業系統能做的,和應用程式能做的。而這個許可權是通過CPU的機制實現的,比如x86的ring0到ring3。

其實也不是作業系統的所有程式都能被信任,所以又分出了作業系統的核心,和外圍工具。作業系統的核心在核心空間,外圍工具和應用程式在使用者空間,在進行系統呼叫時進入核心空間。

所有跑在cpu上的程式都要編譯成cpu指令集的機器語言執行,不論是C++開發的,還是彙編開發的,所以不是許可權高低的依據

7樓:已登出

為了分時排程(多工)、避免被攻擊(病毒)、以及開發應用的便利性(編譯器彙編器),使用者和硬體之間多了個作業系統:多使用者、核心態、資源管理。

8樓:Knly Com

簡單地說,就是x86進入保護模式時,會把所有的IO埠許可權都置為0級,作業系統載入時會將自己放入0級並關門上鎖,所有程序都是1-3級(連中斷向量表都不是自己的,無權更改),因此所有IO都只能通過0級的作業系統公開的API來完成了。

9樓:安陽

其實北極大神已經回答的很好了,剛好我最近在學習寫個簡單的核心。我很有興趣回答這問題,就像我剛開始學習保護模式一樣。

關於使用者的特權級你可以參考《x86組合語言:從實模式到保護模式》這本書,這本書的第14章就是講關於特權級的一些內容,比如dpl,cpl,rpl,但是這本書並沒有講太多關於使用者態通過門切換到核心態的時候,切換堆疊的細節,這個細節可以參考《乙個作業系統的實現》的第三章,

想弄明白的話,建議你去看下GDT、LDT、TSS的概念或者結構還有四種門,呼叫門,任務門、陷阱門、中斷門。再感興趣的話,可以理解一下記憶體的分頁模式,分頁真的是個好東西,我很佩服能夠想出這個東西的人,他簡潔了很多東西。

寫作業系統只能用彙編和 C 語言嗎?

繪圖員 非專業人士,想起來點舊事 當年有個叫吳曉軍的人搞了個2.13 DOS漢字系統,最早是用debug作為開發工具,後來改用彙編開發。 aa11ss55 引導什麼的部分是只能寫彙編 後面寫什麼語言就取決於你的RT了 RT構成了最基本的函式庫,然後你就可以實現自己的標準庫了如果你說 只能用C語言 那...

為什麼在組合語言中需大量使用跳轉指令,而在C語言中卻盡量避免使用goto語句呢?

因為組合語言是低階語言,早期的組合語言根本就是機器指令的助記符,並不支援結構化程式設計,沒有if else這些東西,所有的分支都是靠跳轉或條件跳轉來實現。後期雖然有了巨集彙編,有IF巨集 ELSE巨集這些用了,但是巨集彙編使用起來還是不方便,還有不少問題。C語言就不同了,作為幾乎是最早一批的高階語言...

計算機的組合語言為什麼沒有中文的版本

裝風的小龍 什麼語言的版本都可以,這只是乙個編碼問題,最終翻譯完了以後交給CPU之類的晶元執行的還是代表0 1的電訊號。其實人們一開始程式設計的時候是用的紙帶 Punched tape Wikipedia 使用的乙個著名的編碼方案是ASCII,如果你要用中文程式設計的話,現在應該用utf 8之類的u...