回覆列表
  • 1 # 味冷

    假如你設計一個數字電路,包括一個加法器和一個乘法器。

    你希望根據需要,有時對輸入資料做加法,有時對輸入做乘法,該怎樣做呢?最早的計算機,是靠手工連線的,與其說是計算機,不如說是巨型麵包板。直到馮洛伊曼的edvac計劃把儲存器引入計算機。

    假設加法器和乘法器都具有使能端,兩個使能端為01,就是加法器工作,是10,就是乘法器工作。

    然後為了讓電路根據要求的順序做加法和乘法,你把一系列01、10儲存起來,當你要做加法,加法,乘法,加法時,儲存的就是01011001。你增加了一個時序電路,每次讀出兩個位,把高低電平加在兩個使能端上,替代你的手工接線。01和10這兩個數碼能控制電路的行為,起名叫機器碼。

    然而這樣二進位制的東西並不好記憶。於是你給01起了個名字,叫add,10起名叫mul。你的這組運算就記為add,add,mul,add。

    add,mul這種助記符,就叫程式碼,具體說是彙編程式碼;你會找一個悲催的助手,幫你把程式碼替換成01,10這種機械碼。當然總有一些助手認為這個活動太沒有人生價值,於是不甘心當花瓶的女助手葛麗絲·霍普(Grace Murray Hopper)設計了將程式碼翻譯成機器碼的程式碼,這個活兒以後就由機器來做,編譯器出現了。

    因此所謂cpu認識程式碼,是一種擬人化的修辭,偏文藝了。cpu只是一種根據高低電平輸入,產生特定的高低電平輸出的機器。程式碼不過是助記符。

    後來你覺得add,add,add,add,add這類寫法太煩,於是發明了五連加,7連乘之類的寫法——高階語言程式碼誕生了。葛麗絲·霍普搞了cobol,約翰·巴科斯(John Warner Backus)搞了FORTRAN等等。

    但是相對來說第一批的高階語言寫起來比較煩,比如FORTRAN語言,子程式用function開頭,用end結束。相信用過python的人都會覺得FORTRAN太學究氣息了。

    所以後來丹尼斯·裡奇(Dennis Ritchie )在開發unix系統的同時,順便設計了語法簡單的c語言。main()可比function main()end簡便多了。

  • 2 # 小縣城裡的故鄉往事

    CPU就是能執行一組機器指令的積體電路元器件,能執行的指令越豐富和執行指令越快,CPU的運算能力也就越高。

    機器指令就是能直接被CPU識別執行的一組程式碼集合,通常為二進位制碼,分為操作碼和運算元,包括加減乘除等運算和定址取數存數等一系列指令。

    由於機器指令都是一堆二進位制碼,寫程式的人員要記住這堆指令的代號很不方便,而且寫出來的程式也很難讀懂對維護起來非常麻煩,所以發明了組合語言,相當於給機器指令取一個別人容易記住的別名,比如說彙編指令mov對應於機器碼就是一堆10011101的二進位制數。

    而c語言就是在組合語言之上再重新定義一層更接近人類語言的約定規則,似的程式開發更簡單更易於掌握。透過編譯器把c語言先解析成一組彙編指令,然後再將彙編指令集解析成一組二進位制的機器指令集合就是CPU能直接執行的程式了。

  • 3 # Magento電商技術

    機器語言 也就是我們看到的二進位制指令,二進位制指令在電路中代表高電平低電平。它是可以在CPU中直接進行運算的。而組合語言是屬於低階語言。他需要透過彙編器聯結器將彙編程式碼轉換為二進位制機器語言。這個轉換過程,我們稱之為編譯。同理,c語言也有它的編譯器。編譯器會將c語言程式碼編譯成二進位制機器語言。舉個很形象的例子。我們和外華人打交道,有時候我們的語言水平可能跟他們正常溝通是有問題的,但是呢,如果中間有一個翻譯人員,就可以透過翻譯人員的翻譯進行溝通。而這個翻譯人員就相當於程式語言中的編譯器。我們就相當於程式語言。這個外華人就相當於CPU。

  • 4 # 散居獵人

    CPU的核心是運算器。

    數位電路教材中,講過加法器,資料選擇器,譯碼器,D觸發器,移位暫存器。這些就是運算器的基本構成。

    cpu只認識機器碼,指令和資料都用機器碼序列儲存。pc指標指向的當前程式碼就是下一步要執行的指令。

    1 用機器碼程式設計,就是初始程式設計方法。

    2 機器指令不好記,改用助記符如add類似的符號,好理解多了,這就出現組合語言和彙編器。

    3 還可以更接近數學描述,出現了中級語言b和c語言,有了編譯器,有了面向過程的結構化程式設計方法。

    4 處理字元和人機介面需要,進化出了一大批高階語言,有了面向物件方法。

    5 人工智慧的進步,有了初步面向問題方法,自然語言程式設計目前還很幼稚。

    現在是4G,第四代語言時代。

  • 5 # 和不同

    簡單說說這幾者的關聯吧。

    通常,C語言程式可被C編譯器翻譯成組合語言編寫的彙編程式,彙編程式被彙編器翻譯成可執行程式碼,而可執行程式碼主要包括機器指令及其使用的資料。

    舉例子吧:

    C和彙編

    C語言程式碼:

    int b = 3;int a = 2 + b;

    可被C編譯器翻譯成彙編程式碼(以x86 CPU為例):

    movl $3, -8(%rbp)movl -8(%rbp), %eaxaddl $2, %eax

    可以看出,第一行C程式碼被翻譯成兩行彙編程式碼,第二行C程式碼被翻譯成一行彙編程式碼。C程式碼和彙編程式碼沒有一一對應關係。

    同一份C程式碼可被不同的C編譯器翻譯成不同的彙編程式碼,對應不同的CPU。

    彙編程式碼和機器指令

    接下來,上述三行彙編程式碼可被x86彙編器翻譯成可執行程式碼,其中的機器指令如下:

    c7 45 f8 03 00 00 008b 45 f883 c0 02

    彙編程式碼與機器指令是一一對應的關係。每個不同的CPU家族,對應著不同的機器指令體系,也一一對應著相應的組合語言體系。比如ARM和x86就是兩個不同的體系。

    機器指令和CPU

    CPU是機器指令的執行者。通常,CPU從記憶體(RAM)中讀取並逐條執行機器指令。

  • 6 # 編碼之道

    CPU的全稱是中央處理單元,是計算機進行運算的核心,根據使用的技術不同,CPU又分為X86,X64,ARM、DSP、微控制器等不同的體系結構。在每種CPU上都有一套特定的指令集,這就是人們常說的機器指令,直接使用機器指令編寫的程式就是機器語言程式。

    理論上來說,是可以透過機器語言直接編寫任何程式的(早期都是直接使用機器語言程式設計,那時程式相對比較簡單),並且編寫的程式可以直接執行,但是使用機器語言程式設計對程式設計師的要求極高,程式碼無法移植且不便於人直接閱讀,於是人們發明了一組符號,用來表示這些機器指令,這就是組合語言。組合語言編寫的程式計算機無法直接執行,需要一個叫做彙編器的程式轉換為機器語言才可以在特定機器上執行。

    而C語言是比組合語言更高階的語言,使用C語言編寫的程式也是無法在計算機上直接執行的,它需要編譯器將C語言程式碼轉換為機器語言,這個過程又分為幾個子步驟,見下圖。

    為了使題主的問題更加完善,在這裡補充兩個概念,連結器與反彙編。

    在大型程式中,往往會將任務分解為許多不同的子任務,每個子任務對應一個原始檔,在C語言中就是多個C檔案,編譯器將每個C檔案編譯成一個目標檔案(一般在Windows中是obj檔案,Linux中是

    .o

    檔案),這些目標檔案也是機器指令,但是缺少一些必要的資訊,無法直接執行,需要連結器將這些檔案連結起來,再加上一些庫檔案與可執行檔案頭資訊,成為一個可執行檔案(Windows是PE格式,Linux是ELF格式)。

    通常,在檢視一個二進位制檔案時(目標檔案或者可行性檔案),不會直接顯示機器指令,而是以組合語言顯示,這是因為此過程中有一個反彙編程式,將機器指令轉換為組合語言,它的功能剛好與彙編過程相反。

  • 7 # 每日精彩科技

    首先,我覺得這是一個非常好的問題,也是很多小白使用者困惑之處,下面我將根據自己的經驗認真回答這個問題。

    處理器體系結構是處理器的硬體結構,稱為微體系結構。它是一組硬體電路,用於執行一組命令中提供的操作。

    一組指令決定了處理器的結構,因為它包含使用硬體電路實現一組指令。但是具體來說,使用哪種處理器體系結構,使用哪種硬體電路,每個設計都可以不同。

    MIPS是使用簡化指令集(RISC)的處理器體系結構,帶有一組指令和相應的處理器體系結構。龍的著名核心是帕格。

    編譯語言是以人們理解的語言描述的一組指令

    機器程式碼中的一組指令是一組很難理解的二進位制數,但是編譯以與人類語言相同的方式描述了一組指令,並且更易於閱讀。

    對於處理器的設計,首先必須具有一組指令,該一組指令規定了處理器的相應操作並透過一組指令執行相應的功能。但是處理器是一組只能識別二進位制資料的硬體電路,因此,一組指令由幾個二進位制資料組成。而且二進位制資料很難讀取。為了方便使用一組命令,建立了描述該組命令的語言集合。編譯後的語言類似於人類語言,並且易於閱讀。

    儘管編譯語言更易於閱讀,但也有缺點。第一種編譯語言仍然很難工作。其次,編譯語言與指令集相對應,因此,在更改指令集時,有必要更改相應的編譯語言,這導致其移植性差且不能在不同平臺上使用的事實。

    例如,組合語言ARM與IntelX86不同。目前,人們希望開發一種更便捷的操作,它超出了命令集的範圍,因此有高階語言C,C ++。

    但是處理器只能識別二進位制程式碼,這如何區分高階語言?結果,人們開發了一種編譯器,該編譯器按以下順序將高階語言轉換為二進位制:高階語言-彙編程式-二進位制機器程式碼。

    人們可以輕鬆地使用高階程式語言,處理器控制來執行相應的功能。然後程式設計師的職業“紅色火焰”如雨後春筍般出現。

    最後,我們在最高層(C / C ++ / C \\\\)編寫的程式碼或程式通常會要求硬體輪廓使之如此隨心所欲或以工作為輔。許多人的綜合答案意思是,書面生成的更高層次是透過編譯器進行轉換和解釋的,變成編譯語言,機器語言,然後是硬體,或者上層程式碼將訊息傳遞到驅動程式執行的級別我們想要。

    但是,實際上,問題在於,即使切換到編譯語言或機器程式碼,也就像較低層的裝置可以理解的那樣,發生在高層程式碼中。至於驅動力,它們也是軟體,並以p語言編寫。

    實際上,在電路的底部,只有各種電流水平和波形(我們以不同的方式確定)才具有訊息和資訊。那麼波浪的水平和形狀如何符合我們的期望?

    這個問題使我想到了使用紙帶輸入程式的最早階段。紙帶上有東西要打斷電路併產生鏈條,如果紙帶上有列印輸出,則會產生張力。紙帶上的鉛的長度會產生一定程度的連續性,並且透過紙帶控制的傳輸速度可提高程式碼執行速度。

    對應於處理器和計算機南端的現代設計,處理器充當傳送帶。然後,“訊號”一詞就是處理器接收和讀取我們的程式碼的方式。

    在此基礎上,處理器腳的電平繼續執行處理器的內部邏輯,並將該電平帶到電路的外圍。如果已讀取或成功讀取了儲存裝置的內容,則將儲存裝置的其中一個爪子設定為允許您使用它的級別。處理器根據接收到的電平資訊保留其內部邏輯。

    處理器只能在其初始級別執行邏輯電路,因此處理器只能在發生主電的過程中訪問儲存器的某些部分。繼續下一個特定部分的工作。

    這樣的儲存裝置的內部邏輯應包括一個用於讀取和寫入的電平開關,可以透過邏輯對其進行更改。該儲存裝置必須在整個級別上進行更改,但是如果級別丟失,其狀態將不會更改。

    我仍然記得該程式是如何使用紙帶程式設計的,紙帶儲存在紙帶上並手工繪製。

    我相信大多數人不會對程式將在什麼級別執行的問題進行深入研究,只是知道程式可以執行某些功能,呼叫某些AP可以實現所需的邏輯,卻沒有思考為什麼可以認識到城市的硬體引擎是如何工作的。

    此外,基於此,可以假定無法使用所有計算機,我們如何重新建立這些文明產品?如何繼續使用人類語言,使機器能夠按照我們的意願工作?

    CPU是主要的計算機裝置之一,也是其主要部分。它的功能主要是解釋計算機軟體中的計算機指令和過程資料。

    處理器是計算機的中央元件,負責讀取命令,解碼和執行命令。CPU主要由兩部分組成,即:控制器,算術裝置,還包括高速緩衝儲存器和允許您在它們之間建立通訊並控制匯流排的資料。計算機的三個主要元件是處理器,內部儲存器,輸入/輸出裝置。CPU的功能主要包括處理命令,執行操作,管理時間和處理資料。

    在計算機系統的結構中,處理器是主要的硬體模組,用於控制計算機的所有硬體資源(例如驅動器,輸入/輸出單元)和執行常規操作。處理器是計算操作和控制的核心。計算機系統中所有軟體級別的所有操作最終都將透過一組指令轉換為處理器操作。

  • 8 # 李固雨

    CPU中包含無數微型cmos開關單元,由無數0或1的電訊號控制,輸出0和1的訊號,這就是機器語言。c語言轉換成組合語言,再轉換成機器指令控制開關,開關輸出的機器語言經邏輯閘運算後控制各聲光裝置,輸出結果。

  • 中秋節和大豐收的關聯?
  • 蒙大拿和大和號從資料上看誰更優秀?