匯編編譯器的實現(xiàn)原理 如何寫一個編譯器?
如何寫一個編譯器?非常簡單。學(xué)習(xí)了計算機組織原理、編譯原理、數(shù)據(jù)結(jié)構(gòu)和算法、設(shè)計模式和匯編,掌握了一門高級語言之后,你幾乎可以開始做這件事了。如果您真的感興趣,請看一下Lua解釋器(編譯器)源代碼,總
如何寫一個編譯器?
非常簡單。學(xué)習(xí)了計算機組織原理、編譯原理、數(shù)據(jù)結(jié)構(gòu)和算法、設(shè)計模式和匯編,掌握了一門高級語言之后,你幾乎可以開始做這件事了。
如果您真的感興趣,請看一下Lua解釋器(編譯器)源代碼,總共不到20000行。讀別人自己的,然后抄寫。
怎么將程序?qū)懭胗布?,計算機的工作原理是怎樣的?
程序由編譯器寫入硬件。不同的硬件有不同的寫入方法。計算機的基本原理是存儲程序和控制程序。預(yù)先,指令序列(稱為程序)和指令計算機如何操作的原始數(shù)據(jù)通過輸入設(shè)備傳送到計算機存儲器。每一條指令都明確規(guī)定了計算機從哪個地址獲取數(shù)據(jù)、進(jìn)行什么操作、然后發(fā)送到哪個地址等步驟。計算機在運行時,首先從存儲器中取出第一條指令,通過控制器的譯碼,根據(jù)指令的要求,從存儲器中取出數(shù)據(jù)進(jìn)行指定的運算和邏輯運算,然后根據(jù)地址將結(jié)果發(fā)送給存儲器。接下來,取出第二個命令,在控制器的命令下完成指定的操作。等等。直到遇到停止命令。程序和數(shù)據(jù)以相同的方式存儲。按照程序排列的順序,逐步取出指令,自動完成指令中規(guī)定的操作,是計算機最基本的工作原理。
為什么計算機能夠識別計算編程語言,底層物理原理及邏輯是什么?
他們的答案太復(fù)雜了。我將用一個簡單的例子來解釋為什么計算機可以識別用現(xiàn)代編程語言編寫的程序
!例如:小明講當(dāng)?shù)胤窖裕娔X本身),他不會也不懂普通話。如果你直接用自己的方言或普通話跟他說話,他可能聽不懂!現(xiàn)在該怎么辦?你只能找懂他們方言的人把你的話翻譯給他。此時,為您翻譯的人相當(dāng)于一個中級翻譯(計算機編程語言的編譯器級別)。你所說的相當(dāng)于現(xiàn)代編程語言。只有經(jīng)過一個或多個人的翻譯,小明才能理解你的意思。在此期間,找到的轉(zhuǎn)換器越多,效率就越差(程序執(zhí)行效率就越差),找到的轉(zhuǎn)換器越少,效率就越高(程序執(zhí)行效率就越高)。
計算機底部只能識別0和1二進(jìn)制,現(xiàn)在編程語言最終將被翻譯成0和1,以便計算機執(zhí)行。
編譯器的工作原理?
編譯是將源代碼(通常是高級語言)轉(zhuǎn)換為可由計算機或虛擬機直接執(zhí)行的目標(biāo)代碼(通常是低級語言或機器語言)的過程。但是,也有從低級語言到高級語言的編譯器。在這種編譯器中,由高級語言生成的低級語言代碼重新生成高級語言代碼的編譯器也稱為反編譯器。也有從一種高級語言生成到另一種高級語言的編譯器,或者生成需要進(jìn)一步處理的中間代碼的編譯器(也稱為級聯(lián))。典型的編譯器輸出是一個由機器代碼組成的對象文件,其中包含入口點的名稱和地址以及外部調(diào)用(指向不在此對象文件中的函數(shù)調(diào)用)。一組對象文件不需要由同一個編譯器生成,但所使用的編譯器必須采用相同的輸出格式,可以鏈接在一起,生成可由用戶直接執(zhí)行的exe。因此,我們計算機上的文件是編譯文件。