匯編語(yǔ)言第一章預(yù)備知識(shí)new_第1頁(yè)
匯編語(yǔ)言第一章預(yù)備知識(shí)new_第2頁(yè)
匯編語(yǔ)言第一章預(yù)備知識(shí)new_第3頁(yè)
匯編語(yǔ)言第一章預(yù)備知識(shí)new_第4頁(yè)
匯編語(yǔ)言第一章預(yù)備知識(shí)new_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第一章 預(yù)備知識(shí)匯編語(yǔ)言是面向機(jī)器的低級(jí)語(yǔ)言:和其他計(jì)算機(jī)語(yǔ)言相比,能夠充分利用計(jì)算機(jī)硬件特性;隨機(jī)器的不同而不同。學(xué)習(xí)匯編語(yǔ)言必須做到:了解特定機(jī)器的硬件;了解其數(shù)據(jù)類(lèi)型的表示方法;了解其指令系統(tǒng)等。本章的內(nèi)容包括:什么是匯編語(yǔ)言;匯編源程序舉例;匯編和調(diào)試過(guò)程;寄存器組1.1 機(jī)器語(yǔ)言與匯編語(yǔ)言人們用計(jì)算機(jī)語(yǔ)言操縱計(jì)算機(jī),和計(jì)算機(jī)交流信息。一般來(lái)說(shuō),計(jì)算機(jī)語(yǔ)言可以分為以下幾類(lèi):低級(jí)語(yǔ)言是面向機(jī)器的,為特定機(jī)器提出的;高級(jí)語(yǔ)言是面相人的,接近于自然語(yǔ)言,為了方便人們使用提出的。計(jì)算機(jī)語(yǔ)言8031匯編語(yǔ)言z80匯編語(yǔ)言8086匯編語(yǔ)言basic語(yǔ)言fortran語(yǔ)言c語(yǔ)言針對(duì)特定機(jī)器的機(jī)器語(yǔ)言

2、匯編語(yǔ)言低級(jí)語(yǔ)言高級(jí)語(yǔ)言第四代語(yǔ)言(vb、pb、asp等)一、 機(jī)器語(yǔ)言機(jī)器指令:能夠被計(jì)算機(jī)識(shí)別,并能直接加以執(zhí)行的語(yǔ)句。機(jī)器語(yǔ)言:由機(jī)器指令構(gòu)成的集合。機(jī)器指令也叫做硬指令,不同類(lèi)型的cpu都有自己特有的、一定數(shù)量的基本指令,組成其特有的機(jī)器語(yǔ)言。機(jī)器指令用二進(jìn)制代碼來(lái)表示,這樣才能夠被計(jì)算機(jī)識(shí)別并直接執(zhí)行。操作碼地址碼機(jī)器指令的一般形式為:例如:1011 10000111 11110000 0000操作碼:1011,mov目的操作數(shù):1000,ax源操作數(shù):0000 0000 0111 1111,立即數(shù)完成操作:mov ax, 7fh; 7fhax操作碼指出了運(yùn)算的種類(lèi),如數(shù)據(jù)傳送、加減

3、運(yùn)算等。地址碼指出了參與運(yùn)算的操作數(shù)和運(yùn)算結(jié)果的存放位置。用機(jī)器語(yǔ)言編程,就意味著要用二進(jìn)制數(shù)0和1編寫(xiě)程序。這樣做效率很低,而且容易出錯(cuò)。但為了能夠充分利用硬件特性,在一些時(shí)候仍然需要用低級(jí)語(yǔ)言編程,因此人們想辦法對(duì)機(jī)器語(yǔ)言進(jìn)行改進(jìn),提出了匯編語(yǔ)言。此后很少直接使用機(jī)器語(yǔ)言了。二、 匯編語(yǔ)言從本質(zhì)上看,匯編語(yǔ)言是一種符號(hào)化的機(jī)器語(yǔ)言:用助記符表示機(jī)器指令的操作碼;用變量代替操作數(shù)的存放地址;用在語(yǔ)句前加一個(gè)標(biāo)號(hào),來(lái)代表該指令的存放地址。匯編語(yǔ)言的主要操作與機(jī)器指令一一對(duì)應(yīng),是一種用符號(hào)書(shū)寫(xiě)的(不再是二進(jìn)制代碼)、并遵循一定語(yǔ)法規(guī)則的計(jì)算機(jī)語(yǔ)言。例如:mov ax, 7fhmov bx, 12

4、34hadd ax, bx匯編語(yǔ)言是為了方便用戶使用而設(shè)計(jì)的一種符號(hào)語(yǔ)言,并不能直接被計(jì)算機(jī)識(shí)別,必須將匯編語(yǔ)言程序翻譯成機(jī)器語(yǔ)言程序(也叫目標(biāo)程序),才能由計(jì)算機(jī)所執(zhí)行。翻譯過(guò)程的圖形表示:匯編源程序(用戶寫(xiě))目標(biāo)程序(機(jī)器寫(xiě))匯編程序(翻譯)匯編程序不同于匯編語(yǔ)言程序。匯編語(yǔ)言程序是用匯編語(yǔ)言寫(xiě)的程序,匯編程序是翻譯匯編語(yǔ)言程序的加工程序。匯編程序可分為:asm小匯編程序,占有較小的存貯區(qū),但功能較弱,沒(méi)有宏功能。masm宏匯編程序,需要較大的存貯區(qū),但功能強(qiáng)大,具有宏能力。這門(mén)課使用的是宏匯編程序。宏,是指用一個(gè)宏指令名字代替程序中重復(fù)出現(xiàn)的一組語(yǔ)句,在其它的地方,可以用宏指令名字及不同

5、的參數(shù)來(lái)調(diào)用。宏的功能類(lèi)似于子函數(shù),但實(shí)現(xiàn)方式不同。此外,匯編語(yǔ)言還必須指出:程序從什么地方開(kāi)始、什么時(shí)候結(jié)束、數(shù)據(jù)放在哪里、數(shù)據(jù)類(lèi)型是什么、臨時(shí)存貯區(qū)等,這需要一組另外的指令指示masm工作,這種指令叫做偽指令。三、 為什么要學(xué)習(xí)匯編語(yǔ)言?匯編程序產(chǎn)生的目標(biāo)程序簡(jiǎn)短,占用的存貯空間小,執(zhí)行速度快,適合于編寫(xiě)過(guò)程控制、多媒體接口、通訊程序。有些無(wú)法用高級(jí)語(yǔ)言實(shí)現(xiàn)的操作,可以由匯編完成。1.2 匯編源程序舉例舉例一、 完整源程序?yàn)榱藢?duì)匯編語(yǔ)言有具體的理解,下面編寫(xiě)一個(gè)簡(jiǎn)單的程序:.386;堆棧段 stack segment use16 stack;段名和組合類(lèi)型db 200 dup(0);堆棧的

6、大小為200個(gè)字節(jié)stack ends;數(shù)據(jù)段datasegment use16;段為16位段sum dw ?;sum為字變量,初值不定dataends;代碼段codesegment use16assume cs:code, ss:stack, ds:data, es:datastart:mov ax, datamov ds, ax;數(shù)據(jù)段首址送dsmov cx, 50;循環(huán)計(jì)數(shù)器置初值mov ax, 0;累加器置初值mov bx, 1;1bxnext:add ax, bx;(ax)+(bx)axinc bxinc bx;(bx)+2bxdec cx;(cx)-1cxjne next;(cx)

7、0轉(zhuǎn)nextmov sum, ax;(cx)=0累加結(jié)果summov ah, 4chint 21h;返回doscodeendsend start;源程序結(jié)束語(yǔ)句。程序運(yùn)行時(shí),啟動(dòng)地址為start二、 分段在該例中,一共定義了三個(gè)段:堆棧段、數(shù)據(jù)段和代碼段。.386;堆棧段 stack segment use16 stack stack ends;數(shù)據(jù)段datasegment use16dataends;代碼段codesegment use16assume cs:code, ss:stack, ds:data, es:datastart:mov ax,datamov ds,axmov ah,4c

8、hint 21hcodeendsend start三、 語(yǔ)句該例中的源程序由一系列語(yǔ)句組成。語(yǔ)句的一般格式為:名字 操作符 操作數(shù)或地址 ;注釋1. 操作符可分為3類(lèi):l 指令l 偽指令l 宏2. 操作數(shù)也可分為3類(lèi):l 數(shù)值l 寄存器l 內(nèi)存3. 常用指令:mov ax, 0add ax, bxinc axdec cx等1.3 匯編和調(diào)試過(guò)程一、 匯編過(guò)程1. 必備軟件l masm.exel link.exel td.exel 其他:文本編輯器、dosbox等2. 命令l masm demo.asm匯編demo.asm,應(yīng)該生成masm.objl link demo.obj連接demo.ob

9、j,應(yīng)該生成masm.exel td demo.exe調(diào)試demo.exe二、 調(diào)試程序turbo debugger的使用1. 如圖,td的界面可分為:l 菜單l 代碼操作區(qū)l 數(shù)據(jù)操作區(qū)l 寄存器操作區(qū)l 標(biāo)記寄存器操作區(qū)l 堆棧段操作區(qū)標(biāo)記有:l 當(dāng)前指令標(biāo)記l 當(dāng)前棧頂標(biāo)記2. td的主要操作l 單步執(zhí)行:f7,f8l 設(shè)置(取消)斷點(diǎn):f2l 直接執(zhí)行:f93. 查看數(shù)據(jù)區(qū)4. 查看用戶界面5. 修改數(shù)據(jù)、指令、寄存器內(nèi)容1.4 intel 8086微處理器簡(jiǎn)介匯編語(yǔ)言是一種面向機(jī)器的低級(jí)語(yǔ)言,要學(xué)好它,必須對(duì)計(jì)算機(jī)硬件結(jié)構(gòu)有一個(gè)初步了解。一、 微型計(jì)算機(jī)的組成微型計(jì)算機(jī)主要由微處理器

10、(cpu)、主存貯器(mm)、外部設(shè)備及互連部件組成。如下圖所示:微處理器是計(jì)算機(jī)系統(tǒng)的核心。存貯器:存放程序以及數(shù)據(jù)、信息、中間結(jié)果。外設(shè):i/o設(shè)備和大容量存貯器。i/o設(shè)備包括顯示器、打印機(jī)、鍵盤(pán)等。二、 intel 80x86內(nèi)部結(jié)構(gòu)個(gè)人電腦的發(fā)展,經(jīng)過(guò)了8086、80186、80286、80386等幾代產(chǎn)品,intel 80x86是1985年推出的32位處理器,按功能可分為執(zhí)行部件(eu)和總線接口部件(biu)。其中運(yùn)算器執(zhí)行所有的算術(shù)和邏輯運(yùn)算指令;控制器負(fù)責(zé)計(jì)算機(jī)的控制工作(如取出指令、發(fā)出各種控制命令)。其內(nèi)部結(jié)構(gòu)如下所示:各部分的功能:1. 總線接口部件:是cpu與整個(gè)計(jì)算

11、機(jī)系統(tǒng)之間的高速接口功能:接受所有的總線操作請(qǐng)求,并按優(yōu)先權(quán)進(jìn)行選擇,最大限度地利用本身的資源為這些請(qǐng)求服務(wù)。2. 執(zhí)行部件:寄存器組、標(biāo)志寄存器、算邏部件、控制部件等組成功能:從譯碼指令隊(duì)列中取出指令并且執(zhí)行(1) 數(shù)據(jù)寄存器組(eax,ebx,ecx,edx)l eax (累加器)accumulatorl ebx (基址寄存器)basel ecx (計(jì)數(shù)寄存器)countl edx (數(shù)據(jù)寄存器)data作用 :用來(lái)保存操作數(shù)、運(yùn)算結(jié)果或作指示器、變址寄存器,減少存取操作數(shù)所需要的訪問(wèn)總線和主存儲(chǔ)器的時(shí)間,加快運(yùn)行速度。注意:l 它們既可作32位、16位寄存器,也可作8位寄存器使用。l 1

12、6位和8位的寄存器不能作指示器或變址寄存器。(2) 指示器變址寄存器組(esi、edi、esp、ebp)作用:一般用來(lái)存放操作數(shù)的偏移地址,用作指示器或變址寄存器。l esp(stack pointer),稱(chēng)為堆棧指示器,存放的是當(dāng)前堆棧段中棧頂?shù)钠频刂?;l ebp(base pointer),為對(duì)堆棧操作的基址寄存器;l esi(source index),稱(chēng)為源變址寄址器;字符串指令源操作數(shù)的指示器;l edi(destination index),稱(chēng)為目的變址寄存器;字符串指令目的操作數(shù)的指示器3. 指令預(yù)取部件和指令譯碼部件指令預(yù)取部件:通過(guò)總線接口部件,把將要執(zhí)行的指令從主存中取出

13、,送入指令排隊(duì)機(jī)構(gòu)中排隊(duì)。指令譯碼部件:從指令預(yù)取部件中讀出指令并譯碼,再送入譯碼指令隊(duì)列排隊(duì)供執(zhí)行部件使用。指令指示器:它總是保存著下一條將要被cpu執(zhí)行的指令的偏移地址,其值為該指令到所在段首址的字節(jié)距離。4. 分段部件和分頁(yè)部件(1) 使用分段部件和分頁(yè)部件實(shí)現(xiàn)虛擬存儲(chǔ)空間映射到物理存儲(chǔ)空間程序員使用二維地址,即“段地址:段內(nèi)偏移地址”分段部件段地址:段內(nèi)偏移地址一維的線性的地址分頁(yè)部件虛擬的線性的地址主存儲(chǔ)器的物理地址(2) 段寄存器用來(lái)保存段首地址l 代碼段寄存器 csl 堆棧段寄存器 ssl 數(shù)據(jù)段寄存器 dsl 附加段寄存器 esl 附加段寄存器 fsl 附加段寄存器 gs5.

14、指令執(zhí)行過(guò)程:(1) 指令預(yù)取部件和指令譯碼部件 由eip取得指令的偏移地址eip增量,形成下一條指令的地址(2) 分段部件和分頁(yè)部件由分段部件和分頁(yè)部件,將“cs : eip”轉(zhuǎn)換為指令的物理地址(3) 總線接口部件從主存中取指令送到預(yù)取指令隊(duì)列(4) cpu按序從預(yù)取指令隊(duì)列中取出指令送到指令譯碼部件。(5) 指令譯碼部件譯碼,執(zhí)行部件執(zhí)行指令;(6) 執(zhí)行過(guò)程中若需要取主存操作數(shù),從指令中取得操作數(shù)偏移地址(7) 分段部件和分頁(yè)部件由分段部件和分頁(yè)部件,將“段首址 : 偏移地址”轉(zhuǎn)換為操作數(shù)的物理地址(8) 總線接口部件從主存中取數(shù)據(jù)送到執(zhí)行部件三、 80x86的三種工作方式1. 實(shí)方式(實(shí)際地址)操作相當(dāng)于一個(gè)可進(jìn)行32位快速

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論