- 相關(guān)推薦
匯編語(yǔ)言學(xué)結(jié)
匯編語(yǔ)言由三類(lèi)指令組成:
1.匯編指令:機(jī)器碼的助記符,有對(duì)應(yīng)的助記碼(類(lèi)似于mov,add,inc等等)
2.偽指令:不對(duì)應(yīng)機(jī)器碼,有編譯器執(zhí)行(類(lèi)似于db,dw,dd,assume等等)
3.加減乘除等符號(hào)
指令和數(shù)據(jù)是應(yīng)用上的概念。在內(nèi)存和硬盤(pán)上,指令和數(shù)據(jù)沒(méi)有任何區(qū)別。例如1000100111011000機(jī)器碼,可以翻譯成數(shù)據(jù)89d8h,也可以翻譯成movax,bx。
cpu要想對(duì)數(shù)據(jù)進(jìn)行讀寫(xiě),必須和外部器件進(jìn)行以下三類(lèi)交互:
1.存儲(chǔ)單元地址(地址信息)
2.器件的選擇,讀或?qū)懙拿睿ǹ刂菩畔ⅲ?/p>
3.讀或?qū)懙臄?shù)據(jù)(數(shù)據(jù)信息)
cpu從3號(hào)單元讀取數(shù)據(jù)的過(guò)程如下:
1.cpu通過(guò)地址線將地址信息3發(fā)出。
2.cpu通過(guò)控制線發(fā)出內(nèi)存讀命令,通知存儲(chǔ)器芯片,將要從中讀取數(shù)據(jù)
3.存儲(chǔ)器將3號(hào)單元的數(shù)據(jù)通過(guò)數(shù)據(jù)線送入cpu
寫(xiě)操作類(lèi)似。
地址總線:
一個(gè)cpu有n根地址線,則這個(gè)cpu可以尋址2^n個(gè)地址單元。
數(shù)據(jù)總線:
8088cpu的數(shù)據(jù)總線寬度為八,8086為十六。若傳送數(shù)據(jù)89d8,8088需要兩次,8086需要一次。
控制總線:
控制總線的寬度決定了cpu對(duì)外部設(shè)備的控制能力。
匯編語(yǔ)言學(xué)結(jié) [篇2]
其實(shí)說(shuō)實(shí)話在學(xué)這門(mén)課之前自己對(duì)匯編語(yǔ)言一點(diǎn)都不了解,只知道它也是一種語(yǔ)言,而且是一門(mén)很少用的語(yǔ)言,可能很多人都是這么想的,或許在學(xué)這門(mén)課之前不少同學(xué)也有和我當(dāng)初一樣的思想,大概學(xué)學(xué)就好,反正以后很少能用到,畢竟現(xiàn)在高級(jí)語(yǔ)言這么發(fā)達(dá),而且運(yùn)用起來(lái)靈活易懂,像匯編這種低級(jí)語(yǔ)言又難又不易學(xué);蛟S老師是知道我們之前有這種想法,所以第一節(jié)課就跟我們講解了一下了匯編語(yǔ)言在當(dāng)今這種高速發(fā)展的社會(huì)的作用和地位,讓我們能夠正確的認(rèn)識(shí)匯編語(yǔ)言的精華,正確對(duì)待這么課。而且還在課堂了百度了匯編語(yǔ)言的招聘信息,或許這才是使我們正確對(duì)待匯編的最直接的原因,關(guān)系到我們以后的出路,或許我們學(xué)好了一門(mén)匯編,以后出去找工作的機(jī)會(huì)不就更廣了嗎?正是在這種動(dòng)力的驅(qū)使下我才對(duì)匯編語(yǔ)言有了一個(gè)新的認(rèn)識(shí),而且決定要把它學(xué)好。
在后來(lái)的學(xué)習(xí)中我發(fā)現(xiàn)其實(shí)匯編不是很難學(xué),其實(shí)學(xué)匯編就像學(xué)其他的高級(jí)語(yǔ)言一樣,高級(jí)語(yǔ)言要求對(duì)語(yǔ)言非常了解。在學(xué)匯編的過(guò)程中,我們最重要的就是要掌握匯編語(yǔ)言中的指令的一些基本用法。當(dāng)然要能夠真正的了解其中的內(nèi)涵,這樣我們?cè)趯?shí)際的編程中也能夠像運(yùn)用高級(jí)語(yǔ)言一樣靈活的變通。匯編語(yǔ)言作為一種低級(jí)程序設(shè)計(jì)語(yǔ)言,既然是低級(jí)所以應(yīng)該是最底層的,與我們計(jì)算機(jī)內(nèi)部的結(jié)構(gòu)聯(lián)系應(yīng)該聯(lián)系很密切,而且在我們學(xué)習(xí)中也深刻的了解到了這一點(diǎn)。比如說(shuō)后來(lái)學(xué)到的寄存器、中斷、還要各種尋址方式以及進(jìn)棧出棧,好多的就是設(shè)計(jì)到計(jì)算機(jī)硬件。前面幾章都是對(duì)計(jì)算機(jī)內(nèi)部結(jié)構(gòu)和一些常用的指令以及尋址方式的尋址方式。到后面學(xué)到子程序以及宏的作用才真正發(fā)現(xiàn)到其實(shí)跟高級(jí)語(yǔ)言差別不大。以C語(yǔ)言為例,C語(yǔ)言不也是由一個(gè)一個(gè)的函數(shù)組成的嗎?沒(méi)想到想?yún)R編這樣的低級(jí)語(yǔ)言也可以這樣。在匯編語(yǔ)言的子程序和宏中,我個(gè)人更感覺(jué)宏的運(yùn)用更像我們高級(jí)語(yǔ)言的子函數(shù),通過(guò)定義好的宏,我們?cè)诤竺嬷苯诱{(diào)用就可以了。尤其是宏帶參數(shù)的宏跟C語(yǔ)言中帶參數(shù)的函數(shù)真的很像,根據(jù)參數(shù)的不同調(diào)用宏就能得到不同的結(jié)果。而匯編中的子程序沒(méi)有這個(gè)傳遞參數(shù)這個(gè)功能。在調(diào)用子程序的時(shí)候要注意各寄存器中的內(nèi)容。子程序是在程序執(zhí)行期間由主程序調(diào)用的,它只占有它自身大小的一個(gè)空間,他不僅是源程序級(jí)別 簡(jiǎn)化,形成的目標(biāo)代碼較短;而宏調(diào)用則是在匯編期間展開(kāi)的,每調(diào)用依次進(jìn)把宏定義體展開(kāi)一次,它是源程序級(jí)的簡(jiǎn)化。因而它占有的存儲(chǔ)空間與調(diào)用次數(shù)有關(guān),調(diào)用次數(shù)越多則占有的存儲(chǔ)空間越大。如果宏調(diào)用次數(shù)較多的話,則其空間上的開(kāi)銷(xiāo)也是應(yīng)該考慮的因素
匯編程序給人感覺(jué)最煩的就是好多程序的結(jié)果不能直接通過(guò)運(yùn)行EXE文件顯示出來(lái),而更多的是經(jīng)過(guò)DEBUG單步調(diào)試才能看到其內(nèi)在變化,看是否正確。在初次接觸匯編的幾個(gè)匯編工具時(shí),有一種神奇的感覺(jué),因?yàn)閰R編程序不像其他的高級(jí)語(yǔ)言一樣需要編譯器,而是直接的就能在記事本上編寫(xiě),然后進(jìn)行匯編和
連接就可以了。學(xué)習(xí)匯編調(diào)試,關(guān)鍵就是要掌握DEBUG的運(yùn)用。我們?cè)趯?shí)際的調(diào)試中,最常用的幾個(gè)命令有:D:顯示內(nèi)存單元的內(nèi)容。T:?jiǎn)尾綀?zhí)行。G:連續(xù)單步執(zhí)行。G:連續(xù)單步執(zhí)行。我們編程也只用過(guò)這幾個(gè)。說(shuō)到這個(gè)DUBUG我就不得不說(shuō)我之前有一次的經(jīng)歷了。我在最后一次的上級(jí)實(shí)驗(yàn)的編程中我用到的是AX這種寄存器,我按照我自己的程序認(rèn)真走了好幾遍,找不到一點(diǎn)錯(cuò)誤,但程序運(yùn)行就是不對(duì),我為此郁悶了好久。后來(lái)只有一步一步的單步調(diào)試。由于是最后一個(gè)綜合實(shí)驗(yàn),實(shí)驗(yàn)比較長(zhǎng),我就一直盯著AX內(nèi)容的變化,經(jīng)過(guò)我的苦苦等候才找到了錯(cuò)誤,就是在DOS功能運(yùn)用的時(shí)候出現(xiàn)了錯(cuò)誤。也就是執(zhí)行下面這條指令Mov ah 02h,int 21h,其實(shí)這兩條指令中里面還包含好多的微指令,不自己親自調(diào)試一下根本就發(fā)現(xiàn)不了問(wèn)題。正是因?yàn)檫@些微指令對(duì)AX寄存器的影響所以才導(dǎo)致了我的錯(cuò)誤。于是我就感覺(jué)學(xué)好匯編步進(jìn)要把指令學(xué)好,還要把DEBUG學(xué)好,這樣才能少走好多彎路。
學(xué)完匯編這門(mén)課我也對(duì)之前的高級(jí)語(yǔ)言中的一些知識(shí)有了更新的認(rèn)識(shí),能夠讓我們更好的理解高級(jí)語(yǔ)言,尤其是高級(jí)語(yǔ)言中的C語(yǔ)言,匯編語(yǔ)言對(duì)于內(nèi)存的操作都是基于內(nèi)存地址的,而C語(yǔ)言中最令人頭疼的指針概念,說(shuō)白了就是內(nèi)存的地址指針的學(xué)習(xí)和應(yīng)用中最頭疼的就是在指針這個(gè)抽象的概念和實(shí)際的內(nèi)存單元之間建立思維映射,而這些恰恰是我們?cè)趨R編語(yǔ)言學(xué)習(xí)中頻繁做的一件平常事另外,對(duì)于C語(yǔ)言中的數(shù)據(jù)類(lèi)型形參實(shí)參函數(shù)調(diào)用全局變量局部變量等概念及操作,我們都可以用匯編語(yǔ)言中的一些操作相關(guān)聯(lián),把這些抽象的概念和過(guò)程,通過(guò)匯編語(yǔ)言形成一個(gè)具體的映像,深度剖析,這樣我們才能真正的學(xué)會(huì)學(xué)好C語(yǔ)言計(jì)算機(jī)科學(xué)的各個(gè)方面是一個(gè)統(tǒng)一的整體,只有多方面穿插,交互才能更好的搭建計(jì)算機(jī)知識(shí)體系,匯編語(yǔ)言本身還是一門(mén)很重要的應(yīng)用技術(shù)。首先由于匯編的操作由于跟硬件緊密相關(guān),所以,很多硬件設(shè)施的嵌入式編程使用的都是使用的匯編語(yǔ)言,因?yàn)閰R編語(yǔ)言更直接,更有效率!我們現(xiàn)在的數(shù)碼產(chǎn)品很多,而這些數(shù)碼產(chǎn)品賴(lài)以生存的芯片,主板等,都包含了嵌入式程序,而這些程序中,匯編語(yǔ)言的使用是相當(dāng)重要的!我想如果我們以后想從事嵌入式這方面的話匯編語(yǔ)言是必備的一種本領(lǐng)。而且我也正是想從事這一方面。我想如果想學(xué)好計(jì)算機(jī)編程技能,如果想做一名合格的編程人員,如果想在計(jì)算機(jī)編程之路走的更遠(yuǎn),我們只有,也必須從匯編語(yǔ)言開(kāi)始,才能完整、完善的建立計(jì)算機(jī)編程知識(shí)體系!所以對(duì)于我自己來(lái)說(shuō),要以今天的學(xué)習(xí)為跳板,為今后的匯編語(yǔ)言的繼續(xù)學(xué)習(xí)打好基礎(chǔ)。愿自己在計(jì)算機(jī)這條道路上越走越遠(yuǎn)。
匯編語(yǔ)言學(xué)結(jié) [篇3]
8086cpu的所有寄存器都是16位的,可以存放兩個(gè)字節(jié)。通常用ax,bx,cx,dx存放一般性的數(shù)據(jù)。
當(dāng)存放數(shù)據(jù)多于2個(gè)字節(jié)時(shí)(加法運(yùn)算后導(dǎo)致),寄存器存放后四個(gè)16位進(jìn)制數(shù),前一個(gè)1被排除(其實(shí)是cf的值,后面詳述)
十六位進(jìn)制的運(yùn)算很容易,與十進(jìn)制相似,例:
c5 + 93 = 158
40 + 85 = c5
abcdef分別代表10到15.
下面舉一個(gè)例子:
mov al,c5h
add al,93h
現(xiàn)在ax中的數(shù)據(jù)為多少?
上面已經(jīng)知道,c5 + 93 =158,但al為八位寄存器,只能存放兩位十六進(jìn)制的數(shù)據(jù),所以‘1’被舍棄,ax中應(yīng)該為‘0058h’。
有些人可能會(huì)覺(jué)得奇怪,為什么不把進(jìn)位帶到ah里呢?當(dāng)單獨(dú)使用al與ah時(shí),兩者互不關(guān)聯(lián)。如果執(zhí)行addax,93h的話,此時(shí)ax里應(yīng)該為‘0158h’。
在進(jìn)行數(shù)據(jù)傳輸或運(yùn)算時(shí),要注意指令的兩個(gè)操作對(duì)象的位數(shù)應(yīng)當(dāng)一致。
例如:
mov al,20000(大于256)
以及
add al,100h(大于兩位)
都是錯(cuò)誤的指令。
物理地址是由段地址乘以16(10h)再加上偏移地址得到的。一個(gè)地址內(nèi)部存儲(chǔ)著一個(gè)字節(jié)的內(nèi)容。
分段是由人為自己定出來(lái)的。編程人員根據(jù)需要,將若干地址連續(xù)的內(nèi)存單元看做一個(gè)段。
段也有相對(duì)應(yīng)的寄存器,這里我們先介紹cs和ip,cs為代碼段寄存器,ip為指令寄存器。在任一時(shí)刻,cpu將cs:ip指向的內(nèi)容當(dāng)做指令執(zhí)行。
我們可以通過(guò)jmp指令來(lái)修改cs、ip中的內(nèi)容。
如:
jmp 2ae3:3;
jmp 3:0b16
若只想修改ip的值,可以通過(guò)寄存器來(lái)實(shí)現(xiàn)。
如:
mov ax,1000h
jmp ax
此時(shí),ip就被置為1000h。
在程序中,如果設(shè)置了代碼段的定義,則cs:ip自動(dòng)指向代碼的開(kāi)頭位置。
匯編語(yǔ)言學(xué)結(jié) [篇4]
在接觸這門(mén)課之前就已對(duì)匯編語(yǔ)言有所了解, 一方面是在計(jì)算機(jī)組成原理中 有所涉及,雖然那時(shí)只知道簡(jiǎn)單的 mov、add、jmp 指令,不清楚其具體用法, 缺乏系統(tǒng)性的學(xué)習(xí); 另一方面是在相關(guān)書(shū)籍中了解到匯編語(yǔ)言寫(xiě)驅(qū)動(dòng)比較好但比 較難,當(dāng)時(shí)就覺(jué)得匯編是門(mén)很牛的語(yǔ)言,很想學(xué)習(xí)。接觸這門(mén)課后,感到匯編語(yǔ) 言的確不是很容易就可以弄懂的,相比較以前學(xué)過(guò)的高級(jí)語(yǔ)言如
c、c++等,電 腦等于在遷就人的思維方式,但學(xué)匯編,人卻必須要去遷就電腦的思維方式,要 設(shè)身處地地用電腦的角度去思考問(wèn)題, 這就是我們學(xué)習(xí)匯編語(yǔ)言時(shí)遇到的最大的 障礙。 通過(guò)這一學(xué)期的學(xué)習(xí), 對(duì)匯編有了初步的掌握, 可以說(shuō)是匯編的入門(mén)教程。 首先主要學(xué)習(xí)了匯編語(yǔ)言的基本知識(shí),介紹了匯編的背景知識(shí)及由來(lái),讓我 知道了匯編語(yǔ)言是處在機(jī)器語(yǔ)言和高級(jí)語(yǔ)言中間的一種低級(jí)語(yǔ)言。 由于計(jì)算機(jī)能 夠直接識(shí)別的數(shù)據(jù)是由二進(jìn)制數(shù) 0 和 1 組成的代碼。 所以用機(jī)器語(yǔ)言編寫(xiě)的程序 是計(jì)算機(jī)惟一能夠直接識(shí)別并執(zhí)行的程序, 而用其他語(yǔ)言編寫(xiě)的程序必須經(jīng)過(guò)翻 譯才能變換成機(jī)器語(yǔ)言程序,為了克服機(jī)器語(yǔ)言的缺點(diǎn),人們采用助記符表示機(jī) 器指令的操作碼,用變量代替操作數(shù)的存放地址等,這樣就形成了匯編語(yǔ)言。 然后介紹了 8086 計(jì)算機(jī)組織,匯編的學(xué)習(xí)不僅僅是學(xué)習(xí)其語(yǔ)法,而更多的 是學(xué)習(xí)計(jì)算機(jī)基本的體系結(jié)構(gòu),學(xué)到這還沒(méi)見(jiàn)到很多的指令和語(yǔ)句,但這是學(xué)習(xí) 匯編前必須要知道和掌握的, 只有知道了匯編的實(shí)質(zhì)、 如何工作及一些基本概念, 才能進(jìn)行下一步的學(xué)習(xí)。 直到后面終于學(xué)了 80x86 指令系統(tǒng)和尋址方式及后來(lái)的 匯編語(yǔ)言格式,才真正進(jìn)入了匯編的指令學(xué)習(xí)階段,每一條指令的學(xué)習(xí)雖然簡(jiǎn)單 但比較多,特別是有些指令的使用場(chǎng)合及錯(cuò)誤用法等易犯錯(cuò)、易混淆,例如在編 寫(xiě)數(shù)據(jù)傳送指令時(shí),目的操作數(shù)和源操作數(shù)的類(lèi)型一定要匹配,cs 不能作為目 的操作數(shù),offset 后只能跟簡(jiǎn)單地址符號(hào),等等。但總的歸納起來(lái)主要掌握三點(diǎn): 1、 要求指令操作數(shù)的尋址方式; 指令對(duì)標(biāo)志位的影響和標(biāo)志位對(duì)指令的影響; 2、 3、指令的執(zhí)行時(shí)間,對(duì)可完成同樣功能的指令,要選用執(zhí)行時(shí)間短的指令。這 樣學(xué)習(xí)起來(lái)方便的多,也更容易理解記住,這為以后的學(xué)習(xí)做了鋪墊。 匯編的基本指令學(xué)完后,就開(kāi)始進(jìn)行應(yīng)用了,首先學(xué)習(xí)的是循環(huán)與分支程序 設(shè)計(jì),第一個(gè)例子是簡(jiǎn)單的加法計(jì)算,雖然簡(jiǎn)單,卻讓我有點(diǎn)恐懼,一個(gè)在 c 語(yǔ)言中只要三四句就解決的問(wèn)題,用匯編卻寫(xiě)了將近 20 句,且還沒(méi)有輸出,也 就是不知道結(jié)果是否正確。后來(lái)學(xué)習(xí)了 dos 系統(tǒng)功能調(diào)用,知道 02 號(hào)功能可以 輸出加法的結(jié)果,于是使用了,但輸出的卻是一個(gè) ascii 碼值,又需要進(jìn)行二進(jìn) 制到十六進(jìn)制的轉(zhuǎn)換,當(dāng)時(shí)覺(jué)得很困惑,不知道為什么要轉(zhuǎn)換,我們輸入的不就 是十六進(jìn)制嗎,算出來(lái)應(yīng)該還是十六進(jìn)制。侩S著繼續(xù)深入的學(xué)習(xí),才徹底明白 為什么要轉(zhuǎn)換,同時(shí)也了解了計(jì)算機(jī)中對(duì)于數(shù)字運(yùn)算是如何工作的。這時(shí)發(fā)現(xiàn)匯 編有很多高級(jí)語(yǔ)言所沒(méi)有的優(yōu)點(diǎn),它能讓我們更加了解計(jì)算機(jī)內(nèi)部的組織結(jié)構(gòu), 對(duì)我們計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生來(lái)說(shuō),學(xué)習(xí)匯編也是提升綜合能力的關(guān)鍵環(huán)節(jié)。一旦對(duì)
它的原理掌握后,編寫(xiě)程序就容易多了。后來(lái)學(xué)的越多,越復(fù)雜,程序也是越來(lái) 越長(zhǎng),一堆的跳轉(zhuǎn)指令,覺(jué)得很麻煩,且感覺(jué)整個(gè)程序無(wú)秩序,有時(shí)對(duì)于一段程 序?qū)崿F(xiàn)的功能還要研究半天。直到學(xué)習(xí)了子程序設(shè)計(jì),一個(gè)過(guò)程定義對(duì)應(yīng)一個(gè)功 能,就像 c 語(yǔ)言中的函數(shù),很有條理性。子程序設(shè)計(jì)能讓一個(gè)大程序分成幾個(gè)模 塊來(lái)做,提供了模塊化程序設(shè)計(jì)的條件,可以節(jié)省存儲(chǔ)空間及程序設(shè)計(jì)所花的時(shí) 間,并且在主程序中進(jìn)行 call 調(diào)用,十分方便,便于以后的維護(hù)、調(diào)試和修改。 最后學(xué)習(xí)了部分宏匯編,只是簡(jiǎn)單的幾個(gè)用法并沒(méi)有深入,但已經(jīng)為我們做 好了基礎(chǔ)工作,便于我們自學(xué)后面的部分。宏(或宏指令)是源程序中一段有獨(dú) 立功能的程序代碼,只需定義一次,可以多次調(diào)用。這似乎和子程序結(jié)構(gòu)很像, 但子程序有自己的優(yōu)缺點(diǎn),優(yōu)點(diǎn)很明顯,缺點(diǎn)是子程序?yàn)檗D(zhuǎn)子及返回、保存及恢 復(fù)寄存器以及參數(shù)的傳送等都要增加程序的開(kāi)銷(xiāo), 這些操作所消耗的時(shí)間以及它 們所占用的存儲(chǔ)空間, 都是為取得子程序結(jié)構(gòu)使程序模塊化這一優(yōu)點(diǎn)而增加的額 外開(kāi)銷(xiāo)。所以,有時(shí),特別在子程序本身較短或者是需要傳送的參數(shù)較多的情況 下,使用宏匯編更加有利。當(dāng)然,在程序較復(fù)雜,實(shí)現(xiàn)的功能較多的情況下,子 程序也必不可少。我的理解是:子程序是調(diào)用,而宏是替換,比如一個(gè) max 宏, 所有出現(xiàn) max 的地方,都用宏代碼代替。兩者各有利弊,在掌握深入的基礎(chǔ)上 結(jié)合使用更好。 還有一點(diǎn)十分重要,和所有的程序設(shè)計(jì)語(yǔ)言一樣,要學(xué)好匯編語(yǔ)言,實(shí)驗(yàn)是 必不可少的環(huán)節(jié)。我深有體會(huì):書(shū)上的程序都能看懂,基本原理也都明白,但是 在自己親手編寫(xiě)程序時(shí),卻無(wú)從下手,甚至連第一句該怎么寫(xiě)都不知道。后來(lái)隨 著老師的講解和實(shí)驗(yàn)的進(jìn)行,知道了程序的編寫(xiě)格式,包括數(shù)據(jù)段、堆棧段和代 碼段,其中數(shù)據(jù)段和堆棧段可以不定義,但代碼段是必不可少的,也掌握了該怎 么調(diào)試程序、運(yùn)行程序等。特別是 debug 命令的使用,可以配合與 list 文件的使 用,讓我們可以調(diào)試排錯(cuò)、檢查結(jié)果是否正確等,掌握 debug 的使用對(duì)實(shí)驗(yàn)有很 大的幫助。程序的編寫(xiě)在記事本中進(jìn)行即可,再在 mask 中編譯,link 中連接運(yùn) 行,當(dāng)然也可以在專(zhuān)門(mén)的匯編工具中進(jìn)行。通過(guò)實(shí)驗(yàn),可以在很大程度上加深印 象,在書(shū)上看程序,一切都是理所當(dāng)然,十分順利,而自己動(dòng)手,才會(huì)真正發(fā)現(xiàn) 自己的不足之處。 現(xiàn)在匯編語(yǔ)言的課程已經(jīng)告一段落了,學(xué)習(xí)過(guò)程中遇到的所有困難以及遺留 的難點(diǎn)都需要我們?cè)谄溆鄷r(shí)間里逐步攻克,在打好基礎(chǔ)的前提下,學(xué)習(xí)更加專(zhuān)業(yè) 的匯編知識(shí)來(lái)為我們所用。
匯編語(yǔ)言學(xué)結(jié) [篇5]
在沒(méi)有學(xué)習(xí)匯編語(yǔ)言以前,我可能會(huì)對(duì)匯編這門(mén)強(qiáng)大而又難學(xué)的程序設(shè)計(jì)語(yǔ)言產(chǎn)生懷疑,因?yàn)楝F(xiàn)在我們有那么多的高級(jí)編程語(yǔ)言可以學(xué)習(xí),尤其是現(xiàn)在日益強(qiáng)大的面向?qū)ο笳Z(yǔ)言。而且每種語(yǔ)言都要比匯編語(yǔ)言學(xué)起來(lái)容易,而且開(kāi)發(fā)效率更高。那么我們?yōu)槭裁催要學(xué)習(xí)匯編,匯編這門(mén)程序設(shè)計(jì)語(yǔ)言的存在意義在哪。
學(xué)習(xí)了匯編語(yǔ)言之后,我發(fā)現(xiàn)我不再懷疑匯編語(yǔ)言的強(qiáng)大之處了,匯編語(yǔ)言是一種很強(qiáng)的語(yǔ)言,這是我以前不愿意承認(rèn)的事實(shí),它的強(qiáng)大在于效率。因?yàn)閰R編語(yǔ)言要實(shí)現(xiàn)的是執(zhí)行的效率,而不是開(kāi)發(fā)上的效率,這一點(diǎn)可能與現(xiàn)階段的那些所謂的面向?qū)ο笠约捌渌囊恍╅_(kāi)發(fā)語(yǔ)言的目標(biāo)不同。用匯編語(yǔ)言寫(xiě)的程序,無(wú)論是在程序的大小上還是在執(zhí)行時(shí)間上都遠(yuǎn)遠(yuǎn)優(yōu)于高級(jí)語(yǔ)言,即使這種高級(jí)語(yǔ)言可能使大家公認(rèn)的已經(jīng)比較底層的c語(yǔ)言。
匯編語(yǔ)言與其它的程序設(shè)計(jì)語(yǔ)言相比,操作的是更加底層的東西,它可以直接與硬件打交道,而別的語(yǔ)言基本不可能實(shí)現(xiàn)這樣的功能。既然是與硬件打交道,那么我們?cè)趯?xiě)程序的時(shí)候就要更加小心了,可能一不小心就會(huì)把程序跑丟了。如果我們不能夠控制程序的正常邏輯,那么程序運(yùn)行超出我們的控制范圍以后,到底會(huì)運(yùn)行到哪里,我們也無(wú)從知曉。比如說(shuō)我們本來(lái)是要操作一個(gè)用戶(hù)內(nèi)存地址空間的數(shù)據(jù),但是有時(shí)我們會(huì)不注意,程序運(yùn)行到了內(nèi)核內(nèi)存地址空間去了,那么這樣的程序肯定要面臨崩潰了。幸好我們現(xiàn)在使用的是虛擬模式下的匯編語(yǔ)言編程,不用去考慮那么多的問(wèn)題,大不了重新啟動(dòng)一下資源管理器,要不然電腦還不知道會(huì)崩潰多少次。
與匯編語(yǔ)言相比,高級(jí)語(yǔ)言在這方面做的就很不錯(cuò)了,畢竟我們?cè)趯?xiě)高級(jí)語(yǔ)言代碼的時(shí)候,沒(méi)有直接對(duì)底層的硬件進(jìn)行操作,而先與操作系統(tǒng)打交道。至于操作硬件,那是操作系統(tǒng)的事情了,這樣我們可以在一定程度上少犯錯(cuò)誤,而且與此同時(shí)可以減少花在調(diào)試程序上的時(shí)間,提高了開(kāi)發(fā)效率。但是這并不代表不會(huì)出現(xiàn)問(wèn)題,用高級(jí)語(yǔ)言寫(xiě)程序,有時(shí)也會(huì)出現(xiàn)這樣或者那樣的問(wèn)題。而且出了問(wèn)題,我們可能更加無(wú)所適從,因?yàn)槲覀冇袝r(shí)不知道語(yǔ)言?xún)?nèi)部是如何實(shí)現(xiàn)交互的,我們也不可能了解每種解決方案的實(shí)現(xiàn)細(xì)節(jié)。匯編語(yǔ)言的另一個(gè)優(yōu)勢(shì)就是我們必須很清楚我們寫(xiě)的代碼是干什么的。這是因?yàn)檫@樣,我們寫(xiě)出來(lái)的代碼沒(méi)有太多的無(wú)用代碼,幾乎每一句代碼都為我們實(shí)現(xiàn)了某些實(shí)質(zhì)性的操作。同時(shí)由于匯編語(yǔ)言直接操作底層硬件,所以不會(huì)像高級(jí)語(yǔ)言那樣,需要一大堆的代碼先和操作系統(tǒng)交互,然后操作系統(tǒng)再操作硬件邏輯。高級(jí)語(yǔ)言產(chǎn)生的程序之所以非常大且臃腫還有一個(gè)原因是它要包含一些程序集之類(lèi)的東西,可能一個(gè)程序集里面我們只需要某一點(diǎn),但是在編譯、連接產(chǎn)生應(yīng)用程序的時(shí)候,高級(jí)語(yǔ)言卻將一個(gè)很大的程序集包含進(jìn)來(lái)(比如說(shuō)#include <stdio.h>),這使得我們的程序與匯編語(yǔ)言相比變得很臃腫,而且真正有用的東西并不是很多。學(xué)習(xí)匯編語(yǔ)言我認(rèn)為還有一個(gè)好處就是使我們對(duì)于一些底層的東西更加了解和熟悉,知道在程序運(yùn)行的過(guò)程中,操作系統(tǒng)和內(nèi)存里面到底在發(fā)生著些什么事情,這樣更加有助于我們加深對(duì)于程序設(shè)計(jì)的理解。
通過(guò)匯編語(yǔ)言的學(xué)習(xí),我認(rèn)為自己學(xué)到了很多東西,可能有的時(shí)候?qū)τ谝恍﹥?nèi)存里發(fā)生的事情還不是很清楚。但是即使這樣,現(xiàn)階段學(xué)到的這些東西已經(jīng)很有助于我對(duì)于操作系統(tǒng)和組成原理方面的一些內(nèi)容的理解了。其實(shí)學(xué)習(xí)一門(mén)語(yǔ)言,有時(shí)感覺(jué)一是在學(xué)習(xí)他的語(yǔ)法上的內(nèi)容,另一方面可能也是在學(xué)習(xí)它的一些思想。匯編語(yǔ)言對(duì)于語(yǔ)法的嚴(yán)謹(jǐn)性讓我們?cè)谒伎紗?wèn)題的時(shí)候變得思維變得更加嚴(yán)謹(jǐn)、縝密,而不再是僅僅的想象一下就罷了。
【語(yǔ)言學(xué)結(jié)】相關(guān)文章:
助研實(shí)結(jié)08-06
c語(yǔ)言學(xué)習(xí)心得03-20
英語(yǔ)語(yǔ)言學(xué)復(fù)習(xí)資料01-27
大學(xué)c語(yǔ)言學(xué)習(xí)心得03-22
如意結(jié)的編織方法07-07
婦聯(lián)工作總 結(jié)08-05
學(xué)結(jié)自我評(píng)價(jià)08-06
生化科室實(shí)結(jié)08-06