匯編語言程序相關(guān)設(shè)計_第1頁
匯編語言程序相關(guān)設(shè)計_第2頁
匯編語言程序相關(guān)設(shè)計_第3頁
匯編語言程序相關(guān)設(shè)計_第4頁
匯編語言程序相關(guān)設(shè)計_第5頁
已閱讀5頁,還剩86頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、匯編語言程序相關(guān)設(shè)計匯編語言程序設(shè)計Dept. of Computer Science & Technology,USTC2011.9匯編語言程序相關(guān)設(shè)計匯 編匯編語言是助記符語言,不能直接在機器上執(zhí)行。 MOV AX,BX機器語言是二進制形式的語言,可以直接在機器上執(zhí)行。 將匯編語言翻譯成機器語言的過程稱為匯編,完成匯編的程序稱為匯編程序,用助記符表示的程序稱為匯編語言源程序。匯編語言程序相關(guān)設(shè)計匯 編匯編過程 ASM86,MASM86(宏匯編)匯編語言的指令和機器語言的指令之間有一一對應(yīng)的關(guān)系。匯編語言程序相關(guān)設(shè)計主要內(nèi)容宏匯編語言的基本語法偽 指 令系統(tǒng)功能調(diào)用匯編程序的功能及匯

2、編過程匯編語言程序設(shè)計匯編語言程序相關(guān)設(shè)計匯編語言程序相關(guān)設(shè)計匯編語言程序相關(guān)設(shè)計1.宏匯編語言的基本語法偽指令語句格式常數(shù)、變量和標號表達式與運算符匯編語言程序相關(guān)設(shè)計1).偽指令語句格式匯編語言程序相關(guān)設(shè)計 標號名字段這是一個任選字段。標號名后面不能用符號“:”,這是它與指令語句的突出區(qū)別。同為偽指令,標號名可以是常量名、變量名、過程名、結(jié)構(gòu)名、記錄名等??梢宰鳛橹噶钫Z句和偽指令語句的操作數(shù),這時,標號名就表示一個常量或存儲器地址。匯編語言程序相關(guān)設(shè)計 偽指令字段 這是偽指令語句不可省略的主要成分。偽指令種類很多、如定義數(shù)據(jù)偽指令DB,DW,DD;段定義偽指令SEGMENT;定義過程偽指令

3、PROC。它們是偽指令語句要求匯編程序完成的具體操作命令。匯編語言程序相關(guān)設(shè)計 操作數(shù)字段 本字段是否需要、需要幾個,需要什么樣的操作數(shù)等都由偽指令字段中偽指令來確定。操作數(shù)可以是一個常數(shù)(二進制、十進制、十六進制等)字符串、常量名、變量名、標號、一些專用的符號(如BYTE,F(xiàn)AR,PARA等)。匯編語言程序相關(guān)設(shè)計注釋字段這是一個任選字段,它必須以分號為開始,它的作用與指令語句的注釋宇段相同匯編語言程序相關(guān)設(shè)計2).常數(shù)、變量和標號 常數(shù)沒有任何屬性的純數(shù)值。在匯編期間,它的值已能完全確定,在程序運行中值也不會發(fā)生變化。它可以有以下幾種類型:二進制數(shù),八進制數(shù),十進制數(shù),十六進制數(shù),實數(shù):它

4、由整數(shù)、小數(shù)和指數(shù)3部分組成,這是計算機中的浮點表示法:士整數(shù)部分.小數(shù)部分E士指數(shù)部分。字符串常數(shù):用引號括起來的一個或多個字符。匯編語言程序相關(guān)設(shè)計變 量變量代表存放在某些存儲單元的數(shù)據(jù),這些數(shù)據(jù)在程序運行期間隨時可以修改。為了便于對變量的訪問,它常常以變量名的形式出現(xiàn)在程序中,它可以認為是存放數(shù)據(jù)存儲單元的符號地址。 (1)變量的定義與預(yù)置變量的定義與預(yù)置:定義變量就是給變量分配存儲單元且對這個存儲單元賦于一個符號名(變量名),同時將這些存儲單元預(yù)置初值。 定義變量是用數(shù)據(jù)定義偽指令DB,DW,DD等。例如:匯編語言程序相關(guān)設(shè)計變 量 段屬性(SEG):表示變量存放在哪一個邏輯段中(即變

5、量所在段的段基值); 偏移量屬性(OFFSET):表示變量在邏輯段中離段起始點的字節(jié)數(shù); 類型屬性(TYPE):表示變量占用存儲單元的字節(jié)數(shù)。匯編語言程序相關(guān)設(shè)計變 量(2)數(shù)據(jù)定義偽指令:這種偽指令主要為數(shù)據(jù)項分配存儲單元并預(yù)置初值。表達式形式:數(shù)值表達式、?表達式、字符串表達式、DUP表達式匯編語言程序相關(guān)設(shè)計表達式數(shù)值表達式AB DW 23H,0CABH?表達式BTX DB ?字符串表達式STRING DB “ABCDE”DUP表達式A4 DW 10 DUP(?)匯編語言程序相關(guān)設(shè)計標 號標號是一條指令目標代碼的符號地址,它常作為轉(zhuǎn)移指令(含子程序調(diào)用指令)的操作數(shù)。段屬性(SEG)、偏

6、移量(OFFSET)、 距離屬性(NEAR、FAR)匯編語言程序相關(guān)設(shè)計3).表達式與運算符表達式由操作數(shù)和運算符組成,在匯編時一個表達式得到個值。6類運算符:算術(shù)運算符、邏輯運算符、關(guān)系運算符、分析運算符、組合運算符和分離運算符,它們在匯編時完成相應(yīng)運算。匯編語言程序相關(guān)設(shè)計算術(shù)運算符+,一,*,是加減乘除運算符。MOD是除法取余運算符。例如,32 MOD 52SHL是左移操作符。例如,21H SHL 284H。SHR是右移操作符。匯編語言程序相關(guān)設(shè)計邏輯運算符AND是邏輯“與”操作符。 24H AND 0FH04HOR是邏輯“或”操作符。 24H OR 0FH2FH。XOR是“異或”操作符

7、。 24H XOR OFH2BH。NOT是邏輯“非”操作符。 NOT 24H0DBH。匯編語言程序相關(guān)設(shè)計關(guān)系運算符 關(guān)系運算是邏輯判定式的結(jié)果,當為“真”時取0FFFFH,當為“假”時結(jié)果取0。關(guān)系運算是數(shù)值型的。EQ等于。例如,已賦給符號PP為25,則25 EQ PP0FFFFH。NE不等于。例如,25 NE PP0。LT小于。例如,25 LT 260FFFFH。LE小于等于。25 LE PP0FFFFH。GT大于。GE大于等于。匯編語言程序相關(guān)設(shè)計分析運算符(1)SEG 求段基址 格式: SEG (符號名)(2)OFFSET 求偏移地址 格式: OFFSET (符號名)(3)TYPE 求

8、符號名類型值 格式: TYPE (符號名)匯編語言程序相關(guān)設(shè)計分析運算符(4)SIZE 求為符號名分配的字節(jié)數(shù) 格式: SIZE (符號名) 為符號名定義的數(shù)據(jù)項必須是用重復(fù)格式(5)LENGTH 求為符號名分配的項數(shù) 格式: LENGTH (符號名) 為符號名定義的數(shù)據(jù)項必須是用重復(fù)格式DUP( )定義的。 SIZE (符號名) LENGTH (符號名) x TYPE (符號名)匯編語言程序相關(guān)設(shè)計組合運算符組合運算符是用來改變或建立符號名的新類型。(1)定義符號名為新類型 格式: (類型) PTR (符號名) MOV AX,WORD PTR D1(2)指定新類型 與PTR類似,可為某個符號

9、名建立新類型。 格式:THIS (類型)匯編語言程序相關(guān)設(shè)計組合運算符LABC EQU THlS BYTELABD DW 4321H,22, 5HMOV AL,LABC ;AL21HMOV AX,LABD ;AX4321H 符號名LABC與LABD有相同的段地址和偏移地址,但LABC是字節(jié)類型,而LABD是字類型。匯編語言程序相關(guān)設(shè)計分離運算符(1)LOW 取低字節(jié) 格式:LOW (表達式) MOV AL,LOW 2050H(2)HIGH 取高字節(jié) 格式:HIGH (表達式)匯編語言程序相關(guān)設(shè)計匯編運算的優(yōu)先級匯編語言程序相關(guān)設(shè)計2.偽 指 令1). 符號定義偽指令(賦值語句)2). 內(nèi)存數(shù)據(jù)

10、定義偽指令3). 段定義偽指令4)段寄存器說明偽指令5)過程(子程序)定義偽指令6)定位偽指令匯編語言程序相關(guān)設(shè)計1). 符號定義偽指令(賦值語句)等值語句 : (名字) EQU (表達式) 等號語句 : (名字) (表達式)用EQU語句賦值的符號名不能被重新賦值,“ ”可以。匯編語言程序相關(guān)設(shè)計2). 內(nèi)存數(shù)據(jù)定義偽指令2). 內(nèi)存數(shù)據(jù)定義偽指令(1)字節(jié)定義偽指令 名字 DB 表達式值或項表中的每一項是一個字節(jié)數(shù),它們從符號名地址開始按字節(jié)連續(xù)存放,直到表中數(shù)據(jù)項結(jié)束(地址遞增方向)。方括號 表示該項可以默認。匯編語言程序相關(guān)設(shè)計2). 內(nèi)存數(shù)據(jù)定義偽指令(2)字定義偽指令 名字 DW (

11、表達式或數(shù)據(jù)項表)(3)4字節(jié)定義偽指令 名字 DD (表達式或數(shù)據(jù)項表)(4)8字節(jié)定義偽指令 名字 DQ (表達式或數(shù)據(jù)項表)(5)10字節(jié)定義偽指令 名字 DT (表達式或數(shù)據(jù)項表)匯編語言程序相關(guān)設(shè)計3). 段定義偽指令格式: (段名) SEGMENT 定位方式連接方式類別名 (段名) ENDS匯編語言程序相關(guān)設(shè)計4)段寄存器說明偽指令格式:ASSUME 段寄存器:段定義名1,段寄存器:段定義名2,該偽指令告訴匯編程序在匯編時,段寄存器CS:,DS:,SS:和ES:應(yīng)具有的符號段基址,以便匯編指令時確定段和建立錯誤信息。但是段寄存器實際值(CS除外)還要由傳送指令在執(zhí)行程序時賦值。匯編

12、語言程序相關(guān)設(shè)計5)過程(子程序)定義偽指令(過程名) PROC NEAR或FAR (過程名) ENDP過程由RET指令返回調(diào)用格式: CALL (過程名) 匯編語言程序相關(guān)設(shè)計6)定位偽指令 格式:ORG (表達式)該偽指令把以下語句定義的內(nèi)存數(shù)據(jù)或程序,從表達式指定的起點(偏移地址)開始連續(xù)存放,直至遇到新的ORG指令。表達式的值是一個無符號數(shù)。匯編語言程序相關(guān)設(shè)計3.系統(tǒng)功能調(diào)用MSDOS系統(tǒng)中設(shè)置了幾十個內(nèi)部子程序完成IO設(shè)備管理、存儲管理、文件管理和作業(yè)管理等功能。獨立中斷服務(wù)程序,入口已由系統(tǒng)置入中斷入口地址表中,在匯編語言源程序中可用軟中斷指令I(lǐng)NT調(diào)用它們。匯編語言程序相關(guān)設(shè)計

13、常用系統(tǒng)調(diào)用功能與參數(shù) 匯編語言程序相關(guān)設(shè)計0).系統(tǒng)功能調(diào)用格式1)傳送入口參數(shù)到指定寄存器中;2)功能號送入AH寄存器;3) INT 21H 有的子程序無入口參數(shù),則只需安排后兩個語句,調(diào)用結(jié)束后,系統(tǒng)將出口參數(shù)送到指定寄存器中或從屏幕顯示出來。匯編語言程序相關(guān)設(shè)計1)鍵盤輸入單字符1號系統(tǒng)功能調(diào)用格式:MOV AH,1INT 21H系統(tǒng)等待鍵盤輸入,待程序員按下任何一鍵檢查是否ctrlbreak鍵,如果是則退出,否則將鍵入字符的ASCII碼置入AL寄存器中,并在屏幕上顯示該字符。匯編語言程序相關(guān)設(shè)計2). 鍵盤輸入字符串0AH號系統(tǒng)功能調(diào)用功能是將鍵盤輸入的字符串寫入到內(nèi)存緩沖區(qū)中(用D

14、S:DX指向),其第1字節(jié)給定該緩沖區(qū)中能存放的字節(jié)個數(shù),第2字節(jié)留給系統(tǒng)填寫實際鍵入的字符個數(shù),從第3個字節(jié)開始用來存放鍵入的字符串,最后鍵入回車( )鍵表示字符串結(jié)束。如果實際鍵入的字符數(shù)不足填滿緩沖區(qū)時,則其余字節(jié)填“0”;如果實際鍵入的字符數(shù)超過緩沖區(qū)的容量,則超出的字符將被丟失,而且響鈴、表示向程序員發(fā)出警告。匯編語言程序相關(guān)設(shè)計匯編語言程序相關(guān)設(shè)計3)輸出單字符2號系統(tǒng)功能調(diào)用格式舉例: MOV DL,AMOV AH,2INT 21H執(zhí)行2號系統(tǒng)功能調(diào)用時,將置入DL寄存器中的字符從屏幕顯示輸出 (或打印機打?。﹨R編語言程序相關(guān)設(shè)計4)輸出字符串 這是9號系統(tǒng)功能調(diào)用。 功能是將指

15、定的內(nèi)存緩沖區(qū)(用DS:DX指向)中的字符串從屏幕顯示輸出(或從打印機打印輸出)。 緩沖區(qū)中的字符串以“$”字符作為結(jié)束標志。匯編語言程序相關(guān)設(shè)計5). 直接控制臺輸入輸出單字符這是6號系統(tǒng)功能調(diào)用。如果(DL) 0FFH,則表示是從鍵盤輸入單字符送AL寄存器中;如果(DL) 0FFH,則表示是將DL寄存器中內(nèi)容送屏幕顯示輸出。匯編語言程序相關(guān)設(shè)計 6).無回顯直接控制臺輸入單字符7號系統(tǒng)功能調(diào)用。等待從標準輸入設(shè)備輸入單字符置入AL寄存器中,但不送屏幕顯示。格式:MOV AH,7INT 21H匯編語言程序相關(guān)設(shè)計7)無回顯鍵盤輸入單字符8號系統(tǒng)功能調(diào)用,等待從鍵盤輸入單字符,將其ASCII碼

16、置入AL寄存器中但不送屏幕顯示,格式:MOV AH,8INT 21H匯編語言程序相關(guān)設(shè)計8)從串口輸入單字符3號系統(tǒng)功能調(diào)用。將從異步通信口串行輸入的字符置入AL寄存器中。格式:MOV AH,3INT 21H匯編語言程序相關(guān)設(shè)計9)向串口輸出單字符4號系統(tǒng)功能調(diào)用。將DL寄存器中的字符通過異步通信口串行輸出。格式:MOV DL,aMOV AH,4INT 21H匯編語言程序相關(guān)設(shè)計10). 返回操作系統(tǒng)4CH號系統(tǒng)功能調(diào)用。結(jié)束當前正在執(zhí)行的程序,并返回操作系統(tǒng)。格式:MOV AX,4C00HINT 21H匯編語言程序相關(guān)設(shè)計11). 其它常用系統(tǒng)功能調(diào)用設(shè)置日期 2BH取得日期 2AH設(shè)置時間

17、 2DH取得時間 2CH匯編語言程序相關(guān)設(shè)計4.匯編語言程序設(shè)計1).程序結(jié)構(gòu)2).編程舉例-13).編程舉例-2匯編語言程序相關(guān)設(shè)計1).程序結(jié)構(gòu)匯編語言程序相關(guān)設(shè)計特點程序分段語句由指令性和指示性語句組成兩種程序框架匯編語言程序相關(guān)設(shè)計匯編語言程序相關(guān)設(shè)計匯編語言程序相關(guān)設(shè)計關(guān)于返回DOS方式的解釋pushds movax,0 pushax 好象在每一個程序的開始都要有這么一段,據(jù)說是為了讓程序返回DOS用的,我實在不知道是怎么一回事,有誰能幫忙解釋一下? - 它是和程序結(jié)尾處的RETF(如果已經(jīng)定義過程為FAR的話,可以直接用RET)配合使用的,這樣RETF指令就會轉(zhuǎn)移到DS:0000處

18、,那里在程序剛載入內(nèi)存時是psp的開始,有一條指令: CD20int20 通過int20h中斷返回到dos的. 不過,現(xiàn)在一般不建議使用這樣的方法返回到dos,一是容易發(fā)生錯誤;二是無法實現(xiàn)程序結(jié)束碼的傳遞.現(xiàn)在一般用: movAX,4c?h;其中的?就是程序的的結(jié)束返回代碼 int21h 可以通過程序的結(jié)束返回代碼告訴調(diào)用者本程序的運行狀況,這個在批處理和用作overlay程序的時候作用比較突出.一般的程序也就設(shè)?為00了. - 這是保留程序結(jié)束后返回DOS的. 這跟DOS加載可執(zhí)行文件的方法有關(guān)系.你可以找PSP(程序段前綴)的內(nèi)容看看. 匯編語言程序相關(guān)設(shè)計一、匯編語言程序設(shè)計基本步驟

19、分析問題,確定模型 確定算法 繪制流程圖 編寫程序 檢查和調(diào)試 二、匯編語言程序的基本結(jié)構(gòu)匯編語言程序相關(guān)設(shè)計1、順序結(jié)構(gòu)匯編語言程序相關(guān)設(shè)計2、分支結(jié)構(gòu) 匯編語言程序相關(guān)設(shè)計舉例實現(xiàn)100010 xyxx匯編語言程序相關(guān)設(shè)計用查表法確定分支a、對8種產(chǎn)品進行編號0,1,7 b、每一個編號對應(yīng)一個入口地址 proc0,proc1,proc7 步驟: a、把入口地址放在Table開始的內(nèi)存單元; b、根據(jù)key內(nèi)容進行查表實現(xiàn)分支轉(zhuǎn)移匯編語言程序相關(guān)設(shè)計3、循環(huán)結(jié)構(gòu) 匯編語言程序相關(guān)設(shè)計匯編語言程序相關(guān)設(shè)計舉例例1、查找一個數(shù)組中是否有某個關(guān)鍵字:有:變量dd11;dd2關(guān)鍵字偏移量 無:變量d

20、d10方法一、用loop指令方法二、用loopnz(loopne)指令匯編語言程序相關(guān)設(shè)計Call proc1ret過程調(diào)用主程序子程序proc1匯編語言程序相關(guān)設(shè)計實現(xiàn)方法主程序有調(diào)用指令call子程序有返回指令ret特點Call指令與ret缺一不可現(xiàn)場保護入口出口參數(shù)設(shè)置匯編語言程序相關(guān)設(shè)計舉例編寫AX*10AX子程序匯編語言程序相關(guān)設(shè)計子程序編寫1、子程序組成使用說明 a、子程序功能 b、使用寄存器情況 c、入口出口參數(shù)程序體 入口出口參數(shù)傳遞 現(xiàn)場保護 功能程序段匯編語言程序相關(guān)設(shè)計;這是一個乘10子程序;使用寄存器AX;入口:AX,出口:AXmul10proc farpush bx

21、;保護現(xiàn)場pushfadd ax,ax;2axmov bx,ax;2axbxadd ax,ax;4axadd ax,ax;8axadd ax,bx;10axpopf;恢復(fù)現(xiàn)場pop bxretmul10endp功能程序段匯編語言程序相關(guān)設(shè)計2、現(xiàn)場保護和入口出口參數(shù)傳遞(1)、現(xiàn)場保護 方案一:在子程序中保護 靈活,不方便 方案二:在主程序中保護 方便,不靈活(2)、參數(shù)傳遞 寄存器傳遞 變量傳遞 堆棧傳遞匯編語言程序相關(guān)設(shè)計2).編程舉例-1內(nèi)存中自TABLE開始的16個單元連續(xù)存放著自然數(shù)0-15的平方值(構(gòu)成一個平方表),任給一自然數(shù)M(在XX單元中,該數(shù)為0-15),查表求M的平方值,

22、并將結(jié)果存入YY單元中。匯編語言程序相關(guān)設(shè)計 STACK SEGMENT PARA STACK STACK ;堆棧段 DB 50 DUP(?) STACK ENDS ; DATA SEGMENT PARA PUBLIC DATA ;數(shù)據(jù)段 TABLE DB 0,1,4,9,16,25,36,49,64,81 DB 100,121,144,169,196,255 XX DB 6 YY DB ? DATA ENDS匯編語言程序相關(guān)設(shè)計匯編語言程序相關(guān)設(shè)計3).編程舉例-2將內(nèi)存中首地址為STG1,長度為STRSE的數(shù)據(jù)塊傳送到首地址STG2的區(qū)域中去。 STG1 STG1 STG2 STG2地址 小大匯編語言程序相關(guān)設(shè)計匯編語言程序相關(guān)設(shè)計匯編語言程序相關(guān)設(shè)計5.匯編程序的功能及匯編過程匯編程序的功能程序編輯、匯編及連接過程匯編語言程序相關(guān)設(shè)計1).匯編程序的功能匯編語言程序相關(guān)設(shè)計2).程序編輯、匯編及連接過程 匯編語言的程序一般要經(jīng)過編輯、匯編(MASM或ASM)、連接(LINK)和調(diào)試(DEBUG)這些步驟。匯編語言程序相關(guān)設(shè)計匯編語言程序相關(guān)設(shè)計(1)建立源程序文件使用任何一種文本編輯程序編輯并保存源程序文件。Edit/Notepad/Word等。匯編語言程序相關(guān)設(shè)計(2). 匯編(MASM或ASM)源程序一種是全型版本(MASM)另一種是小型版本(ASM)。

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論