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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

6、大小為200個字節(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)計數(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轉nextmov sum, ax;(cx)=0累加結果summov ah, 4chint 21h;返回doscodeendsend start;源程序結束語句。程序運行時,啟動地址為start二、 分段在該例中,一共定義了三個段:堆棧段、數(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三、 語句該例中的源程序由一系列語句組成。語句的一般格式為:名字 操作符 操作數(shù)或地址 ;注釋1. 操作符可分為3類:l 指令l 偽指令l 宏2. 操作數(shù)也可分為3類:l 數(shù)值l 寄存器l 內(nèi)存3. 常用指令:mov ax, 0add ax, bxinc axdec cx等1.3 匯編和調(diào)試過程一、 匯編過程1. 必備軟件l masm.exel link.exel td.exel 其他:文本編輯器、dosbox等2. 命令l masm demo.asm匯編demo.asm,應該生成masm.objl link demo.obj連接demo.ob

9、j,應該生成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 標記寄存器操作區(qū)l 堆棧段操作區(qū)標記有:l 當前指令標記l 當前棧頂標記2. td的主要操作l 單步執(zhí)行:f7,f8l 設置(取消)斷點:f2l 直接執(zhí)行:f93. 查看數(shù)據(jù)區(qū)4. 查看用戶界面5. 修改數(shù)據(jù)、指令、寄存器內(nèi)容1.4 intel 8086微處理器簡介匯編語言是一種面向機器的低級語言,要學好它,必須對計算機硬件結構有一個初步了解。一、 微型計算機的組成微型計算機主要由微處理器

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論