欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

計(jì)算機(jī)系統(tǒng)匯編語(yǔ)言和機(jī)器語(yǔ)言深入理解

 更新時(shí)間:2022年09月01日 09:11:09   作者:IT可樂  
這篇文章主要為大家介紹了計(jì)算機(jī)系統(tǒng)匯編語(yǔ)言和機(jī)器語(yǔ)言深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

《深入理解計(jì)算機(jī)系統(tǒng)》第三章——程序的機(jī)器級(jí)表示。作者首先講解了匯編代碼和機(jī)器代碼的關(guān)系,闡述了匯編承上啟下的作用;

接著從機(jī)器語(yǔ)言IA32著手,分別講述了如何存儲(chǔ)數(shù)據(jù)、如何訪問數(shù)據(jù)、如何完成運(yùn)算以及如何進(jìn)行跳轉(zhuǎn)。通過這些步驟,又告訴了我們分支語(yǔ)句、循環(huán)語(yǔ)句是怎么完成的,函數(shù)調(diào)用、棧幀結(jié)構(gòu)以及遞歸過程。

最后能通過編譯器產(chǎn)生的匯編代碼表示,我們要了解編譯器和它的優(yōu)化能力,知道編譯器能為我們完成哪些工作。

而這篇博客我們將講解匯編和機(jī)器代碼的關(guān)系。首先下面一張圖是C語(yǔ)言、匯編語(yǔ)言以及翻譯過的機(jī)器語(yǔ)言,大家可以先有個(gè)大概的眼熟。 

1、機(jī)器語(yǔ)言

這系列博客第一篇 Hello World是如何運(yùn)行的 我們就詳細(xì)講解了程序的編譯,一個(gè)C語(yǔ)言程序是經(jīng)過編譯器變成匯編程序,然后通過匯編器變成機(jī)器代碼,最后被計(jì)算機(jī)執(zhí)行。

計(jì)算機(jī)是不能直接識(shí)別我們所編寫的C程序或者Java程序的。它只能識(shí)別機(jī)器語(yǔ)言,而機(jī)器語(yǔ)言是用二進(jìn)制代碼表示的計(jì)算機(jī)能直接識(shí)別和執(zhí)行的一種機(jī)器指指令系統(tǒng)令的集合。

早期計(jì)算機(jī)就是指可以執(zhí)行機(jī)器指令,進(jìn)行運(yùn)算的機(jī)器。在我們常用的PC機(jī)中,有一個(gè)芯片,就是我們常說的CPU(Central Processing Unit,中央處理單元)可以完成前面所說的計(jì)算機(jī)的功能,但是每一種這樣的微處理器(CPU)由于硬件設(shè)計(jì)和內(nèi)部結(jié)構(gòu)的不同,就需要用不同的電平脈沖來控制,使它工作。所以每一種微處理器都有自己的機(jī)器指令集,也就是機(jī)器語(yǔ)言。

早期的程序設(shè)計(jì)均使用機(jī)器語(yǔ)言。程序員們將用0, 1數(shù)字編成的程序代碼打在紙帶或卡片上,1打孔,0不打孔,再將程序通過紙帶機(jī)或卡片機(jī)輸入計(jì)算機(jī),進(jìn)行運(yùn)算。

用機(jī)器語(yǔ)言編寫程序,編程人員要首先熟記所用計(jì)算機(jī)的全部指令代碼和代碼的涵義。手編程序時(shí),程序員得自己處理每條指令和每一數(shù)據(jù)的存儲(chǔ)分配和輸入輸出,還得記住編程過程中每步所使用的工作單元處在何種狀態(tài)。這是一件十分繁瑣的工作。編寫程序花費(fèi)的時(shí)間往往是實(shí)際運(yùn)行時(shí)間的幾十倍或幾百倍,而且,編出的程序全是些0和1的指令代碼,直觀性差,還容易出錯(cuò)。

那么該怎么辦呢?這時(shí)候匯編語(yǔ)言便產(chǎn)生了。

需要注意的是現(xiàn)在除了計(jì)算機(jī)生產(chǎn)廠家的專業(yè)人員外,一般是不需要學(xué)習(xí)機(jī)器語(yǔ)言了。

2、匯編語(yǔ)言

匯編語(yǔ)言的主體是匯編指令。匯編指令和機(jī)器指令的差別在于指令的表示方法上,匯編指令是機(jī)器指令便于記憶的書寫格式。

比如下面將寄存器 BX 的內(nèi)容發(fā)送到 AX 上:

操作:寄存器BX的內(nèi)容送到AX中
1000100111011000              機(jī)器指令
mov ax,bx                    匯編指令

我們能很明顯的從上面兩條指令看出區(qū)別,匯編指令相對(duì)于機(jī)器指令是很容易記住的。

可能有人會(huì)問,我們用匯編語(yǔ)言編寫程序,可是計(jì)算機(jī)只認(rèn)識(shí)機(jī)器指令,那該怎么辦?這時(shí)候就需要一個(gè)能將匯編語(yǔ)言轉(zhuǎn)換成機(jī)器指令的工具,我們稱其為編譯器。程序員用匯編語(yǔ)言寫出源代碼,再用匯編編譯器將其編譯為機(jī)器碼,最后由計(jì)算機(jī)執(zhí)行。

  •  匯編語(yǔ)言是直接面向處理器(Processor)的程序設(shè)計(jì)語(yǔ)言。處理器是在指令的控制下工作的,處理器可以識(shí)別的每一條指令稱為機(jī)器指令。每一種處理器都有自己可以識(shí)別的一整套指令,稱為指令集。處理器執(zhí)行指令時(shí),根據(jù)不同的指令采取不同的動(dòng)作,完成不同的功能,既可以改變自己內(nèi)部的工作狀態(tài),也能控制其它外圍電路的工作狀態(tài)。
  • 匯編語(yǔ)言的另一個(gè)特點(diǎn)就是它所操作的對(duì)象不是具體的數(shù)據(jù),而是寄存器或者存儲(chǔ)器,也就是說它是直接和寄存器和存儲(chǔ)器打交道,這也是為什么匯編語(yǔ)言的執(zhí)行速度要比其它語(yǔ)言快,但同時(shí)這也使編程更加復(fù)雜,因?yàn)榧热粩?shù)據(jù)是存放在寄存器或存儲(chǔ)器中,那么必然就存在著尋址方式,也就是用什么方法找到所需要的數(shù)據(jù)。
    例如上面的例子,我們就不能像高級(jí)語(yǔ)言一樣直接使用數(shù)據(jù),而是先要從相應(yīng)的寄存器AX、BX 中把數(shù)據(jù)取出。這也就增加了編程的復(fù)雜性,因?yàn)樵诟呒?jí)語(yǔ)言中尋址這部分工作是由編譯系統(tǒng)來完成的,而在匯編語(yǔ)言中是由程序員自己來完成的,這無(wú)異增加了編程的復(fù)雜程度和程序的可讀性。
  • 匯編語(yǔ)言指令是機(jī)器指令的一種符號(hào)表示,而不同類型的CPU 有不同的機(jī)器指令系統(tǒng),也就有不同的匯編語(yǔ)言,所以,匯編語(yǔ)言程序與機(jī)器有著密切的關(guān)系。所以,除了同系列、不同型號(hào)CPU 之間的匯編語(yǔ)言程序有一定程度的可移植性之外,其它不同類型(如:小型機(jī)和微機(jī)等)CPU 之間的匯編語(yǔ)言程序是無(wú)法移植的,也就是說,匯編語(yǔ)言程序的通用性和可移植性要比高級(jí)語(yǔ)言程序低。

總結(jié)起來就是三個(gè)特點(diǎn):機(jī)器相關(guān)性、高速度和高效率、編寫和調(diào)試復(fù)雜(相對(duì)于高級(jí)語(yǔ)言)。

3、高級(jí)語(yǔ)言

前面的機(jī)器語(yǔ)言和匯編語(yǔ)言我們都有一定了了解了,匯編語(yǔ)言也是和機(jī)器語(yǔ)言一樣,都是直接對(duì)硬件進(jìn)行操作,但是匯編語(yǔ)言指令采用了英文縮寫的標(biāo)識(shí)符,更容易識(shí)別和記憶。但是說起來更容易識(shí)別和記憶,也只是相對(duì)于機(jī)器語(yǔ)言而言的。在實(shí)際編程中,匯編語(yǔ)言源程序也是十分復(fù)雜和冗長(zhǎng)的,這時(shí)候高級(jí)語(yǔ)言產(chǎn)生了。

高級(jí)語(yǔ)言并不是指一種語(yǔ)言,而是包括很多編程語(yǔ)言,比如Java、C、C++、C#、python等等,是高度封裝的編程語(yǔ)言。高級(jí)語(yǔ)言與計(jì)算機(jī)的硬件結(jié)構(gòu)和指令系統(tǒng)無(wú)關(guān),它有更強(qiáng)的表達(dá)能力,可方便地表示數(shù)據(jù)的運(yùn)算和程序的控制結(jié)構(gòu),能更好的描述各種算法,而且容易學(xué)習(xí)掌握。但高級(jí)語(yǔ)言編譯生成的程序代碼一般比用匯編程序語(yǔ)言設(shè)計(jì)的程序代碼要長(zhǎng),執(zhí)行的速度也慢。

從最開始我們給出的一張圖也可以看出,C語(yǔ)言寫出的短短幾行代碼,翻譯成匯編語(yǔ)言會(huì)多很多,更不用說變成機(jī)器語(yǔ)言了。

總結(jié)

首先我要說明的是,我們不需要學(xué)會(huì)如何用機(jī)器語(yǔ)言,匯編語(yǔ)言來進(jìn)行編程,畢竟我們不是計(jì)算機(jī)生產(chǎn)廠家的專業(yè)人員。我們所要知道的是如何看懂匯編語(yǔ)言就行了。因?yàn)樵谖覀兯帉懙母呒?jí)語(yǔ)言,被翻譯成匯編語(yǔ)言時(shí),編譯器會(huì)自動(dòng)進(jìn)行一些優(yōu)化處理,而這些處理如果我們不知道,就會(huì)造成程序上的錯(cuò)誤,具體實(shí)例后面會(huì)詳細(xì)講到。

以上就是計(jì)算機(jī)系統(tǒng)匯編語(yǔ)言和機(jī)器語(yǔ)言深入理解的詳細(xì)內(nèi)容,更多關(guān)于計(jì)算機(jī)系統(tǒng)匯編機(jī)器語(yǔ)言的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論