




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、微機原理及應用微機原理及應用主講教師主講教師2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計2第四章第四章 匯編語言及匯編程序設計匯編語言及匯編程序設計一、一、概述概述二、二、偽指令偽指令三、三、表達式及運算符表達式及運算符四、宏指令四、宏指令五、五、匯編語言程序的上機過程匯編語言程序的上機過程六、六、匯編程序的設計過程匯編程序的設計過程七、七、匯編程序基本設計方法匯編程序基本設計方法八、八、系統功能調用系統功能調用 例題例題作業作業2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計3一、概述一、概述 匯編語言是一種面向匯編語言是一種面向CPU
2、指令系統的程序設計指令系統的程序設計語言。指令格式語言。指令格式:標號標號:指令助記符指令助記符操作數操作數;注釋;注釋,1 1、標號標號是指該指令的符號地址,以冒號結束;是指該指令的符號地址,以冒號結束;2 2、用助記符表示操作碼,是指令名稱的代表符號,、用助記符表示操作碼,是指令名稱的代表符號,是語句中的關鍵字,不可缺省;是語句中的關鍵字,不可缺??;2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計4一、概述一、概述(續上頁續上頁)3、用符號代表操作數或操作數地址。、用符號代表操作數或操作數地址。 操作數是本指操作數是本指令執行需要的數據。令執行需要的數據。 有些指
3、令不需要指明操作數,可以默認;有些指令不需要指明操作數,可以默認; 有些指令需要兩個操作數;有些指令需要兩個操作數; 還有些操作數可以用表達式。還有些操作數可以用表達式。4 、注釋項是可選項,用分號開始。、注釋項是可選項,用分號開始。標號標號:指令助記符指令助記符操作數操作數;注釋;注釋,2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計5一、概述一、概述(續上頁續上頁) 用匯編語言編寫的程序稱為源程序,常用的匯編用匯編語言編寫的程序稱為源程序,常用的匯編程序有程序有ASM-86和宏匯編和宏匯編MASM-86。 匯編語言源程序的組成部分匯編語言源程序的組成部分: 可以使
4、用可以使用CPU指令系統指令系統所提供的指令所提供的指令(硬指硬指令令); 可以使用各種可以使用各種符合匯編語法符合匯編語法的表達式,的表達式, 運算運算符以及自行定義生成滿足需要的目標代碼的指令。符以及自行定義生成滿足需要的目標代碼的指令。2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計61、標號、標號 8086/8088匯編語言中使用的標號必須遵循下列匯編語言中使用的標號必須遵循下列規則:規則: (1)大小寫字母;大小寫字母; (2)數字數字09; (3)某些特殊字符(某些特殊字符(, _,?) (4)第一個字符不能是數字,第一個字符不能是數字, “?”不能單獨作
5、為標不能單獨作為標號。號。 (5)標號的有效長度是標號的有效長度是31; 有效標號有效標號:START MY_PROGRAM 無效標號無效標號:MAIN% 1BETA2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計7二、偽指令二、偽指令 偽指令是告訴匯編程序生成目標代碼的指令語偽指令是告訴匯編程序生成目標代碼的指令語句。句。 1、 符號定義偽指令符號定義偽指令 2、內存數據定義偽指令內存數據定義偽指令 3、段定義偽指令段定義偽指令 4、段寄存器說明偽指令段寄存器說明偽指令 5、 定位偽指令定位偽指令2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序
6、設計81、符號定義偽指令、符號定義偽指令 (1)EQU偽指令偽指令 (2)等號等號(賦值賦值)偽指令偽指令 (3)解除符號定義偽指令解除符號定義偽指令2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計9(1)EQU偽指令偽指令偽指令格式偽指令格式: EQU 指令功能指令功能: 給符號名賦值。符號名可以由程序員取給符號名賦值。符號名可以由程序員取定,定, 表達式應該是可以計算得出一個具體值。例表達式應該是可以計算得出一個具體值。例: PORT EQU 88H;定義符號定義符號PORT代表代表88H DATA EQU PORT+2;定義符號定義符號DATA代表代表;PORT
7、+2注意注意: 用用EQU定義的符號,不能重新再定義,除非用定義的符號,不能重新再定義,除非用PURGE偽指令解除;偽指令解除; 如果在表達式中用了其他符號,必須事先定義。如果在表達式中用了其他符號,必須事先定義。2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計10(2)等號等號(賦值賦值)偽指令偽指令偽指令格式偽指令格式: = 指令功能指令功能: 與與EQU類似,唯一的區別是類似,唯一的區別是“=”可以可以隨時對符號名賦新值,隨時對符號名賦新值, 而不必使用而不必使用PURGE偽指令。偽指令。例例:PORT=88H;定義符號定義符號PORT代表代表88HDATA=P
8、ORT+2 ;定義符號定義符號DATA代表代表PORT+22021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計11(3)解除符號定義偽指令解除符號定義偽指令偽指令格式偽指令格式: PURGE 符號符號1, 符號符號2, 指令功能指令功能: 撤消用撤消用EQU賦值的符號名,賦值的符號名, 以便于賦予以便于賦予新值。新值。例例:PURGE PORT, DATA ;撤消用撤消用EQU對對PORT、 ;DATA的賦值的賦值2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計122、內存數據定義偽指令、內存數據定義偽指令格式格式: 變量變量 命令命令 參數參數
9、1, 參數參數2, 功能功能: 數據定義語句用來分配存儲單元。數據定義數據定義語句用來分配存儲單元。數據定義語句的語句的命令命令有有: DB 定義字節數據定義字節數據 DW定義字數據定義字數據 DD定義雙字數據定義雙字數據 DQ定義定義8字節數據字節數據 DT定義定義10字節數據字節數據2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計132、內存數據定義偽指令、內存數據定義偽指令復制操作符復制操作符 格式格式: DUP 數據數據1,數據,數據2, 功能功能:匯編程序把所定義的數據按先后次序連:匯編程序把所定義的數據按先后次序連續分配存儲空間,所起的名稱只代表第一個單元
10、的續分配存儲空間,所起的名稱只代表第一個單元的字符。字符。 例題例題2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計142、內存數據定義偽指令、內存數據定義偽指令例例:VAR1 DB 32H,ABCVAR2 DW 1234H,40H,AB DD 12345678H DB ?, 11000011BARRY1 DB 2 DUP(0,1)ARRY2 DW 2 DUP(?,(?,1) -C3H00H01H00H- -01H00H- - -01H00H第一組字方式的第一組字方式的?, 111000011BARRY1ARRY201H- -預留的存儲單元預留的存儲單元第一組字節方式
11、的第一組字節方式的0,1第二組字節方式的第二組字節方式的0,1第二組字方式的第二組字方式的?,1.(上接左下上接左下)32H41H42H43H34H40H42H41H78H56H34H12H1234H0040HA12345678HABCVAR1VAR212H00HB.(下接右上下接右上)2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計15 3、段定義偽指令、段定義偽指令格式格式: SEGMENT ENDS2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計164、段寄存器說明偽指令、段寄存器說明偽指令格式格式: ASSUME 段寄存器:段名段寄存
12、器:段名1,段寄存器:段名段寄存器:段名2, 功能功能:該偽指令告訴匯編程序在匯編時,各個段寄存該偽指令告訴匯編程序在匯編時,各個段寄存器所對應的邏輯段基址。器所對應的邏輯段基址。 注意:注意:除了除了CS,所有段寄存器的實際值還必須用傳所有段寄存器的實際值還必須用傳送指令在執行時賦值送指令在執行時賦值2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計175、 定位偽指令定位偽指令格式格式: ORG 功能:起址定位偽指令功能:起址定位偽指令告訴匯編程序,以下的程告訴匯編程序,以下的程序或數據從表達式指定的偏移地址開始存放;序或數據從表達式指定的偏移地址開始存放;格式格式
13、: EVEN 功能:偶地址定位偽指令功能:偶地址定位偽指令告訴匯編程序,以下的告訴匯編程序,以下的程序或數據從偶地址開始存放。程序或數據從偶地址開始存放。2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計18三、表達式及運算符三、表達式及運算符 在匯編語言中,指令的操作數除了可以是常數、在匯編語言中,指令的操作數除了可以是常數、寄存器、變量和標號外,還可以是表達式。寄存器、變量和標號外,還可以是表達式。 表達式表達式是由常數、寄存器、變量、標號和專用是由常數、寄存器、變量、標號和專用運算符組合而成。運算符組合而成。 在程序匯編時,匯編程序自動把這些表達式計在程序匯編時,
14、匯編程序自動把這些表達式計算出來,形成具體的指令操作數。算出來,形成具體的指令操作數。 1、常數、變量和標號常數、變量和標號 2、表達式及運算符表達式及運算符2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計191、常數、變量和標號、常數、變量和標號常數常數 包括數值型常數和字符型常數。包括數值型常數和字符型常數。 如:如:12H,1234H,AB變量變量 變量代表存放在存儲單元中的數據。變量代表存放在存儲單元中的數據。 定義后的變量有三個屬性:定義后的變量有三個屬性: (1)段屬性表示變量所在的邏輯段;段屬性表示變量所在的邏輯段; (2)偏移量屬性表示變量所在邏輯段中
15、的偏移地址;偏移量屬性表示變量所在邏輯段中的偏移地址; (3)類型屬性表示變量占用的存儲單元數,類型屬性表示變量占用的存儲單元數,DB、DW、DD、DQ、DT。2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計201、常數、變量和標號、常數、變量和標號標號標號 是指令目標代碼的符號地址。是指令目標代碼的符號地址。 在轉移指令中常用標號代替具體轉移地址,標在轉移指令中常用標號代替具體轉移地址,標號的使用使編寫匯編語言程序時,不必考慮程序匯號的使用使編寫匯編語言程序時,不必考慮程序匯編、連接后系統分配給指令代碼的實際地址。編、連接后系統分配給指令代碼的實際地址。 標號同樣有
16、三個屬性:標號同樣有三個屬性: (1)段屬性表示指令代碼所在的邏輯段;段屬性表示指令代碼所在的邏輯段; (2)偏移量屬性表示指令代碼所在的邏輯段中的偏移量屬性表示指令代碼所在的邏輯段中的偏移地址;偏移地址; (3)距離屬性表示標號可作段內轉移或段間轉移距離屬性表示標號可作段內轉移或段間轉移(NEAR、FAR)。)。2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計21 2、表達式及運算符、表達式及運算符表達式表達式由操作數和運算符組成。由操作數和運算符組成。 其中,操作數可以是常數、變量、寄存器和標其中,操作數可以是常數、變量、寄存器和標號。號。 運算符包括算術運算符、
17、邏輯運算符、關系運運算符包括算術運算符、邏輯運算符、關系運算符、分析運算符和屬性運算符五類運算。算符、分析運算符和屬性運算符五類運算。 注意:運算符的先后次序注意:運算符的先后次序 。2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計22五、匯編語言程序的上機過程五、匯編語言程序的上機過程 建立匯編語言的環境,典型的匯編語言開發環建立匯編語言的環境,典型的匯編語言開發環境都包含境都包含4種工具:種工具: 1、編輯程序編輯程序 2、匯編程序匯編程序 3、連接程序連接程序 4、匯編程序的上機過程匯編程序的上機過程2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及
18、匯編程序設計231、編輯程序、編輯程序 (1) 編輯程序是用來輸入匯編語言源程序的工具,編輯程序是用來輸入匯編語言源程序的工具,包括包括EDIT.EXE, EDLIN.EXE等;等; (2) 匯編語言是以文本格式保存的;匯編語言是以文本格式保存的; (3) 匯編程序的源程序必須以匯編程序的源程序必須以ASM作為作為擴展名擴展名; (4) 輸入和編輯源程序時必須遵循匯編語言的語輸入和編輯源程序時必須遵循匯編語言的語法規定。法規定。 匯編程序的基本結構匯編程序的基本結構 例題例題 實際操作實際操作: 編輯源程序編輯源程序 TEST11.ASM2021-7-10第第4章章 匯編語言及匯編程序設計匯編
19、語言及匯編程序設計24匯編程序的基本結構匯編程序的基本結構DATAA SEGMENT ;數據段內定義各類程序執行需要的相關的數據數據段內定義各類程序執行需要的相關的數據DATAA ENDSSTACKA SEGMENT STACK ;根據具體程序的需要,定義堆棧段供程序執行過程根據具體程序的需要,定義堆棧段供程序執行過程 ;中保存臨時數據;中保存臨時數據STACKA ENDSCODEA SEGMENT ASSUME CS:CODEA,DS:DATAA,SS:STACKA START: MOV AX,DATAA MOV DS,AX;送數據段基址送數據段基址 ;完成具體操作的指令序列完成具體操作的指
20、令序列CODEA ENDS END START2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計25實際操作實際操作(實現實現X+YZ, 源程序文件名源程序文件名: TEST11.ASM) DATA1 SEGMENT; 數據段數據段 X DB 05H Y DB 04H Z DB ?DATA1 ENDSCODE1 SEGMENT;代碼段代碼段 ASSUME CS:CODE1,DS:DATA1START: MOV AX,DATA; 數據段基址數據段基址AX MOV DS,AX; AX DS MOV AL,X; 內存單元內存單元X的數據的數據AL ADD AL,Y; 內存單元
21、內存單元Y的數據的數據+ALAL, 即即X+Y AL MOV Z, AL; AL內存單元內存單元Z, 即求和結果送回即求和結果送回Z MOV AH,4CH;送功能號送功能號 INT 21H;系統功能調用,返回操作系統系統功能調用,返回操作系統 CODE1 ENDS END START2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計262、匯編程序、匯編程序 (1) 匯編程序匯編程序用來把源程序翻譯成機器碼,用來把源程序翻譯成機器碼, 包括包括ASM.EXE, MASM.EXE; (2) 匯編程序翻譯源程序,匯編程序翻譯源程序, 產生一個目標代碼文產生一個目標代碼文件,
22、與源程序文件名相同,擴展名為件,與源程序文件名相同,擴展名為OBJ。 實際操作實際操作: 產生目標文件產生目標文件TEST11.OBJ2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計273、連接程序、連接程序 通過匯編產生的是通過匯編產生的是OBJ文件是二進制目標文件,文件是二進制目標文件, 但用的是浮動地址,但用的是浮動地址, 不能直接運行,不能直接運行, 必須用連接程必須用連接程序序LINK.EXE連接和定位。連接和定位。 實際操作實際操作: 產生可執行文件產生可執行文件TEST11.EXE2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計
23、284、匯編程序的上機過程、匯編程序的上機過程開始開始編寫匯編源程序并用編寫匯編源程序并用文本編輯程序輸入文本編輯程序輸入用用MASMMASM匯編源程序匯編源程序用用LINKLINK連接目標代碼文件連接目標代碼文件在在DOSDOS操作系統下操作系統下執行執行EXEEXE文件文件需要修改源程序嗎需要修改源程序嗎? ?結束結束N NY YY YN NN NN NY Y有語法錯誤嗎有語法錯誤嗎? ?有語法錯誤嗎有語法錯誤嗎? ?運行結果有錯誤運行結果有錯誤? ?實際操作演示實際操作演示2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計29data1 segment ; 數據段
24、開始數據段開始 test1.asmx db 05hy db 04hz db ?buff db 5+4= $ ; 定義一個數據串,數據串規定以定義一個數據串,數據串規定以$結尾,結尾, 為了為了;顯示;顯示5+4=data1 endscode1 segment; 代碼段開始代碼段開始 assume cs:code1,ds:data1; start: mov ax,data1; 將數據段基址將數據段基址ax mov ds, ax; axds mov al, x; 內存數據內存數據xal add al, y; 內存數據內存數據Y+alal, 即即X+Y al mov z, al; alZ, 即即X+
25、Y Z lea dx, buff; 裝載裝載 buff的有效地址的有效地址 mov ah, 09h; 送功能號送功能號 int 21h;系統功能調用,顯示屏顯示字符串系統功能調用,顯示屏顯示字符串5+4= mov dl,z; 將將z送送dl add dl,30h; 將將z的值轉換成對應的的值轉換成對應的ASCII碼值碼值 mov ah, 02h;送功能號送功能號 int 21H;系統功能調用,系統功能調用, 將將x+y的和的和z以單字符形式在顯以單字符形式在顯;示屏上顯示出來;示屏上顯示出來 mov ah,4ch; 送功能號送功能號 int 21h; 系統功能調用,返回系統功能調用,返回DOS
26、狀態狀態code1 ends end start 2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計30六、匯編程序的設計過程六、匯編程序的設計過程 1、分析問題確定算法、分析問題確定算法 2、繪制程序流程圖、繪制程序流程圖(要求同學們從現在開始編寫要求同學們從現在開始編寫程序前養成先繪制流程圖的習慣程序前養成先繪制流程圖的習慣) 3、編寫代碼、編寫代碼2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計31七、匯編程序基本設計方法七、匯編程序基本設計方法 1、 簡單程序簡單程序 作業作業 2、 分支程序分支程序 3、 循環程序循環程序 4、 子程
27、序子程序2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計321、簡單程序、簡單程序 簡單程序簡單程序是指順序結構程序,是指順序結構程序, 在程序中不包含在程序中不包含任何轉移類指令。任何轉移類指令。 執行時按指令的先后次序從第一執行時按指令的先后次序從第一條開始逐條執行,直至程序結束。條開始逐條執行,直至程序結束。 例題例題2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計33例題例題 1、有、有X,Y兩個兩個16位數位數3456H和和0ABCDH,求兩求兩數之和,并將結果送到數之和,并將結果送到Z單元。單元。解解: 編寫流程圖編寫流程圖開始開
28、始結果送結果送Z結束結束 初始化初始化取段基址取段基址被加數指針被加數指針加數指針加數指針DSSIDI被加數被加數AX被加數+加數被加數+加數AX2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計34例題例題 程序清單程序清單 DATA SEGMENT XDW3456H YDW0ABCDH ZDW0 DATA ENDS;設置數據段,取名設置數據段,取名DATA CODE SEGMENT ASSUME DS :DATA,CS:CODESTART :MOV AX,DATA;取數碼段取數碼段DATA段址至段址至AX MOV DS,AX;段地址送段地址送DS LEA SI,X;
29、將將X的有效地址送的有效地址送S1 LEA DI, Y;將將Y的有效地址送的有效地址送D1 MOV AX,SI;將將X的值送的值送AX ADD AX,DI;AX+Y的值送回的值送回AX MOV Z, AX;將將AX的值送到存儲單元的值送到存儲單元Z MOV AH, 4CH ;設置功能號設置功能號 INT21H;系統功能調用,返回系統功能調用,返回DOSCODE ENDS END START 2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計35作業作業P.1262、4、 5、7、122021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計362、分支程
30、序、分支程序 分支程序分支程序就是利用轉就是利用轉移指令,控制計算機執行移指令,控制計算機執行某段程序或不執行某段程某段程序或不執行某段程序。序。滿足判滿足判斷條件?斷條件?是是程序段程序段1程序段程序段2否否滿足判斷條件滿足判斷條件1?程序段程序段1滿足判斷條件n?滿足判斷條件n?程序段程序段n程序段n+1程序段n+1.程序段2程序段2.是是否否否否否否否否是是是是滿足判斷條件2?滿足判斷條件2?兩路分支兩路分支多路分支多路分支例題例題2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計37例題例題 1、內存中有一個、內存中有一個8位帶符號數,求其絕對位帶符號數,求其絕
31、對值,并將結果放回原處。值,并將結果放回原處。答:編寫流程圖答:編寫流程圖取段基址送取段基址送 DS取操作數指針送取操作數指針送 SI將帶符號數送 將帶符號數送 AL求補求補將求絕對值的將求絕對值的數送回原內存數送回原內存YN開始開始小于零嗎 小于零嗎 ?結束結束系統功能調用,系統功能調用,在屏幕上在屏幕上顯示該內存單元的數值顯示該內存單元的數值程序清單程序清單2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計38例題例題 程序清單程序清單DATA2 SEGMENTM DB 05H ; 第二個程序換成第二個程序換成5,即,即0fbhDATA2 ENDSCODE2 SEG
32、MENTASSUME CS:CODE2,DS:DATA2START: MOV AX,DATA2 MOV DS,AX ;送段地址至送段地址至DS LEA SI,M ;取取M的地址指針的地址指針 MOV AL,SI;取帶符號數取帶符號數 AND AL,AL;判斷符號位判斷符號位JNS DONE;SF=0,轉移到轉移到DONENEG AL;SF=1,AL0)Y= 0 (當當X=0) 9 (當當X=0?AX0?結束結束系統功能調用,系統功能調用,在屏幕在屏幕上顯示Y的數值上顯示Y的數值程序清單程序清單2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計40例題例題 程序清單程序清
33、單_數據段數據段DATAXY SEGMENT X DB 8FH; 另外兩組分別是另外兩組分別是7FH,00H Y DB ?DATAXY ENDS2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計41例題例題 程序清單程序清單_代碼段代碼段CODE SEGMENT ASSUME CS:CODE,DS:DATAXYSTART: MOV AX,DATAXY MOV DS,AX;送段地址送段地址 LEA SI, X;取取X的指針的指針MOV AL,SI;將將X的值送的值送AL AND AL, AL;自身與,取符號標志位自身與,取符號標志位JNS OTHER;SF=0,轉移到轉移
34、到OTHER MOV Y, 09H;SF=1,則則X0DONE: MOV DL, YADD DL, 30HMOV AH, 02HINT 21H; 系統功能調用,顯示系統功能調用,顯示Y的的 值值 MOV AH,4CH INT 21HCODE2 ENDS END START2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計423、循環程序、循環程序 循環程序循環程序就是控制計算機反就是控制計算機反復執行一段指令序列的程序結構。復執行一段指令序列的程序結構。循環控制循環控制循環體循環體循環參數修改循環參數修改繼續循環繼續循環結束循環結束循環初始化初始化結束處理結束處理繼續循
35、環繼續循環結束循環結束循環初始化初始化循環控制循環控制循環體循環體結束處理結束處理循環參數修改循環參數修改非零次循環結構非零次循環結構零次循環結構零次循環結構例題2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計43 1、統計字節數據、統計字節數據Z的的1的個的個數,將結果放在數,將結果放在RESULT內。內。解:編寫流程圖解:編寫流程圖例題例題循環初始化循環初始化取字節數據送取字節數據送AL設置循環次數設置循環次數 CX=08HAL 右移右移 1位位CF=1?YBL+1BLNNCX=0?將統計結果將統計結果BL送送RESULT結束結束CXY開始開始計數器BX清零計數器
36、BX清零CX-1程序清單程序清單2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計44例題例題 程序清單程序清單 數據段數據段DATAXY SEGMENT X DB 0FFH ; 第二個程序換成第二個程序換成5,即,即0fbh RESULT DB ?DATAXY ENDS2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計45例題例題 程序清單程序清單 代碼段代碼段CODE SEGMENT ASSUME CS:CODE,DS:DATAXYSTART: MOV AX,DATAXY MOV DS,AX ;送段地址至送段地址至DSXOR BL,BL;累加
37、器累加器BL清清0MOV CX,08H;循環次數送循環次數送CXLEA SI,X ;取取X的指針的指針MOV AL,SI;取取X送送ALSUM: SHR AL,1;邏輯右移邏輯右移1位位JNC NONE;CF=0,轉移到轉移到NONEINC BL;CF=1,BL+1BLNONE: LOOP SUM MOV RESULT,BL;統計值送統計值送RESULT內存單元內存單元 MOV DL, RESULT ADD DL, 30HMOV AH, 02HINT 21H; 系統功能調用,顯示該統計數值系統功能調用,顯示該統計數值 MOV AH,4CH INT 21HCODE ENDS END START2
38、021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計464、子程序、子程序 一個程序中,當在不同的地方需要多次使用某一個程序中,當在不同的地方需要多次使用某段程序時,我們常將這段程序單獨編寫成一個程序段程序時,我們常將這段程序單獨編寫成一個程序段,稱為子程序段,稱為子程序/過程。過程。(1)子程序的定義格式子程序的定義格式(2)子程序的調用子程序的調用(3)編寫子程序的注意事項編寫子程序的注意事項2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計47(1)子程序的定義格式)子程序的定義格式格式格式1: 子程序名子程序名 PROC RET 子程序名子程
39、序名 ENDP格式格式2: 子程序名:子程序名: RET2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計48(2)子程序的調用)子程序的調用 格式格式: CALL 子程序名子程序名2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計49(3)編寫子程序的注意事項)編寫子程序的注意事項 1、現場保護、現場保護: 保護調用子程序的現場,保護調用子程序的現場, 即保即保護子程序中會用到的寄存器,護子程序中會用到的寄存器, 將這些寄存器入棧;將這些寄存器入棧; 2、功能子程序、功能子程序: 子程序要完成的功能;子程序要完成的功能; 3、恢復現場、恢復現場
40、: 為了使計算機返回到主程序調用為了使計算機返回到主程序調用時的狀態,時的狀態, 將入棧的數據出棧。將入棧的數據出棧。注意順序注意順序! 例題:例題:子程序的基本框架子程序的基本框架2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計50子程序的基本框架子程序的基本框架 設某一子程序中要用到寄存器設某一子程序中要用到寄存器BX,CX,SI,DI則:則: ABC: PUSH BXPRSH CXPUSH SIPUSH DI ;子程序的功能程序子程序的功能程序POP DIPOP SIPOP CXPOP BX RET2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯
41、編程序設計51例題例題1 編寫統計編寫統計X數據中的數據中的“1”的個數子程序,并編寫主程序的個數子程序,并編寫主程序調用。調用。 子程序如下子程序如下:ABC: PUSH BX PUSH CX XOR BL,BL;累加器累加器BL清清0 MOV CX,08H;循環次數送循環次數送CXSUM:SHR AL,1;邏輯右移邏輯右移1位位 JNC NONE;CF=0,轉移到轉移到NONE INC BL;CF=1,BL+1BLNONE: LOOP SUM MOV AL, BL ;AL里保存的是里保存的是“1”的統計個的統計個數數 POP CX POP BX RET2021-7-10第第4章章 匯編語言
42、及匯編程序設計匯編語言及匯編程序設計52例題例題1 主程序主程序_數據段數據段_堆棧段堆棧段DATAXY SEGMENT X DB 0FFH SX DB ?DATAXY ENDS;-STACK SEGMENT DW 100 DUP(?)STACK ENDS2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計53例題例題1 主程序主程序_代碼段代碼段CODE1 SEGMENT ASSUME CS:CODE1, DS:DATAXY,SS:STACKSTART: MOV AX, DATA MOV DS, AX LEA BX, X MOV AL,BX CALL ABC MOV B
43、X+1, AL MOV DL, SX ADD DL, 30H MOV AH, 02H INT 21H; 系統功能調用,顯示該統計數值系統功能調用,顯示該統計數值 MOV AH,4CH INT 21H ; 子程序插入此處子程序插入此處CODE1 ENDS END START 2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計54例題例題2、 將一字節無符號二進將一字節無符號二進制數轉換為兩位十進制數制數轉換為兩位十進制數的的ASCII碼值,并存放在碼值,并存放在其后的兩個字節。其后的兩個字節。(顯示顯示程序用子程序編寫程序用子程序編寫)。解:編寫流程圖:解:編寫流程圖:取
44、段基址送取段基址送 DS取操作數指針送取操作數指針送 SI將無符號數送 將無符號數送 AL子程序調用,子程序調用,在屏幕上顯示該數在屏幕上顯示該數開始開始結束結束AL擴展成AXAL擴展成AXAX/10,商為十位數AX/10,商為十位數 余數為個位數 余數為個位數分別送回指定內存單元分別送回指定內存單元2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計55程序程序數據段數據段data1 segment x db 2ah;可任取可任取100的無符號字節數據的無符號字節數據 y db ? z db ? buff db 2ah=$data1 ends2021-7-10第第4章章
45、 匯編語言及匯編程序設計匯編語言及匯編程序設計56代碼段:代碼段:code1 segment assume cs:code1,ds:data1 start: mov ax,data1 mov ds,ax mov al,x cbw mov bl,0ah div bl mov y,al mov z,ah lea dx,buff mov ah,09h int 21h mov al,y ;下接右上下接右上;上接左下上接左下 call disp mov al,z call disp jmp eend disp: mov dl,al add dl,30h mov ah,02h int 21h ret ee
46、nd: mov ah,4ch int 21hcode1 ends end start2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計57思考題思考題 試編制程序將一個字數據用十六進制數的形式試編制程序將一個字數據用十六進制數的形式顯示在屏幕上。顯示在屏幕上。2021-7-10第第4章章 匯編語言及匯編程序設計匯編語言及匯編程序設計58八、系統功能調用八、系統功能調用 MS-DOS是是8086/8088微機系統廣泛使用的一種微機系統廣泛使用的一種操作系統。操作系統。MS-DOS中包含有許多通用的內部子程中包含有許多通用的內部子程序,分別用于完成序,分別用于完成I/O管理、內存管理、文件管理以管理、內存管理、文件管理以及作業管理等。及作業管理等。 MS-DOS以中斷服務程序形式提供這些以中斷服務程序形式提供這些功能程功能程序序,在匯編語言源程序中可以用軟中斷調用它們。,在匯編語言源程序中
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高中生心理健康教育心得體會
- 心理健康教育課的評價
- 高一第七課講課件
- 留守兒童的心理健康輔導記錄
- 胸腔閉式引流病人護理講課件
- 2025-2030年國內管樂器行業市場發展分析及發展前景與投資機會研究報告
- 2025-2030年全球與中國數據質量管理軟件行業市場發展分析及市場規模與廠商競爭格局研究報告
- 2025-2030年中國面部清潔儀器行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030年中國零售展示行業市場現狀供需分析及投資評估規劃分析研究報告
- 數學特殊含義題目及答案
- 2025至2030軍工裝備行業市場發展現狀及競爭形勢及有效策略與實施路徑評估報告
- 兵團精神試題及答案
- 村寨垃圾收費管理制度
- 江蘇保安證考試題及答案
- 建設工程總包合同EPC課件
- 智聯銀行筆試題庫及答案
- 高校學生資助誠信教育主題班會
- 2025年入團考試評委提問的常見問題及答案
- 貿易咨詢服務合同協議
- 監控系統培訓資料
- 給排水系統設施維護與保養標準流程
評論
0/150
提交評論