官术网_书友最值得收藏!

1.2 編程語(yǔ)言的發(fā)展

自從1946年第一臺(tái)通用電子計(jì)算機(jī)問世,人類與計(jì)算機(jī)交流的編程語(yǔ)言經(jīng)過了機(jī)器語(yǔ)言、匯編語(yǔ)言和高級(jí)語(yǔ)言3個(gè)階段的發(fā)展。隨著時(shí)代發(fā)展,編程語(yǔ)言對(duì)人類越來(lái)越友好。

第一代程序設(shè)計(jì)語(yǔ)言被稱為機(jī)器語(yǔ)言。用這種語(yǔ)言寫出來(lái)的程序是一串0和1組成的數(shù)字,機(jī)器直接就能理解,但對(duì)于人來(lái)說就太難理解了。下面是計(jì)算1+2+3+…+100的機(jī)器語(yǔ)言代碼(冒號(hào)左邊是內(nèi)存地址,可忽略),看上去像不像天書?

400526: 01010101
400527: 01001000 10001001 11100101
40052a: 01001000 10000011 11101100 00010000
40052e: 11000111 01000101 11111000 00000000 00000000 00000000 00000000
400535: 11000111 01000101 11111100 00000000 00000000 00000000 00000000
40053c: 11101011 00001010
40053e: 10001011 01000101 11111100
400541: 00000001 01000101 11111000
400544: 10000011 01000101 11111100 00000001
400548: 10000011 01111101 11111100 01100100
40054c: 01111110 11110000
40054e: 10001011 01000101 11111000
400551: 10001001 11000110
400553: 10111111 11110100 00000101 01000000 00000000
400558: 10111000 00000000 00000000 00000000 00000000
40055d: 11101000 10011110 11111110 11111111 11111111
400562: 10010000
400563: 11001001
400564: 11000011

事實(shí)上,上面代碼左邊的內(nèi)存地址是無(wú)須存儲(chǔ)的,而且代碼也不會(huì)一行一行清晰排列。計(jì)算機(jī)里的代碼是下面這樣的。

01010101 01001000 10001001 11100101 01001000 10000011 11101100
00010000 11000111 01000101 11111000 00000000 00000000 00000000
00000000 11000111 01000101 11111100 00000000 00000000 00000000
00000000 11101011 00001010 10001011 01000101 11111100 00000001
01000101 11111000 10000011 01000101 11111100 00000001 10000011
01111101 11111100 01100100 01111110 11110000 10001011 01000101
11111000 10001001 11000110 10111111 11110100 00000101 01000000
00000000 10111000 00000000 00000000 00000000 00000000 11101000
10011110 11111110 11111111 11111111 10010000 11001001 11000011

世界上第一臺(tái)通用電子計(jì)算機(jī)ENIAC使用的是最原始的穿孔卡片,這種卡片所使用的語(yǔ)言就是機(jī)器語(yǔ)言。

穿孔卡片示例圖

歷史上最大的穿孔卡片程序是20世紀(jì)50年代的SAGE防空系統(tǒng),這個(gè)程序使用了62 500張穿孔卡片(大約5MB的數(shù)據(jù))。

匯編語(yǔ)言被稱為第二代程序設(shè)計(jì)語(yǔ)言,它使用一組幫助記憶的符號(hào)(助記符)來(lái)表示每條命令。下頁(yè)圖是計(jì)算1+2+3+…+100的匯編代碼(最左側(cè)的數(shù)字表示內(nèi)存地址,<>內(nèi)是注解)。相比于看上去像天書的機(jī)器代碼,匯編代碼友好了不少,但門檻依然比較高。

400526: push %rbp
400527: mov %rsp, %rbp
40052a: sub $0x10, %rsp
40052e: movl $0x0, -0x8(%rbp)
400535: movl $0x1, -0x4(%rbp)
40053c: jmp 400548 <main+0x22>
40053e: mov -0x4(%rbp), %eax
400541: add %eax, -0x8(%rbp)
400544: addl $0x1, -0x4(%rbp)
400548: cmpl $0x64, -0x4(%rbp)
40054c: jle 40053e <main+0x18>
40054e: mov -0x8(%rbp), %eax
400551: mov %eax, %esi
400553: mov $0x4005f4, %edi
400558: mov $0x0, %eax
40055d: callq 400400 <printf@plt>
400562: nop
400563: leaveq
400564: retq

再后來(lái),就有了被稱為第三代程序設(shè)計(jì)語(yǔ)言的高級(jí)語(yǔ)言,如C語(yǔ)言和Python語(yǔ)言。同樣是計(jì)算1+2+3+…+100的值,用高級(jí)語(yǔ)言寫出來(lái)的程序看上去就友好多了。

#include <stdio.h>
void main()
{
   int sum=0;
   for (int i=1; i <=100; i++)
            sum=sum + i;
   printf ("1+2+3+…+100=%d\n", sum);
}

用C語(yǔ)言寫出的計(jì)算1+2+3+…+100的程序

n=0
for x in range (101):
n=x+n

用Python寫出的計(jì)算1+2+3+…+100的程序

最后,我們來(lái)看本書的主角——Scratch。下面這段程序是用Scratch編寫的計(jì)算1+2+3+…+100的程序,看上去是不是很親切?可以說,以Scratch為代表的圖形化編程工具對(duì)大家已經(jīng)非常友好了,搭積木搭得溜的小朋友很快就能上手。

當(dāng)然,計(jì)算機(jī)是無(wú)法直接執(zhí)行高級(jí)語(yǔ)言編寫的程序的。用高級(jí)語(yǔ)言編寫的程序首先要經(jīng)過編譯或解釋成計(jì)算機(jī)能理解的機(jī)器語(yǔ)言后,計(jì)算機(jī)才能一條條地執(zhí)行指令。在這里,編譯器或解釋器就充當(dāng)了人和機(jī)器之間的翻譯,把人易于理解的高級(jí)語(yǔ)言程序翻譯成機(jī)器易于理解的機(jī)器程序。

主站蜘蛛池模板: 金阳县| 临清市| 确山县| 安庆市| 清苑县| 揭东县| 怀仁县| 延吉市| 荥经县| 广河县| 宁夏| 荣昌县| 乌拉特后旗| 雅安市| 叙永县| 揭阳市| 舒兰市| 高邑县| 巴彦淖尔市| 南宫市| 朔州市| 和林格尔县| 新巴尔虎右旗| 五莲县| 广丰县| 潜山县| 唐海县| 顺平县| 东源县| 寿光市| 阿拉善左旗| 江孜县| 通道| 枝江市| 山西省| 云南省| 义乌市| 昆明市| 唐海县| 木兰县| 威宁|