當前位置:首頁 » 電腦資訊 » 編譯文件為什麼要分段

編譯文件為什麼要分段

發布時間: 2022-01-26 08:41:39

A. 8086/8088系統中,存儲器為什麼要分段,一個段的最大和最小各為多少位元組

8086/8088系統中,存儲器分段的主要目的是便於存儲器的管理,使得可以用16位寄存器來定址20位的內存空間。一個段最大為64KB,最小為16B。

存儲器一般用來保存程序的中間結果,為隨後的指令快速提供操作數,從而避免把中間結果存入內存,再讀取內存的操作。

由於存儲器的個數和容量都有限,不可能把所有中間結果都存儲在存儲器中,所以,要對存儲器進行適當的調度。根據指令的要求,管理安排適當的寄存器,避免操作數過多的傳送操作。

8086/8088CPU可直接定址1MB的存儲器空間,直接定址需要20位地址碼,而所有內部寄存器都是16位的,只能直接定址6KB,因此採用分段技術來解決。將1MB的存儲空間分成若干邏輯段,每段最長64KB,最短16B。這些邏輯段在整個存儲空間中可浮動。

(1)編譯文件為什麼要分段擴展閱讀:

8086/8088CPU內部設置了4個16位段寄存器,它們分別是代碼段寄存器CS、數據段寄存器DS、堆棧段寄存器SS、附加段寄存器ES、由它們給出相應邏輯段的首地址,稱為「段基址」。段基址與段內偏移地址組合形成20位物理地址,段內偏移地址可以存放在寄存器中,也可以存放在存儲器中。

程序較小時,代碼段、數據段、堆棧段可放在一個段內,即包含在64KB之內,而當程序或數據量較大時,超過了64KB,那麼可以定義多個代碼段或數據段、堆棧段、附加段。

B. 請問Java中為什麼把源文件和編譯生成的類文件分開,這樣做的好處是什麼

java編寫的是解釋型程序而成c/c++編寫的是編譯型程序 c/c++編譯的程序可以直接被操作系統直接運行 java編寫的程序必須通過java虛擬機才能在操作系統運行 .class是java虛擬機能夠識別的一種格式 要說好處 那就不好說了 只能說是編譯型程序和解釋型程序哪個好 而不能說.class文件有什麼好處,這是個人學習軟體的心得 ,希望能幫到你

C. 編譯過程中,源程序為什麼要通過中間代碼生成目標程序

  1. 便於進行與機器無關的優化工作

  2. 使編譯程序改變目標機容易,便於移植

  3. 使編譯程序的結構在邏輯上更為簡單明確

D. 為什麼在編寫程序時,把程序寫在同一個文件編譯成功,但是程序分開寫就會出現錯誤

原因是多方面的。
例如,頭文件,全局量,函數原型聲明,大家都要用到,放在某一個文件里,別的文件就找不到了。
如果分開的文件里,有互相包含的頭文件,你也許要加宏,避免矛盾。

一般來說,分開的文件,可以先編譯,不鏈接,全編譯完,再鏈接 obj 文件。

E. 匯編問題:文件分段每個段64k ,豈不是可執行程序編譯出來最小64 k

每個段的最大值是64k,一個位元組也可以佔用一個段。

F. 論述編譯過程的分段情況

問題1:BDD:通過目標文件歸檔程序(VC++中是lib.exe)和其它方式(例如由dll文件生成lib文件)得到的產物。問題2:AB問題3:不一定。首先,一個完整的程序的全編譯過程可以僅依賴於現有的庫文件,且不在這個程序的編譯過程生成庫文件。其次,庫文件的格式不一定是lib和dll文件。至於手動生成lib和dll,這個和使用的工具相關。例如VC++的命令行可以用編譯程序cl.exe編譯源文件為目標文件,用歸檔程序lib.exe連接obj和lib文件生成靜態庫,用鏈接程序link.exe鏈接目標文件和資源文件生成exe和dll。====[原創回答團]

G. 匯編語言中為什麼要定義段定義段有什麼用請形象簡明 解析~~謝謝

我補充一下:
這個也是和文件結構掛鉤的
比如com文件就不分段,也可以說只有一個段,因為com文件規定這種可執行文件只能有一個段
樓主有興趣可以看看DOS裡面的EXE文件的文件結構

高級語言編譯出來的程序其實也是分段的,因為現在在windows中通用的PE可執行文件也是分段的,但一般高級語言會屏蔽這些東西,只有匯編語言才能清晰的看到
事實上匯編語言也屏蔽了一些文件結構上的東西

H. C語言,為什麼fscanf這一句在編譯可過,但運行後顯示此處分段錯誤

你前面判斷漏了一個=號
if (fp == NULL)

I. 編譯程序為什麼有分前端和後端

隨著大家對瀏覽器頁面的視覺和交互要求越來越高,「套模板」的方式漸漸無法滿足要求,這個所謂的表示層慢慢地遷移到瀏覽器當中去了,一大批像Angular, ReactJS之類的框架崛起,前後端分離。

後端的工程師只負責提供介面和數據,專注於業務邏輯的實現,前端取到數據後在瀏覽器中展示,各司其職,這種分工能夠更好地節省時間,使產品的質量更好。

(9)編譯文件為什麼要分段擴展閱讀:

GCC編譯的前端將不同的高級編程語言經過詞法分析、語法分析轉化為與前端語言無關的統一的中間表示。有了與前端無關的中間表示,GCC的前端將不同的高級編程語言轉換成這種中間表示,這就是GCC處理器支持多種編程語言的根本原因。

前端編譯的主要作用,是將編寫的 .java 文件 編譯成 .class 文件,也就是我們常說的位元組碼文件;位元組碼 文件,裡麵包含了我們編寫的 .java 代碼中的運行邏輯,參數 以及 這些參數在內存中的分配。

J. 8086系統中的存儲器為什麼要採用分段結構有什麼好處

8086CPU中的寄存器都是16位的,16位的地址只能訪問64KB的內存。086系統中的物理地址是由20根地址匯流排形成的,要做到對20位地址空間進行訪問,就需要兩部分地址,在8086系統中,就是由段基址和偏移地址兩部分構成。

這兩個地址都是16位的,將這兩個地址採用相加的方式組成20位地址去訪問存儲器。在8086系統的地址形成中,當段地址確定後,該段的定址范圍就已經確定,其容量不大於64KB。同時,通過修改段寄存器內容,可達到邏輯段在整個1MB存儲空間中浮動。

各個邏輯段之間可以緊密相連,可以中間有間隔,也可以相互重疊(部分重疊,甚至完全重疊)。採用段基址和偏移地址方式組成物理地址的優點是:滿足對8086系統的1MB存儲空間的訪問,同時在大部分指令中只要提供16位的偏移地址即可。

(10)編譯文件為什麼要分段擴展閱讀

把段的起始單元的物理地址除以16的結果稱為段地址,它為16位,寫成十六進制是4位:XXXXH。顯然,段地址決定了段在lMB空間中的位置。段內各存儲單元相對段的起始單元都有一個距離,稱為段內偏移量。

在對內存進行操作時,段地址先確定下來,然後給出不同的段內偏移量,就可以實現段內的定址。段地址也是可以改變的,即段在1MB空間中的位置是可變的,因而可實現1MB的全范圍定址。

由於採用了分段結構,因此可以把每一個存儲單元看成是具有兩種類型的地址:物理地址和邏輯地址。物理地址就是實際地址,它具有20位的地址值,它惟一地標識1MB存儲空間的某一存儲單元。CPU與存儲器之間的信息交換都是使用這個物理地址。

邏輯地址是編程時所使用的地址,它由段地址和段內偏移量組成。邏輯地址和物理地址的關系為:物理地址=段地址16+段內偏移量。由邏輯地址形成物理地址是由匯流排介面部件中的電路實現的。

熱點內容
為什麼有些女生天生對男生沒感覺 發布:2024-12-26 09:10:32 瀏覽:503
為什麼軟體設置快捷鍵無法使用 發布:2024-12-26 09:10:31 瀏覽:942
為什麼私信的解封時間到了還沒解 發布:2024-12-26 09:09:54 瀏覽:864
為什麼打微信視頻看快手會卡 發布:2024-12-26 09:05:41 瀏覽:76
生孩子為什麼要用紅色的紙 發布:2024-12-26 08:58:08 瀏覽:719
為什麼每次撿到錢就丟東西 發布:2024-12-26 08:55:02 瀏覽:916
為什麼飛盧小說以前有時候找不到 發布:2024-12-26 08:32:22 瀏覽:300
循環運行一段時間後為什麼很慢 發布:2024-12-26 08:10:14 瀏覽:268
為什麼今天淘寶進不去 發布:2024-12-26 08:09:30 瀏覽:774
為什麼晚上睡覺老是有蠟 發布:2024-12-26 08:07:07 瀏覽:331