日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

计算机组成原理,P函数,深入浅出计算机组成原理学习笔记:第五讲

發(fā)布時(shí)間:2023/12/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机组成原理,P函数,深入浅出计算机组成原理学习笔记:第五讲 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、在軟硬件接口中,CPU幫我們做了什么事情

1、從硬件角度看CPU

2、軟件工程師看CPU

3、不同的cpu能聽懂的語(yǔ)言不太一樣

4、不同的指令無(wú)法相通

5、存儲(chǔ)程序型計(jì)算機(jī)

一臺(tái)IBM的Plugboard

二、從編譯到匯編,代碼怎么變成機(jī)器碼?

1、C 語(yǔ)言程序程序案例

1、我們拿一小段真實(shí)的 C 語(yǔ)言程序來(lái)看看。

[root@luoahong c]# cat test.c

int main()

{

int a = 1;

int b = 2;

a = a + b;

}

2、要讓這段程序在一個(gè) Linux 操作系統(tǒng)上跑起來(lái),我們需要把整個(gè)程序翻譯成一個(gè)匯編語(yǔ)言

[root@luoahong c]# gcc -g -c test.c

[root@luoahong c]# objdump -d -M intel -S test.o

3、在一個(gè) Linux 操作系統(tǒng)上,我們可以簡(jiǎn)單地使用 gcc 和 objdump 這樣兩條命令,把對(duì)應(yīng)的匯編代碼和機(jī)器碼都打印出來(lái)。

[root@luoahong c]# objdump -d -M intel -S test.o

test.o: file format elf64-x86-64

Disassembly of section .text:

0000000000000000 :

int main()

{

0:55 push rbp

1:48 89 e5 mov rbp,rsp

int a = 1;

4:c7 45 fc 01 00 00 00 mov DWORD PTR [rbp-0x4],0x1

int b = 2;

b:c7 45 f8 02 00 00 00 mov DWORD PTR [rbp-0x8],0x2

a = a + b;

12:8b 45 f8 mov eax,DWORD PTR [rbp-0x8]

15:01 45 fc add DWORD PTR [rbp-0x4],eax

}

18:5d pop rbp

19:c3 ret

2、為什么需要匯編代碼呢?

我們實(shí)際在用 GCC(GUC 編譯器套裝,GUI CompilerCollectipon)編譯器的時(shí)候,可以直接把代碼編譯成機(jī)器碼呀,

為什么還需要匯編代碼呢?原因很簡(jiǎn)單,你看著那一串?dāng)?shù)字表示的機(jī)器碼,是不是摸不著頭腦?但是即使你沒(méi)有學(xué)過(guò)匯編代碼,

看的時(shí)候多少也能“猜”出一些這些代碼的含義。因?yàn)閰R編代碼其實(shí)就是“給程序員看的機(jī)器碼”,也正因?yàn)檫@樣,機(jī)器碼和匯編代碼是一一對(duì)應(yīng)的。

3、從高級(jí)語(yǔ)言—匯編代碼—機(jī)器碼

從高級(jí)語(yǔ)言到匯編代碼,再到機(jī)器碼,就是一個(gè)日常開發(fā)程序,最終變成了 CPU 可以執(zhí)行的計(jì)算機(jī)指令的過(guò)程。

三、解析指令和機(jī)器碼

1、常見(jiàn)指令

你可能一下子記不住,或者對(duì)這些指令的含義還不能一下子掌握,這里我畫了一個(gè)表格,給你舉例子說(shuō)明一下,幫你理解、記憶。

2、MIPS的指令

為了讀起來(lái)方便,我們一般把對(duì)應(yīng)的二進(jìn)制數(shù),用 16 進(jìn)制表示出來(lái)。在這里,也就是0X02324020。這個(gè)數(shù)字也就是這條指令對(duì)應(yīng)的機(jī)器碼。

回到開頭我們說(shuō)的打孔帶。如果我們用打孔代表 1,沒(méi)有打孔代表 0,用 4 行 8 列代表一條指令來(lái)打一個(gè)穿孔紙帶,那么這條命令大概就長(zhǎng)這樣:

四、總結(jié)和延伸

到這里,想必你也應(yīng)該明白了,我們?cè)谶@一講的開頭介紹的打孔卡,其實(shí)就是一種存儲(chǔ)程序型計(jì)算機(jī)。

只是這整個(gè)程序的機(jī)器碼,不是通過(guò)計(jì)算機(jī)編譯出來(lái)的,而是由程序員,用人腦“編譯”成一張張卡片的。對(duì)應(yīng)的程序,也不是存儲(chǔ)在設(shè)備里,而是存儲(chǔ)成一張打好孔的卡片。

但是整個(gè)程序運(yùn)行的邏輯和其他 CPU 的機(jī)器語(yǔ)言沒(méi)有什么分別,也是處理一串“0”和“1”組成的機(jī)器碼而已

這一講里,我們看到了一個(gè) C 語(yǔ)言程序,是怎么被編譯成為匯編語(yǔ)言,乃至通過(guò)匯編器再翻譯成機(jī)器碼的。

除了 C 這樣的編譯型的語(yǔ)言之外,不管是 Python 這樣的解釋型語(yǔ)言,還是 Java 這樣使用虛擬機(jī)的語(yǔ)言,其實(shí)最終都是由不同形式的程序,把我們寫好的代碼,轉(zhuǎn)換成 CPU 能夠理解的機(jī)器碼來(lái)執(zhí)行的。

只是解釋型語(yǔ)言,是通過(guò)解釋器在程序運(yùn)行的時(shí)候逐句翻譯,而 Java 這樣使用虛擬機(jī)的語(yǔ)言,則是由虛擬機(jī)對(duì)編譯出來(lái)的中間代碼進(jìn)行解釋,或者即時(shí)編譯成為機(jī)器碼來(lái)最終執(zhí)行。

然而,單單理解一條指令是怎么變成機(jī)器碼的肯定是不夠的。接下來(lái)的幾節(jié),我會(huì)深入講解,包含條件、循環(huán)、函數(shù)、遞歸這些語(yǔ)句的完整程序,是怎么在 CPU里執(zhí)行的

總結(jié)

以上是生活随笔為你收集整理的计算机组成原理,P函数,深入浅出计算机组成原理学习笔记:第五讲的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。