微機04第四章匯編程序設(shè)計PPT課件_第1頁
微機04第四章匯編程序設(shè)計PPT課件_第2頁
微機04第四章匯編程序設(shè)計PPT課件_第3頁
微機04第四章匯編程序設(shè)計PPT課件_第4頁
微機04第四章匯編程序設(shè)計PPT課件_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第四章 匯編語言程序設(shè)計南理工紫金學(xué)院帥輝明匯編語言數(shù)據(jù)和表達式偽指令語法程序設(shè)計順序、分支、循環(huán)、子程序dos功能調(diào)用本章重點機器語言:由機器語言:由0、1代碼所組成的語言。面向機器,代碼所組成的語言。面向機器,同一組代碼對不同的計算機表示不同的含義。同一組代碼對不同的計算機表示不同的含義。匯編語言:由助記符表示的語言。面向機器。匯編語言:由助記符表示的語言。面向機器。高級語言:用一些接近人們書寫習(xí)慣的英語和數(shù)高級語言:用一些接近人們書寫習(xí)慣的英語和數(shù)學(xué)表達式形式的句子編寫程序。這種語言不面向?qū)W表達式形式的句子編寫程序。這種語言不面向機器,而是面向過程、面向?qū)ο蟆C器,而是面向過程、面向?qū)ο?/p>

2、。4.1 程序設(shè)計語言概述高級語言高級語言c、c+、pascal語言如:turbo c、vc+、delphi、gnu gcc匯編語言匯編語言機器語言機器語言高級語言高級語言虛擬機虛擬機c#、java.net、jvm各種語言的關(guān)系各種語言的關(guān)系1.數(shù)據(jù)(1)常數(shù)表示匯編過程中已經(jīng)有確定數(shù)值的量,主要用于做指令中的立即數(shù)、尋址中的位移量,或在偽指令語句中給變量賦值。數(shù)值常數(shù):由二、八、十和十六進制表達的數(shù) 字符串常數(shù):用 (或“ ”)括起來的一串a(chǎn)scii碼字符,等效為一組數(shù)值常數(shù)4.2 8086匯編語言介紹0101b3247o2873d23abh12ab= 31h、32h、41h、42h內(nèi)存單元

3、的數(shù)據(jù),變量值在程序運行期間可以改變。需要事先定義,通過變量名引用。變量名表示變量的首地址。在。變量的屬性段:變量所在段基址偏移量:變量在段內(nèi)的偏移量類型:變量的字節(jié)數(shù),db、dw、dd(2)變量在指令前面,代表指令所在存儲單元的地址。通常作為程序中轉(zhuǎn)移、調(diào)用、循環(huán)指令的轉(zhuǎn)移目標(biāo)地址。定義方式 標(biāo)識符:標(biāo)號的屬性:段:變量所在段基址偏移量:變量在段內(nèi)的偏移量距離: near段內(nèi)標(biāo)號、 far段外標(biāo)號(3)標(biāo)號2、表達式 由常數(shù)、變量或標(biāo)號、運算符連接而成 分類:數(shù)字表達式、地址表達式(1)運算符算術(shù)運算符算術(shù)運算符+、-、*、/、mod邏輯運算符邏輯運算符and、or、not、xor關(guān)系運算符

4、關(guān)系運算符eq、ne、lt、le、gt、ge注意與注意與算術(shù)運算指令算術(shù)運算指令和和邏輯運算指令邏輯運算指令的區(qū)別的區(qū)別anddx, port and 0ffhmov ax, value mod 7 ;value=50mov al, not 0fhmov ax, 0fh eq 1111b舉例:mov ax, 1mov al, f0h關(guān)系成立結(jié)果全為關(guān)系成立結(jié)果全為1否則全為否則全為0mov ax, ffffh對存儲單元的操作(2)數(shù)值返回運算符段基址運算符段基址運算符segseg 變量變量/標(biāo)標(biāo)號號偏移量運算符偏移量運算符offsetoffset 變量變量/標(biāo)號標(biāo)號類型運算符類型運算符type

5、type 變量變量/標(biāo)標(biāo)號號長度運算符長度運算符lengthlength 變量變量字節(jié)總數(shù)運算符字節(jié)總數(shù)運算符sizesize 變量變量seg返回變量/標(biāo)號的段基址offset返回變量/標(biāo)號的段內(nèi)偏移舉例:movax,seg k1mov bx,seg arraymovbx,offset array變量k1所在段的段基址為0915h變量array所在段的段基址為0947h,偏移為0100h運算符seg和offset= movax,0915h= mov bx,0947h= movbx,0100h運算符type數(shù)據(jù)數(shù)據(jù)類型類型偽指令偽指令type值值變量變量字節(jié)字節(jié)db1字字dw2雙字雙字dd4四字

6、四字dq8五字五字dt10標(biāo)號標(biāo)號近程近程near-1遠程遠程far-2length返回數(shù)組元素的個數(shù)若變量用重復(fù)數(shù)據(jù)操作符dup定義,則返回最外層dup的值若變量無dup說明則返回1size返回數(shù)組變量所占的總字節(jié)數(shù)=length*type運算符length和sizek1db10h dup(0)k2db“abcdef”type k1 = type k2 =lengthk1 = length k2 =size k1 = size k2 =舉例:1101*10=10111*1=1(3)屬性運算符類型修改運算符類型修改運算符類型類型 ptr 地址表達式地址表達式短轉(zhuǎn)移運算符短轉(zhuǎn)移運算符jmp sh

7、ort 標(biāo)號標(biāo)號段超越運算符段超越運算符段名:地址表達式段名:地址表達式(4)運算符優(yōu)先級優(yōu)先級優(yōu)先級運算符運算符高高length,size, 段超越運算符段超越運算符ptr,offset,seg,type,this*,/,mod,shl,shr+,-eq,ne,lt,le,gt,ge低低not and or xorshort指令語句偽指令語句宏指令語句3.偽指令執(zhí)行語句。經(jīng)過匯編產(chǎn)生可供計執(zhí)行語句。經(jīng)過匯編產(chǎn)生可供計算機硬件執(zhí)行的機器目標(biāo)代碼。算機硬件執(zhí)行的機器目標(biāo)代碼。說明語句。如:程序有幾個段,說明語句。如:程序有幾個段,段的名稱,是否需要預(yù)留存儲空段的名稱,是否需要預(yù)留存儲空間等。不直

8、接產(chǎn)生目標(biāo)代碼。間等。不直接產(chǎn)生目標(biāo)代碼。指令語句指令語句+偽指令語句。替代源偽指令語句。替代源程序中一段有獨立功能的程序,程序中一段有獨立功能的程序,匯編時產(chǎn)生相應(yīng)的目標(biāo)代碼。匯編時產(chǎn)生相應(yīng)的目標(biāo)代碼。定義變量,并關(guān)聯(lián)變量名和存儲單元地址。定義格式:變量名 類型 數(shù)據(jù)項表類型:db dw dd dq dt數(shù)據(jù)表項:變量的長度、數(shù)組元素個數(shù)、變量的初值(1)變量定義偽指令dbyte db -5h一個字節(jié)變量,值為-5hdword dw 6*3一個字變量,值為18ddword dd 1234h一個雙字變量,值為1234h數(shù)據(jù)定義例數(shù)值初值fbh12h00h34h12h00h00hdbytedwo

9、rdddwordstring1 db ab一個字節(jié)變量,值為astring2 dw ab一個字變量,值為abstring3 dd ab一個雙字變量,值為ab數(shù)據(jù)定義例字符串41h42h42h41h42h41h00h00hstring1string2string3偽指令:dup,重復(fù)賦值格式:重復(fù)次數(shù) dup(操作數(shù),.,操作數(shù))subb dw1000 dup (?)包含1000數(shù)組元素值不確定sdkp db2 dup (0,2 dup(1)包含2個數(shù)組元素每個元素由2部分構(gòu)成,0和另一個數(shù)組b數(shù)組b包含2個元素,值為1數(shù)據(jù)定義例數(shù)組(1)buff db16 dup (welcome)包含16個

10、元素每個元素的值為welcomeling db4 dup (0,1)包含4個元素每個元素的數(shù)據(jù)為0和1數(shù)據(jù)定義例數(shù)組(2)賦值偽指令:equ定義格式:符號名 equ 表達式等號偽指令:定義格式:符號名 表達式:都不直接產(chǎn)生機器指令:賦值偽指令不可以重名 (2)符號定義偽指令count=5;常數(shù)num= 13+5-4;數(shù)值表達式num = num+1adr1 equ ds:bp+4 ;地址表達式creg equ cx;寄存器名cbdequ daa;指令名l1equ substart ;標(biāo)號名woequ word ptr dbyte;變量名舉例:把源程序劃分成若干邏輯段,便于匯編程序生產(chǎn)相應(yīng)代碼,

11、便于連接程序生產(chǎn)可執(zhí)行程序。一個匯編語言源程序可以包含若干個邏輯段(代碼段、數(shù)據(jù)段、附加段或堆棧段),段與段之間的順序可隨意排列。需獨立運行的程序,并指示程序執(zhí)行的起始點,一個程序只有一個起始點。(3)段定義偽指令段名段名 segment 定位類型定位類型組合類組合類型型類別名類別名段名段名 ends邏輯段定義格式stack segment stack.stack endsdata segment.data endscode segmentassume cs:code,ds:data,ss:stack.code ends格式:org 表達式功能:表明從表達式所指地址開始存放程序或數(shù)據(jù)舉例:da

12、tadata segmentsegment buff1 buff1dbdb2323,56h56h,eofeof orgorg2000h2000h buff2 buff2dbdbstringstringdatadata endsends(4)設(shè)置起始地址偽指令表示整個源程序結(jié)束,停止匯編。定義格式:end 標(biāo)號注意:與第一條指令的標(biāo)號相同;必須是最后一條語句;若有多個end語句,只有第一個有效。(5)匯編結(jié)束偽指令說明段寄存器和用戶編寫的段的對應(yīng)關(guān)系,表示出用戶編寫的段屬于系統(tǒng)規(guī)定的哪個段一般設(shè)在代碼段中定義格式:assume 段寄存器名:段名, 段寄存器名:段名(6)段寄存器設(shè)定偽指令3.3

13、匯編語言程序設(shè)計匯編程序的結(jié)構(gòu)框架data segmentdata endscode segment assume cs:code, ds:data;定義過程定義過程start:movax,data movds,ax movah,4ch int21hcode endsend start數(shù)據(jù)段定義變量數(shù)據(jù)段定義變量段寄存器定義段寄存器定義ds的裝入的裝入退出程序退出程序過程:具有一定功能的子程序,call調(diào)用定義格式:過程名proc距離類型ret過程名endp注意:過程和段可以互相嵌套,但不可交叉覆蓋每個過程一定有返回指令ret,可能有多個最后一條指令必須是ret(7)過程定義偽指令名字 操作碼

14、 操作數(shù) 注釋 start: mov ax,30h ; ax30h名字以字母開頭,由字母、數(shù)字、特殊字符(?、*、_、$、等)組成,不超過31字符不能與保留字相同任選,多數(shù)指令不用,偽指令用指令語句名字用“:”分界,偽指令語句用空格分界標(biāo)號名、變量名、常量名、過程名、段名等4、匯編語言語句結(jié)構(gòu)操作碼必不可少的核心,規(guī)定了所要執(zhí)行的操作,由指令或偽指令助記符組成操作數(shù)參與操作的數(shù)據(jù)或地址,可以有多種表達形式,之間用,隔開注釋; 后面的字符串1、程序設(shè)計的基本步驟分析題目與合理分配存儲空間和存儲器編寫源程序調(diào)試源程序4.3 匯編語言程序設(shè)計2、順序結(jié)構(gòu)例4-15把buf開始的兩個字節(jié)單元中的壓縮b

15、cd數(shù)相加,結(jié)果存入字節(jié)單元res中bcd碼:為了讓計算機能識別十進制數(shù)例如:通常十進制數(shù)49在計算機中為31h,不方便程序員觀察和記憶,用bcd碼存放則直接為49hbuf db 89h,34hres dw ?lea bx,buf ;bx為buf的有效地址mov al,buf ;buf中的第一個字節(jié)add al,bx+1 ; bx+1 為buf中的第二個字節(jié)daamov res,ax例4-18 求數(shù)x的絕對值,并送值回原處stacksegment stackdw256dup(?)stackendsdata segmentxadr dw3456h, 8192hdata endscode segm

16、entassume cs:code,ds:data,ss:stack3、分支結(jié)構(gòu)定義了一個空棧定義了一個空棧start:mov ax, datamov ds, axdone:mov ah, 4chint 21hcode endsend start例4-20求某數(shù)據(jù)區(qū)內(nèi)負數(shù)的個數(shù) 設(shè)數(shù)據(jù)區(qū)第一個單元存放數(shù)據(jù)個數(shù),第二單元開始存放數(shù)據(jù),最后一個單元存放結(jié)果。stack segment stackdw64 dup(?)stack endscode segmentassume cs:code,ss:stack,ds:code4、循環(huán)結(jié)構(gòu)start:movdi, 3000h;設(shè)置數(shù)據(jù)區(qū)首地址movcl,

17、 di;設(shè)置循環(huán)次數(shù)(即數(shù)據(jù)個數(shù))(設(shè)置初值)xorch, ch;ch清0mov bl, ch;bl統(tǒng)計負數(shù)個數(shù),初值為0incdi;指向第一個元素(循環(huán)條件改變)a1:moval, ditestal, 80h;測試數(shù)據(jù)首位=1?jea2;zf=1,數(shù)據(jù)首位=0incbl;負數(shù)個數(shù)+1a2:incdi;指向下一個元素loop a1movdi, bl;存放統(tǒng)計結(jié)果注意:主程序與子程序之間的參數(shù)傳遞保護和恢復(fù)主程序中寄存器的現(xiàn)場數(shù)據(jù)主程序與子程序之間的參數(shù)傳遞方式寄存器傳遞參數(shù)堆棧傳遞參數(shù)指定存儲單元傳遞參數(shù)5、子程序設(shè)計例4-23 求2個32位數(shù)的和。(利用堆棧傳遞參數(shù))code segment

18、assume cs:code,ds:code,ss:codeorg 100h start:jmpmainmain :movax, codemov ds, axmovcx, 0002;定義調(diào)用次數(shù)movsi, 0;定義數(shù)據(jù)指針clc;cf0repeat:movax, addt1 ;取當(dāng)前數(shù)xpushax;壓入堆棧movax, addt2si;取當(dāng)前數(shù)ypushax;壓入堆棧calladdition;調(diào)用加法子程序movsumsi, ax;送當(dāng)次運算結(jié)果incsiincsi;指向下一個數(shù)據(jù)looprepeatmovax, 4c00h;結(jié)束調(diào)用int21hadditionproc nearmovbp

19、, sp;指向棧頂movax, bp+2;取第一個加數(shù)adcax, bp+4;取第二個加數(shù)ret4;彈出兩個加數(shù)additionendpcode endsendstartdos系統(tǒng)功能調(diào)用和bios中斷調(diào)用1常用dos系統(tǒng)功能調(diào)用dos系統(tǒng)功能調(diào)用即dos為用戶提供的一組例行子程序,其調(diào)用和返回不是用call和ret,而是用int n和iret。這些子程序可分為以下幾個方面:磁盤的讀寫及控制管理。內(nèi)存管理基本輸入/輸出管理(如鍵盤、打印機、顯示器)其他管理(如日期、時間)所有這些子程序按順序編號(調(diào)用號),分別為075h。調(diào)用方法:子程序入口參數(shù)送相應(yīng)寄存器 調(diào)用功能號送ah int 21h(

20、1)1號功能調(diào)用(鍵盤輸入并顯示) mov ah,1 int 21h 功能:掃描鍵盤,等待輸入,若有鍵盤按下,則將鍵值讀入并判斷是否為ctrl+break鍵,若是,退出;若不是,則將鍵值(字符的ascii碼)送al,同時在crt上顯示該字符。(2)2號功能調(diào)用(顯示一個字符) mov ah,2 mov dl,待顯字符ascii碼 int 21h (3)9號功能調(diào)用(字符串顯示) mov dx,待顯示字符串首地址 mov ah,9 int 21h 功能:將以$為結(jié)束標(biāo)志的字符串在屏幕上顯示。說明:(1)執(zhí)行前要在ds數(shù)據(jù)段定義一個字符串,該字符串必須在$結(jié)尾。(2)若字符串無$結(jié)尾,則在其尾部加

21、一$;若字符串中間有$,則只能采用2號功能調(diào)用逐個字符輸出。 (4)10號功能調(diào)用(字符串輸入) mov ah,10 mov dx,待存數(shù)據(jù)區(qū)首地址 int 21h 功能:從鍵盤上接收字符串送到內(nèi)存數(shù)據(jù)中。 注意:數(shù)據(jù)區(qū)的定義形式: buf db 50 ;數(shù)據(jù)區(qū)長度 db ? ;實際輸入字符的個數(shù) db 50 dup(?) ;存放輸入的字符 如果輸入的字符數(shù)大于數(shù)據(jù)區(qū)所定義的字符個數(shù),就會發(fā)出“嘟嘟”聲。(5)4ch號功能調(diào)用(返回操作系統(tǒng)) mov ah,4ch int 21h 功能:結(jié)束當(dāng)前正在執(zhí)行的程序,返回操作系統(tǒng),屏幕顯示操作系統(tǒng)提示符。2bios中斷調(diào)用 駐留在rom中的bios提供了系統(tǒng)加電自檢、引導(dǎo)裝入i/o設(shè)備的處理程序及接口控制等

溫馨提示

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

評論

0/150

提交評論