匯編語言程序的編寫過程計算機教學課件PPT

上傳人:文*** 文檔編號:56160869 上傳時間:2022-02-20 格式:PPT 頁數(shù):79 大?。?.15MB
收藏 版權申訴 舉報 下載
匯編語言程序的編寫過程計算機教學課件PPT_第1頁
第1頁 / 共79頁
匯編語言程序的編寫過程計算機教學課件PPT_第2頁
第2頁 / 共79頁
匯編語言程序的編寫過程計算機教學課件PPT_第3頁
第3頁 / 共79頁

本資源只提供3頁預覽,全部文檔請下載后查看!喜歡就下載吧,查找使用更方便

30 積分

下載資源

資源描述:

《匯編語言程序的編寫過程計算機教學課件PPT》由會員分享,可在線閱讀,更多相關《匯編語言程序的編寫過程計算機教學課件PPT(79頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、第4章 匯編語言程序設計 匯編語言程序的編寫過程匯編語言程序的編寫過程 1)用文本編輯器建立擴展名為.ASM源文件。 2)用MASM程序把擴展名為.ASM的文件匯編成擴展名為.OBJ的文件。 3)用LINK程序把擴展名為.OBJ的文件連接成擴展名為.EXE的文件。 4)在DOS方式下直接鍵入文件名就可執(zhí)行該程序。第4章 匯編語言程序設計 編編輯輯程程序序DELINKTC編輯器編輯器WINDOWS文本編輯器文本編輯器EDIT 匯編語言源程序的操作流程圖源程序文件源程序文件EXMP.ASMMASM匯匯編編程程序序出錯出錯文件文件EXMP.OBJ(EXMP.LST)(EXMP.CRF)LINK連連接

2、接程程序序出錯出錯文件文件EXMP.EXE(EXMP.MAP)(EXMP.LIB)DEBUG出錯出錯匯編語言程序的編寫過程匯編語言程序的編寫過程連接的是連接的是.OBJ文件文件 執(zhí)行的是執(zhí)行的是.exe文件文件第4章 匯編語言程序設計 YYYNNN有錯有錯 ?有錯有錯 ?有錯有錯 ?結(jié)束結(jié)束匯匯 編編輸入輸入(修改修改)源程序源程序連連 接接運運 行行查查 錯錯開始開始用用EDIT,NOTEPAD等任何文本編輯等任何文本編輯器。源程序存為器。源程序存為.ASM文件文件 用用MASM宏匯編程序進行匯編。宏匯編程序進行匯編。匯編后生成匯編后生成.OBJ目標文件。目標文件。命令格式:命令格式:MAS

3、M ; 用用LINK連接程序進行連接。連接程序進行連接。連接后生成連接后生成.EXE可執(zhí)行文件??蓤?zhí)行文件。命令格式:命令格式:LINK ; 用用TD、DEBUG等調(diào)試程序進行調(diào)試。等調(diào)試程序進行調(diào)試。命令格式:命令格式:TD 第4章 匯編語言程序設計 1 用編輯程序建立匯編語言源程序文件用編輯程序建立匯編語言源程序文件建立一個匯編語言源程序,可以使用建立一個匯編語言源程序,可以使用Windows系統(tǒng)系統(tǒng)下的下的記事本程序記事本程序來編寫,也可以使用來編寫,也可以使用DOS操作系統(tǒng)下的操作系統(tǒng)下的EDIT程序程序來編寫。來編寫。例如從鍵盤輸入二個數(shù)存入內(nèi)存以例如從鍵盤輸入二個數(shù)存入內(nèi)存以DAT

4、A開始的二開始的二個單元中,然后選出其中的大數(shù)輸出。個單元中,然后選出其中的大數(shù)輸出。設編輯后的匯編語言源程序名為:設編輯后的匯編語言源程序名為:exp1.asm第4章 匯編語言程序設計 2 用匯編程序?qū)⒂脜R編程序?qū)?ASM文件匯編成目標程序文件文件匯編成目標程序文件.OBJ在對匯編語言源程序文件(簡稱在對匯編語言源程序文件(簡稱ASM文件)文件)匯編時,匯編程序?qū)R編時,匯編程序?qū)SM文件進行二遍掃描。文件進行二遍掃描。若程序文件中有語法錯誤,則在結(jié)束匯編后將若程序文件中有語法錯誤,則在結(jié)束匯編后將指出源程序中的錯誤語句及錯誤類型。否則將指出源程序中的錯誤語句及錯誤類型。否則將在匯編后

5、生成目標程序文件(即在匯編后生成目標程序文件(即OBJ文件)文件)完成匯編功能的是宏匯編程序完成匯編功能的是宏匯編程序MASM。匯編過程如下表所示:匯編過程如下表所示:第4章 匯編語言程序設計 MASM宏匯編的提示信息及回答宏匯編的提示信息及回答交叉參考文件用的文件名(缺省:無交叉參考文件)Cross referenceNUL.CRF:(交叉參考文件名)列表文件名(缺?。簾o列表文件)Source listingNUL.LST:(源列表文件名)可重新定位目標文件名(缺省:源文件名.OBJ)Object filenameSource.OBJ:(目標文件名)欲匯編的.ASM源文件名(缺?。好钪械奈?/p>

6、件名)Source filename.ASM:(源文件名)回 答提 示 信 息第4章 匯編語言程序設計 3 用連接程序生成可執(zhí)行程序文件用連接程序生成可執(zhí)行程序文件(EXE 文件)文件)經(jīng)匯編后產(chǎn)生的目標程序文件(經(jīng)匯編后產(chǎn)生的目標程序文件(OBJ文件)并不文件)并不是可執(zhí)行程序文件,必須經(jīng)連接后才能成為可執(zhí)行文件是可執(zhí)行程序文件,必須經(jīng)連接后才能成為可執(zhí)行文件(EXE文件)。連接程序并不是專門為匯編語言程序設文件)。連接程序并不是專門為匯編語言程序設計的,如果一個程序是由若干個模塊組成的,也可以通計的,如果一個程序是由若干個模塊組成的,也可以通過連接程序把它們連接在一起。這些模塊可以是匯編程

7、過連接程序把它們連接在一起。這些模塊可以是匯編程序產(chǎn)生的目標程序文件,也可以是高級語言編譯程序產(chǎn)序產(chǎn)生的目標程序文件,也可以是高級語言編譯程序產(chǎn)生的目標程序文件。生的目標程序文件。完成連接功能的程序是完成連接功能的程序是LINK程序。連接過程如下程序。連接過程如下表所示:表所示:第4章 匯編語言程序設計 LINK程序的提示信息及回答程序的提示信息及回答庫文件名表(各文件之間用號隔開)Libraries .LIB(庫文件)列表文件名(缺?。簾o文件名)List File NUL.MAP(列表文件)連接后生成的執(zhí)行文件名(缺?。耗繕宋募㏑un File object.EXE(運行文件)目標代碼模

8、塊表(各模塊之間用號隔開)Oject Modules.OBJ(目標模塊)回 答提 示 信 息第4章 匯編語言程序設計 5 匯編語言和操作系統(tǒng)匯編語言和操作系統(tǒng)PCDOS的接口的接口當我們編寫的匯編語言源程序是在當我們編寫的匯編語言源程序是在PCDOS環(huán)境環(huán)境下運行時,必須了解匯編語言是如何同操作系統(tǒng)接口的。下運行時,必須了解匯編語言是如何同操作系統(tǒng)接口的。當通過鍵盤鍵入的源程序經(jīng)匯編和連接生成可執(zhí)當通過鍵盤鍵入的源程序經(jīng)匯編和連接生成可執(zhí)行的程序文件并欲執(zhí)行該程序時,行的程序文件并欲執(zhí)行該程序時,PCDOS將按如下將按如下步驟操作:步驟操作: 為該程序建立一個長度為為該程序建立一個長度為256

9、字節(jié)的程序前綴區(qū)字節(jié)的程序前綴區(qū)PSP,以便存放所要執(zhí)行程序的有關信息,并為程序和,以便存放所要執(zhí)行程序的有關信息,并為程序和PCDOS間提供一個接口。間提供一個接口。第4章 匯編語言程序設計 程序和程序和PCDOS之間的接口是通過之間的接口是通過INT 20H軟中軟中斷指令來實現(xiàn)的。該指令的兩字節(jié)操作碼存放在斷指令來實現(xiàn)的。該指令的兩字節(jié)操作碼存放在PSP的的第第0號及第號及第1號單元內(nèi),其中斷服務程序由號單元內(nèi),其中斷服務程序由PCDOS提提供。因此,用戶在組織程序時必須是程序執(zhí)行完后能供。因此,用戶在組織程序時必須是程序執(zhí)行完后能去執(zhí)行存放于去執(zhí)行存放于PSP開始的開始的INT 20H指

10、令,這樣便返回指令,這樣便返回DOS管理的狀態(tài)下,否則就無法繼續(xù)鍵入、調(diào)試和執(zhí)管理的狀態(tài)下,否則就無法繼續(xù)鍵入、調(diào)試和執(zhí)行其它程序。行其它程序。 把要執(zhí)行的程序從磁盤上裝入到內(nèi)存中并為其把要執(zhí)行的程序從磁盤上裝入到內(nèi)存中并為其定位。在微程序定位時,內(nèi)存分配見下圖。定位。在微程序定位時,內(nèi)存分配見下圖。第4章 匯編語言程序設計 緊接在緊接在PSP之后的內(nèi)存區(qū)域中依次存放代碼段、數(shù)據(jù)段之后的內(nèi)存區(qū)域中依次存放代碼段、數(shù)據(jù)段和堆棧段。和堆棧段。中斷向量表IBM BIOSIBM DOSDOS 常駐部分DOS 暫駐部分ROM BASICROM BIOS中斷向量表IBM BIOSIBM DOSDOS 常駐

11、部分ROM BASICROM BIOSPSP代碼段數(shù)據(jù)段堆棧段DOS 暫駐部分系統(tǒng)RAMSSSPCS IPDS ESDS用戶可用空間1M地址空間FFFF0H第4章 匯編語言程序設計 設置段寄存器的值,使設置段寄存器的值,使DS和和ES指向指向PSP的段基的段基址,即址,即INT 20H的存放地址,同時將的存放地址,同時將CS設置為設置為PSP后面后面代碼段的段基址,代碼段的段基址,IP設置為指向代碼段中第一條要執(zhí)行設置為指向代碼段中第一條要執(zhí)行的指令位置,把的指令位置,把SS設置為指向堆棧段的段基址,讓設置為指向堆棧段的段基址,讓SP指指向堆棧段的段底。向堆棧段的段底。 開始執(zhí)行程序。開始執(zhí)行

12、程序。為了保證用戶程序執(zhí)行完后能回到為了保證用戶程序執(zhí)行完后能回到DOS,可使用,可使用如下兩種方法:如下兩種方法: 標準方法標準方法第4章 匯編語言程序設計 首先將用戶程序的主程序定義成一個首先將用戶程序的主程序定義成一個FAR過程,過程,其最后一條指令為其最后一條指令為RET。然后在代碼段的主程序的開。然后在代碼段的主程序的開始部分用如下三條指令將始部分用如下三條指令將PSP中中INT 20H指令的段基址指令的段基址及偏移地址壓入堆棧:及偏移地址壓入堆棧:PUSH DSMOV AX, 0PUSH AX這樣,當程序執(zhí)行到主程序的最后一條指令這樣,當程序執(zhí)行到主程序的最后一條指令RET是,由于

13、該過程具有是,由于該過程具有FAR屬性,故存在對戰(zhàn)內(nèi)的兩個屬性,故存在對戰(zhàn)內(nèi)的兩個字就分別談出到字就分別談出到CS和和IP中,中,INT 20H指令得以執(zhí)行,指令得以執(zhí)行,保證了控制返回保證了控制返回DOS狀態(tài)。狀態(tài)。第4章 匯編語言程序設計 非標準方法非標準方法 也可在用戶的程序中不定義過程段,只在代碼段也可在用戶的程序中不定義過程段,只在代碼段結(jié)束之前,增加兩條指令:結(jié)束之前,增加兩條指令:MOV AH, 4CHINT 21H則程序執(zhí)行完后也會自動返回則程序執(zhí)行完后也會自動返回DOS狀態(tài)。狀態(tài)。此外,由于開始執(zhí)行用戶程序時,此外,由于開始執(zhí)行用戶程序時,DS和和ES并未并未指向用戶的數(shù)據(jù)段

14、基址和附加段基址,故在程序的開指向用戶的數(shù)據(jù)段基址和附加段基址,故在程序的開始處應重新裝填始處應重新裝填DS和和ES的值。的值。第4章 匯編語言程序設計 DATA SEGMENT DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, ES:DATASTART: MOV AX, DATAMOV DS, AXMOV ES, AXMOV AH, 4CHINT 21HCODE ENDS END START第4章 匯編語言程序設計 DATA SEGMENT DATA ENDSCODE SEGMENTMAIN FROC FAR ASSUME CS:CODE, DS:

15、DATA, ES:DATASTART:PUSH DSXOR AX, AXPUSH AXMOV AX, DATAMOV DS, AXMOV ES, AXRETMAIN ENDPCODE ENDS END START第4章 匯編語言程序設計 5.3 DOS和BIOS功能調(diào)用這些完成不同功能的子程序是以中斷服務這些完成不同功能的子程序是以中斷服務程序的方式提供的。程序的方式提供的。每執(zhí)行一條軟中斷,就相當于調(diào)用一個相每執(zhí)行一條軟中斷,就相當于調(diào)用一個相應的中斷服務子程序應的中斷服務子程序這些功能按不同的類別分成許多組,分別這些功能按不同的類別分成許多組,分別有不同的中斷入口有不同的中斷入口第4章 匯

16、編語言程序設計 1、DOS中斷及功能調(diào)用DOS常用的常用的9類中斷(類中斷(20H27H和和2FH)可分為兩)可分為兩種:種: DOS專用中斷。專用中斷。DOS專用中斷是指專用中斷是指INT 22H、 INT 23H、 INT 24H 3個中斷,屬個中斷,屬DOS操作時專用,用操作時專用,用戶不要直接使用。戶不要直接使用。 DOS可調(diào)用中斷??烧{(diào)用中斷。DOS可調(diào)用中斷是指可調(diào)用中斷是指INT 20H、 INT 21H、 INT 25H、 INT 26H、 INT 27H和和INT 2FH 6個中斷。這個中斷。這6個中斷都供用戶直接調(diào)用,但個中斷都供用戶直接調(diào)用,但都必須要滿足一定的入口條件。

17、其中:都必須要滿足一定的入口條件。其中:第4章 匯編語言程序設計 磁盤讀寫中斷。磁盤讀寫中斷。INT 25H、INT 26H分別用來讀分別用來讀和寫磁盤上的若干扇區(qū),這實際上是兩條和寫磁盤上的若干扇區(qū),這實際上是兩條BIOS調(diào)用。調(diào)用。 程序退出中斷。程序退出中斷。INT 20H、INT 27H都為程序的都為程序的退出命令。退出命令。 假脫機打印文件中斷。假脫機打印文件中斷。INT 2FH用來實現(xiàn)假脫機用來實現(xiàn)假脫機打印文件命令打印文件命令PRINT。 系統(tǒng)功能調(diào)用。又稱為系統(tǒng)功能調(diào)用。又稱為DOS功能調(diào)用,是指功能調(diào)用,是指 INT 21H 中斷。它是可供系統(tǒng)程序和應用程序調(diào)用的一個極中斷。

18、它是可供系統(tǒng)程序和應用程序調(diào)用的一個極其重要的中斷,內(nèi)含近百個子功能。其重要的中斷,內(nèi)含近百個子功能。第4章 匯編語言程序設計 2、系統(tǒng)功能調(diào)用1.系統(tǒng)功能調(diào)用方法系統(tǒng)功能調(diào)用方法調(diào)用調(diào)用 INT 21H的方法如下:的方法如下: 入口參數(shù)送相應的寄存器;入口參數(shù)送相應的寄存器; 子功能編號送子功能編號送AH; 發(fā)出中斷請求:發(fā)出中斷請求:INT 21H(4)根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況2.常用系統(tǒng)調(diào)用子功能常用系統(tǒng)調(diào)用子功能第4章 匯編語言程序設計 01H號調(diào)用(帶回顯的鍵符輸入)號調(diào)用(帶回顯的鍵符輸入)1 號子功能是從標準輸入設備輸入一個字符,并送號子功

19、能是從標準輸入設備輸入一個字符,并送入寄存器入寄存器AL,不許入口參數(shù)。例如:,不許入口參數(shù)。例如:MOV AH, 01HINT 21H 執(zhí)行上述指令,系統(tǒng)將掃描鍵盤,等待有鍵按下,執(zhí)行上述指令,系統(tǒng)將掃描鍵盤,等待有鍵按下,一旦有鍵按下,就將鍵值(相應字符的一旦有鍵按下,就將鍵值(相應字符的ASCII碼值)讀碼值)讀入,并送入入,并送入AL寄存器,同時將這個字符顯示在屏幕上。寄存器,同時將這個字符顯示在屏幕上。第4章 匯編語言程序設計 0AH號調(diào)用(字符串輸入)號調(diào)用(字符串輸入)從鍵盤接收字符串到內(nèi)存輸入緩沖區(qū),要求事從鍵盤接收字符串到內(nèi)存輸入緩沖區(qū),要求事先定義一個輸入緩沖區(qū),緩沖區(qū)中第

20、一個字節(jié)指出能先定義一個輸入緩沖區(qū),緩沖區(qū)中第一個字節(jié)指出能容納的最大字符個數(shù),由用戶給出;第二個字節(jié)保留容納的最大字符個數(shù),由用戶給出;第二個字節(jié)保留已用作填寫輸入的字符實際個數(shù)。從第三個字節(jié)開始已用作填寫輸入的字符實際個數(shù)。從第三個字節(jié)開始存放從鍵盤上接收的字符,知道存放從鍵盤上接收的字符,知道ENTER鍵結(jié)束。鍵結(jié)束。調(diào)用時,要求調(diào)用時,要求DS:DX指向輸入緩沖區(qū)的首地址。指向輸入緩沖區(qū)的首地址。 例如,從鍵盤輸入一個小于例如,從鍵盤輸入一個小于50個字符的字符串數(shù)據(jù)。個字符的字符串數(shù)據(jù)。其程序設計方法是:其程序設計方法是:第4章 匯編語言程序設計 DATA SEGMENT BUFDB

21、 50DB ?DB 50 DUP(?)DATAENDSCODESEGMENTMOV DX, OFFSET BUFMOV AH, 10INT 21HCODEENDS第4章 匯編語言程序設計 02H號調(diào)用(字符輸出顯示)號調(diào)用(字符輸出顯示)2號功能是將一個字符(一個號功能是將一個字符(一個ASCII碼值)輸出到標碼值)輸出到標準輸出設備(即顯示器或打印機)。入口參數(shù)為準輸出設備(即顯示器或打印機)。入口參數(shù)為DL寄存寄存器,寄存器器,寄存器DL中存放待輸出的字符。例如:中存放待輸出的字符。例如:MOV DL, AMOV AH, 2INT 21H即將字符即將字符“A”顯示在屏幕上或輸出到打印機。顯

22、示在屏幕上或輸出到打印機。第4章 匯編語言程序設計 09H號調(diào)用(字符串輸出)號調(diào)用(字符串輸出)9號功能調(diào)用是將緩沖區(qū)中的一組以號功能調(diào)用是將緩沖區(qū)中的一組以“”結(jié)束的結(jié)束的字符串送標準輸出設備輸出(顯示器或打印機)。調(diào)用字符串送標準輸出設備輸出(顯示器或打印機)。調(diào)用前必須將輸出緩沖區(qū)的首地址送前必須將輸出緩沖區(qū)的首地址送DS:DX。例如:。例如:DATA SEGMENT BUFDB HOW DO YOU DO ? $DATAENDSCODESEGMENTMOV DX, OFFSET BUFMOV AH, 9INT 21HCODEENDS第4章 匯編語言程序設計 (5)返回操作系統(tǒng) 4CH

23、功能調(diào)用能夠結(jié)束當前正在執(zhí)行的程序,返回操作系統(tǒng),屏幕顯示操作提示符 MOV AH, 4CH INT 21H 此功能無入口參數(shù)第4章 匯編語言程序設計 在屏幕上顯示在屏幕上顯示W(wǎng)hats your name?,用戶輸入自己的名字,用戶輸入自己的名字#后顯示:后顯示:Welcome #。 DATA SEGMENT MEG DB Whats your name ?, 10,13,$ MEG1 DB Welcome $ BUF DB 30, ? ,30 DUP(0)DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS:DATAMAIN PROC FARSTART: MO

24、V AX, DATA MOV DS, AX LEA DX, MEG MOV AH, 9 INT 21H LEA DX, BUF MOV AH, 10 INT 21H LEA DX, MEG1 MOV AH, 9 INT 21H XOR BH, BH MOV BL, BUF+1 MOV BX+BUF+2, $ LEA DX, BUF+2 MOV AH, 9 INT 21H MOV AH, 4CH INT 21HMAIN ENDPCODE ENDS END START;輸出字符串輸出字符串;接受姓名接受姓名;輸出輸出Welcome;輸出姓名輸出姓名;返回返回DOS輸入緩沖區(qū)以輸入緩沖區(qū)以$結(jié)尾結(jié)尾

25、顯示字符串后回車換行顯示字符串后回車換行第4章 匯編語言程序設計 下面程序從鍵盤重復接收一字符送下面程序從鍵盤重復接收一字符送BUFF開始的單元,直開始的單元,直到接收到回車符到接收到回車符0DH為止。為止。DATA SEGMENT BUFF DB 128 DUP(0)DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS:DATASTART: MOV AX, DATA MOV DS, AX _LOP: _ INT 21H MOV SI, AL _ _ JNE LOP MOV AH, 4CH INT 21HCODE ENDS END STARTLEA SI, BUF

26、FMOV AH, 1INC SICMP AL, 0DH第4章 匯編語言程序設計 3、BIOS中斷調(diào)用在在IBMIBMPCPC機的機的ROMROM存儲器中包含一些基本輸入輸存儲器中包含一些基本輸入輸出子程序。這些基本輸入輸出子程序簡稱為出子程序。這些基本輸入輸出子程序簡稱為BIOSBIOS。它們。它們的功能與的功能與DOSDOS中字符中字符I IO O功能相似,用戶也可通過軟件功能相似,用戶也可通過軟件中斷方式直接調(diào)用。由于中斷方式直接調(diào)用。由于BIOSBIOS提供的字符提供的字符I IO O功能直接功能直接依賴于硬件,因而調(diào)用它們比調(diào)用依賴于硬件,因而調(diào)用它們比調(diào)用DOSDOS字符字符I IO

27、 O功能速功能速度更快。例如:度更快。例如: 鍵盤輸入子程序。調(diào)用指令為鍵盤輸入子程序。調(diào)用指令為 INT 16HINT 16H 屏幕顯示子程序。調(diào)用指令為屏幕顯示子程序。調(diào)用指令為 INT 10HINT 10H 打印輸出子程序。調(diào)用指令為打印輸出子程序。調(diào)用指令為 INT 17HINT 17H第4章 匯編語言程序設計 例例 從鍵盤輸入字符串并回顯從鍵盤輸入字符串并回顯 a. 顯示顯示Do you want input a string? (YN),回車,換行,回車,換行,$; (09H功能)功能) b. 從鍵盤輸入一個字符(從鍵盤輸入一個字符( YN),), 若是若是y或或Y則執(zhí)行則執(zhí)行c

28、,否則到否則到g 結(jié)束結(jié)束;(01H功能)功能) c. 顯示顯示Please input string., 回車回車,換行,換行,$;(;(09H功能)功能)第4章 匯編語言程序設計 d. 輸入字符串到緩沖區(qū);輸入字符串到緩沖區(qū);e. 在緩沖區(qū)輸入的字符串后在緩沖區(qū)輸入的字符串后 加結(jié)束符加結(jié)束符$;f. 回顯輸入的字符串回顯輸入的字符串g. 結(jié)束。結(jié)束。第4章 匯編語言程序設計 5.3 DOS功能調(diào)用功能調(diào)用第4章 匯編語言程序設計 第4章 匯編語言程序設計 主程序BL03HSIBUFF1偏輸入密碼(SUB1)比較密碼(SUB2)密碼對?BL-10?顯示“NO!”顯示“OK!”顯示“Wron

29、g,Again!”ENDLOPYYNNDONEAGAIN第4章 匯編語言程序設計 SUB1DIBUFF2偏偏CX08H輸入字符輸入字符存字符存字符是否回車?是否回車?DIDI+1顯示顯示*號號CX-10?RET子程序子程序1LOP1YNYDONE1N第4章 匯編語言程序設計 SUB2DIBUFF2偏偏CX取密位取密位比較比較1個字符個字符DIDI+1是否不相同?是否不相同?SISI+1AL00HCX-10?RET子程序子程序2LOP2YNYDONE2NAL0FFH第4章 匯編語言程序設計 4.4.0 匯編語言設計基礎知識4.4.1 順序結(jié)構(gòu)程序設計4.4.2 分支結(jié)構(gòu)程序設計4.4.3 循環(huán)結(jié)

30、構(gòu)程序設計4.4.4 子程序結(jié)構(gòu)形式與操作第4章 匯編語言程序設計 一、匯編語言程序設計的一般步驟一、匯編語言程序設計的一般步驟 分析課題分析課題 確定算法確定算法 畫流程圖畫流程圖 編寫程序編寫程序 上機調(diào)試上機調(diào)試 當接到程序設計的任務后,首先對任務進行詳盡的分析,搞清楚已知的數(shù)據(jù)和想要得到的結(jié)果,程序應該完成何種的功能。匯編語言設計的一般步驟第4章 匯編語言程序設計 一、匯編語言程序設計的一般步驟一、匯編語言程序設計的一般步驟 分析課題分析課題 確定算法確定算法 畫流程圖畫流程圖 編寫程序編寫程序 上機調(diào)試上機調(diào)試 根據(jù)實際問題的要求和指令系統(tǒng)的特點,確定解決問題的具體步驟。根據(jù)任務要求

31、,對不同的計算方法進行比較,選擇最適宜的算法。 匯編語言設計的一般步驟第4章 匯編語言程序設計 一、匯編語言程序設計的一般步驟一、匯編語言程序設計的一般步驟 分析課題分析課題 確定算法確定算法 畫流程圖畫流程圖 編寫程序編寫程序 上機調(diào)試上機調(diào)試將解決問題的具體步驟用一種約定的幾何圖形、指向線和必要的文字說明描述出來的圖形。匯編語言設計的一般步驟第4章 匯編語言程序設計 一、匯編語言程序設計的一般步驟一、匯編語言程序設計的一般步驟 分析課題分析課題 確定算法確定算法 畫流程圖畫流程圖 編寫程序編寫程序 上機調(diào)試上機調(diào)試 經(jīng)過上述各步驟后,解決問題的思路已經(jīng)非常清楚,所以接下來就可以按流程圖的順

32、序?qū)γ恳粋€功能框選用合適的指令編寫出匯編語言程序。 匯編語言設計的一般步驟第4章 匯編語言程序設計 一、匯編語言程序設計的一般步驟一、匯編語言程序設計的一般步驟 分析課題分析課題 確定算法確定算法 畫流程圖畫流程圖 編寫程序編寫程序 上機調(diào)試上機調(diào)試在應用程序的設計中,幾乎沒有一個程序只經(jīng)過一次編寫就完全成功的,所以必須經(jīng)過上機調(diào)試。 匯編語言設計的一般步驟第4章 匯編語言程序設計 1 1流程圖的概念流程圖的概念v流程圖是由特定的幾何圖形、指向線、文字說明來表示數(shù)據(jù)處理的步驟,形象描述邏輯控制結(jié)構(gòu)以及數(shù)據(jù)流程的示意圖。流程圖具有簡潔、明了、直觀的特點。2 2流程圖符號表示流程圖符號表示(1 1

33、)開始框:表示程序的開始。)開始框:表示程序的開始。開始流程圖的畫法規(guī)定流程圖的畫法規(guī)定條件NY結(jié)束(3 3)判斷框)判斷框 (2 2)處理框(執(zhí)行框)處理框(執(zhí)行框) (4 4)結(jié)束框)結(jié)束框第4章 匯編語言程序設計 v結(jié)構(gòu)程序設計程序的每個部分都由有限結(jié)構(gòu)結(jié)合中的單元組成,并且只有單一的入口和單一的出口。基本結(jié)構(gòu)有:順序結(jié)構(gòu)(線性結(jié)構(gòu)) 選擇結(jié)構(gòu)(分支結(jié)構(gòu)) 循環(huán)結(jié)構(gòu) 三種結(jié)構(gòu)可以任意組合和嵌套構(gòu)成復雜的程序。程序的基本結(jié)構(gòu)程序的基本結(jié)構(gòu)第4章 匯編語言程序設計 這三種結(jié)構(gòu)可歸納為五種邏輯結(jié)構(gòu):(1)順序結(jié)構(gòu)(2)雙分支結(jié)構(gòu)(3)多分支結(jié)構(gòu)YN條件條件程序的基本結(jié)構(gòu)程序的基本結(jié)構(gòu)第4章 匯

34、編語言程序設計 YN(4)WHILE循環(huán)結(jié)構(gòu)NY(5)DO_WHILE循環(huán)結(jié)構(gòu)程序的邏輯結(jié)構(gòu)格式程序的基本結(jié)構(gòu)程序的基本結(jié)構(gòu)第4章 匯編語言程序設計 順序程序:一種無分支的程序順序程序:一種無分支的程序, CPU從第一條指令開始從第一條指令開始依次依次執(zhí)行每一條指令執(zhí)行每一條指令,直到最后一條指令。直到最后一條指令。特點特點:指令順序執(zhí)行,無分支、無循環(huán)、無轉(zhuǎn)移。:指令順序執(zhí)行,無分支、無循環(huán)、無轉(zhuǎn)移。程序的順序結(jié)構(gòu)程序的順序結(jié)構(gòu)第4章 匯編語言程序設計 例 內(nèi)存中TABLE開始存放09的平方值,通過人機對話,當任給定一個數(shù)X(09),查表得X的平方值,放在AL中。 解:DATASEGMENT

35、 TABLE DB 0,1,4,9,16,25,36,49,64,81 BUFDB Please input one number (09),0DH,0AH,$DATAENDSSTACK SEGMENT PARA STACK STACK DB 50 DUP(?) TOPLABEL WORDSTACK ENDSCODE SEGMENTMAIN PROC FAR ASSUME CS:DATA, DS:DATA, SS:STACKSTART:MOVAX, DATA ;段初始化 MOV DS, AX第4章 匯編語言程序設計 MOV AX, STACK MOV SS, AX MOV BX, OFFSET

36、 TABLENEXT:MOV DX, OFFSET BUF ;9號功能調(diào)用,提示輸入一個數(shù) MOV AH, 9 INT 21H MOV AH, 1 ;1號功能調(diào)用,鍵入數(shù)送AL (P159) INT 21H MOV AH, 0 ;查表得輸入數(shù)的平方值 AND AL, 0FH ADD BX, AX MOV AL, BX MOV AH, 4CH INT 21H RETMAIN ENDPCODE ENDS END START第4章 匯編語言程序設計 匯編語言程序的基本結(jié)構(gòu)匯編語言程序的基本結(jié)構(gòu) DATA SEGMENT DATA ENDSSTACK SEGMENT PARA STACK DW 100

37、 DUP(0);STACK ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX, DATA MOV DS, AX MOV AH, 4CH INT 21HCODE ENDS END START 數(shù)據(jù)段數(shù)據(jù)段代碼段代碼段第4章 匯編語言程序設計 設內(nèi)存DATA單元存放一個無符號字節(jié)數(shù)據(jù),編制程序?qū)⑵洳鸪蓛晌皇M制數(shù), 并存入HEX和HEX+1單元的低4位,HEX存放高位十六進制數(shù), HEX+1單元存放低位十六進制數(shù) 解解 : 分析命題分析命題確定算法確定算法畫流程圖畫流程圖設置數(shù)據(jù)段和堆棧段地址開始取數(shù)據(jù)截取高四位右移四位取原數(shù)據(jù)結(jié)束保留高

38、位十六進制數(shù)截取低四位保存低位十六進制數(shù)保存結(jié)果拆字程序 例題例題第4章 匯編語言程序設計 MOV SS,AX MOV SP,LENGTH STK MOV AL,DATA MOV AH,AL AND AL,0F0H MOV CL,04 SHR AL,CL MOV HEX,AL AND AH,0FH MOV HEX+1,AH MOV AX,4C00H INT 21H CSEG ENDS END DISC 例:例:設內(nèi)存DATA單元存放一個無符號字節(jié)數(shù)據(jù),編制程序?qū)⑵洳鸪蓛晌皇M制數(shù), 并存入HEX和HEX+1單元的低4位,HEX存放高位十六進制數(shù), HEX+1單元存放低位十六進制數(shù) 解解 :

39、分析命題分析命題確定算法確定算法畫流程圖畫流程圖編寫程序編寫程序上機調(diào)試上機調(diào)試DSEGSEGMENTDATADB0B5HHEX DB0,0DSEGENDSCSEGSEGMENTASSUME CS:CSEG,DS:DSEGDISC: MOV AX,DSEGMOV DS,AX MOV AX,SSEG第4章 匯編語言程序設計 作業(yè):1.已知X和Y是數(shù)據(jù)段中的兩個無符號字節(jié)單元,用程序完成表達式Z=(X2Y2)/2的計算。2、從鍵盤讀入兩個一位數(shù)(按鍵時保證按下的是數(shù)字鍵),顯示它們的積。第4章 匯編語言程序設計 程序的分支結(jié)構(gòu)程序的分支結(jié)構(gòu) 1 1分支結(jié)構(gòu):分支結(jié)構(gòu): 根據(jù)不同條件程序選擇不同的處

40、理方法時,運用分支結(jié)構(gòu)。如圖52所示。圖圖5 52 2 分支結(jié)構(gòu)框圖形式分支結(jié)構(gòu)框圖形式判定條件Y YN N判定條件第4章 匯編語言程序設計 例:例:寫一個實現(xiàn)把一位十六進制數(shù)轉(zhuǎn)化為對應ASCII碼的程序。 分析命題分析命題確定算法確定算法十六進制數(shù)碼與對應的關系:十六進制數(shù)碼與對應的關系:0123 BCDEF30H 31H 32H 33H42H 43H 44H 45H 46H這種對應關系可表示為一個分段函數(shù):這種對應關系可表示為一個分段函數(shù):YX+30H(0=X=9)X+37H(0A=X=0FH)第4章 匯編語言程序設計 分析命題分析命題確定算法確定算法畫流程圖畫流程圖開始取十六進制數(shù)X+3

41、0H0=X=9YN0A=X39H(AL) 41H(AL)5AHDH+1DL+1(CX)=0修改BX及(CX)-1NNNNNYYYYYADH送內(nèi)存ADL送內(nèi)存AL=N-DH-DLAL送內(nèi)存RET初始化:N送CX; 0送DX; 0送BX;BX為串偏移量,MOV AL,BUFBX第4章 匯編語言程序設計 DATA SEGMENT BUF DB N DB 01H,38H,47H,60H, 76H NUM DB 3 DUP (?)DATA ENDSCODE SEGMENT ASSUME CS:CODE ,DS:DATASTART: MOV AX, DATA MOV DS, AX第4章 匯編語言程序設計

42、MOV CH, N ;數(shù)組個數(shù)NCH MOV BX, 1 MOV DX, 0 ;DH計數(shù)字的個數(shù),DL計字母的個數(shù)LP: MOV AL, BUF BX CMP AL, 30H JL NEXT ;小于0轉(zhuǎn) CMP AL, 39H JG ABC ;大于9轉(zhuǎn) INC DH ;數(shù)字個數(shù)加1 JMP NEXTABC: CMP AL, 41H JL NEXT ;小于A轉(zhuǎn) CMP AL, 5AH JG NEXT ;大于Z轉(zhuǎn) INC DL ;字母的個數(shù)加1NEXT:INC BX ;數(shù)組地址加1 DEC CH ;計數(shù)器減1 JNZ LP第4章 匯編語言程序設計 MOV BUFBX, DH ;數(shù)字的個數(shù)送入內(nèi)存單

43、元 MOV BUFBX+1, DL ;字母的個數(shù)送入內(nèi)存單元 MOV AL, N SUB AL, DH ;NDHDL=其它字符的個數(shù) SUB AL, DL MOV BUFBX+2, AL ;其它字符的個數(shù)送入內(nèi)存單元 MOV AH,4CH INT 21HCODE ENDS END START第4章 匯編語言程序設計 2.多分支 : 串聯(lián)測試法 ,N次判斷形成N+1路分支。 有的分支結(jié)構(gòu)為多分支,可依次測試條件是否滿足,若滿足條件則轉(zhuǎn)入相應分支入口,若不滿足繼續(xù)向下測試,直到全部測試完。簡單,直觀,速度慢。第4章 匯編語言程序設計 例4-66:有8個加工子程序,入口地址分別為P1,P2, P8。

44、編程實現(xiàn)檢測鍵盤輸入命令,使系統(tǒng)分別轉(zhuǎn)向8個加工子程序。 MOV AH,1 INT 21H ;1號功能調(diào)用,鍵盤輸入 CMP AL,1 JE P1 ;鍵值為1,轉(zhuǎn)P1 CMP AL,2 JE P2 ;鍵值為2,轉(zhuǎn)P2 CMP AL,8 JE P8 ;鍵值為8,轉(zhuǎn)P8 JMP ST ;非法鍵,轉(zhuǎn)停機P1: ; 1號鍵加工子程序 P2: ; 2號鍵加工子程序 P8: ;8號鍵加工子程序 ST: HLT優(yōu)點:編程簡單缺點:速度慢第4章 匯編語言程序設計 3、跳轉(zhuǎn)表實現(xiàn)多分支利用跳轉(zhuǎn)表實現(xiàn)多分支,可以直接找到相應入口,利用該法需建立一個跳轉(zhuǎn)表,表中含每個分支的入口地址。(1)根據(jù)表內(nèi)地址分支 跳轉(zhuǎn)表中

45、存放了每個分支程序的入口地址,只要找到表地址,再將其內(nèi)容取出,即可得到每個分支程序的入口地址。表地址=跳轉(zhuǎn)表首址+偏移地址輸入鍵值開始表首地址BX求偏移量計算地址散轉(zhuǎn) AND AL,0FH ADD AL,ALADD BX,AXJMP WORD PTR BX跳轉(zhuǎn)表在內(nèi)存中的存放方法P0LP0HP1LP1H.BASE+0BASE+2P0P1MOV BX,OFFSET BASE第4章 匯編語言程序設計 跳轉(zhuǎn)表中存放著轉(zhuǎn)移指令,查表后程序執(zhí)行轉(zhuǎn)移指令將轉(zhuǎn)到相應的子程序去。P1LP1HP2LP2HBASE.P1P2JMPJMPMOV AH,1 ;鍵入到ALINT 21HAND AL,0FHMOV AH,

46、0MOV BL,ALADD AL,ALADD AL,BL ;偏移量=鍵值*3MOV BX,OFFSET BASEADD BX,AX ;得轉(zhuǎn)移地址JMP BX ;轉(zhuǎn)入轉(zhuǎn)移指令(2)根據(jù)表內(nèi)指令分支轉(zhuǎn)移指令跳轉(zhuǎn)表第4章 匯編語言程序設計 (3)根據(jù)關鍵字分支P1LP1HP2LP2HBASE.P1P23132輸入關鍵字開始首地址送BX與關鍵字比較指針加3轉(zhuǎn)移關鍵字=0相等YYNN關鍵字跳轉(zhuǎn)表分支流程圖跳轉(zhuǎn)表中存放關鍵字及相應分支地址。第4章 匯編語言程序設計 例4-68:首地址為BUFFER的數(shù)組已按升序排好,長度為N(=10),在數(shù)組中查找數(shù)M(=80),若找到則從數(shù)組中刪掉,否則將它插入正確的位

47、置,DX中記錄數(shù)組最后的長度。9810253698908270585348AX CX=9AX CX=8AX CX=7AX CX=6AX CX=5AX CX=4AX CX=3AX CX=2AX CX=1AX CX=0AX=80 CX=10 DX=10AX BUFFERSI 9082AX BUFFERSI-2 AX BUFFERSI-2 80DX=11AX BUFFERSI-2 數(shù)組中無M尋找插入位置SI=2*(DX1)CMP AX,BUFFERSI 搜索有無關鍵字MOV DI,OFFSET BUFFERCLDREPNE SCASW元素下移MOV BX,BUFFERSIMOV BUFFERSI+2

48、,BX插入MOV BUFFERSI+2,AX第4章 匯編語言程序設計 10253698908070585348AX CX=9 DI=BUFFER+2AX CX=8 DI=BUFFER+4AX CX=7 DI=BUFFER+6AX CX=6 DI=BUFFER+8AX CX=5 DI=BUFFER+AAX CX=4 DI=BUFFER+CAX CX=3 DI=BUFFER+EAX = CX=2 DI=BUFFER+10HAX=80 CX=10 DI=BUFFER9098BX=DI=(BUFFER+10H) DI-2 CX-1=1BX=DI+2=(BUFFER+12H) DI-2 CX-1=0DX

49、=9數(shù)組中有數(shù)M 搜索有無關鍵字MOV DI,OFFSET BUFFERCLDREPNE SCASW 搜索到,后續(xù)元素前移MOV BX,DIMOV DI-2,BXADD DI,2第4章 匯編語言程序設計 初始化串掃描查找找到插在SI所指單元后關鍵字SI(CX)=0數(shù)組元素下移修改比較指針SI數(shù)組長度+1設置串尾比較指針SIDI 所指元素上移修改比較指針DINYYNY數(shù)組長度-1(CX)-1=0YNN結(jié)束初始化:M送AX;N送CX,DX;地址偏移量送DI;增量修改指針 CLD第4章 匯編語言程序設計 DATA SEGMENT BUFFER DW 5,10,32,47,53,77,89,106,1

50、15,124 N DB 10 M EQU 80DATA ENDSCODE SEGEMENT ASSUME CS:CODE,DS:DATA,ES:DATAMAIN PROC FARSTART: PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX ; MOV AX,M ;待查數(shù) 送AX MOV CX,N ;數(shù)組長度送 CX MOV DX,N MOV DI,OFFSET BUFFER CLD REPNE SCASW ;串掃描查找第4章 匯編語言程序設計 JE DEL ;查到,ZF=1 DEC DX ;未查到,插入 MOV SI,DX ;

51、關鍵字與最后數(shù)比較 ADD SI,DXL1: CMP AX,BUFFERSI JL L2 ;關鍵字比數(shù)組中某個字小,轉(zhuǎn)L2 MOV BUFFERSI+2, AX ;大,則插在后面 JMP L3L2: MOV BX,BUFFERSI ;數(shù)組下移一位 MOV BUFFERSI+2, BX SUB SI,2 JMP L1L3: ADD DX,1 ;修改長度 JMP NEXT1DEL: JCXZ NEXT ;找到,刪此元素DEL1: MOV BX,DI ;其后元素依次前移 MOV DI-2,BX ADD DI,2 LOOP DEL1NEXT: DEC DX ;改變數(shù)組長度NEXT1: RETMAIN

52、ENDPCODE ENDS END START第4章 匯編語言程序設計 循環(huán)程序設計循環(huán)程序設計 循環(huán)結(jié)束判斷:每一次循環(huán)要有二個出口。根據(jù)循環(huán)工作調(diào)整的情況,判斷是否滿足結(jié)束條件。若滿足結(jié)束條件,退出循環(huán);若不滿足結(jié)束條件,繼續(xù)循環(huán)。 循環(huán)體:重復執(zhí)行的一段程序。 循環(huán)工作部分: 循環(huán)程序的核心。 循環(huán)工作調(diào)整:重復執(zhí)行的環(huán)境調(diào)整。 循環(huán)初始化: 循環(huán)程序工作單元的初始化賦值。N循環(huán)結(jié)束判斷結(jié) 束循環(huán)體循環(huán)工作部分循環(huán)工作調(diào)整循環(huán)初始化第4章 匯編語言程序設計 第4章 匯編語言程序設計 例例 計算計算Y= aiDATA SEGMENTTABLE DW a1, a2, a3, a4, a5,

53、a6,a7, a8, a9, a10 DW a11, a21,.a20 . DW a91,a92, a100 YY DW ?DATA ENDS第4章 匯編語言程序設計 程序一MOV AX,DATA 1MOV DS,AX 2MOV AX,0 3ADD AX,TABL 4ADD AX,TABL+2 5 ADD AX,TABL+198 103MOV YY,AX 104其中ADD指令有l(wèi)00條第4章 匯編語言程序設計 程序二:程序一中4103條指令可用如下2 8條指令替代 MOV AX,0 1MOV BX ,OFFSET TABLE 2MOV CX,100 3 LOP : ADD AX,BX 4INC BX 5INC BX 6DEC CX 7JNZ LOP 8MOV YY,AX 9MOV AH,4CH 10INT 21H 11 第4章 匯編語言程序設計 程序二為一循環(huán)結(jié)構(gòu)程序,其中: 指令1 3為初始化部分: 指令4為循環(huán)工作部分: 指令5,6為循環(huán)修改部分: 指令7,8為循環(huán)控制部分: 指令9為結(jié)束處理部分: 指令10,11為程序結(jié)束部分。 指令48三部分稱為循環(huán)體,標號LOP處稱為循環(huán)頭部。第4章 匯編語言程序設計

展開閱讀全文
溫馨提示:
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!