




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第四章第四章 匯編語言程序設計匯編語言程序設計概述概述l匯編語言匯編語言l用指令助記符、符號地址、用指令助記符、符號地址、標號等編寫的程序。標號等編寫的程序。l為機器語言的符號表示為機器語言的符號表示 l匯編語言的特點匯編語言的特點l高級語言高級語言可移植性好可移植性好程序易編程序易編/ /易讀易讀/ /易學易學應用:科學計算、信息應用:科學計算、信息管理等管理等l匯編語言匯編語言面向機器面向機器/ /硬件硬件程序代碼效率高程序代碼效率高執(zhí)行速度快執(zhí)行速度快, ,占內存少占內存少應用:實時控制、儀器應用:實時控制、儀器儀表、系統(tǒng)軟件等儀表、系統(tǒng)軟件等匯編語言源程序匯編語言源程序(.ASM)(.
2、ASM)匯編匯編(MASM)(MASM)目標程序目標程序(.OBJ)(.OBJ)鏈接鏈接(LINK)(LINK)可執(zhí)行程序可執(zhí)行程序(.EXE)(.EXE)例:在屏幕上顯示例:在屏幕上顯示“This is a sample program.”DATA SEGMENT ;數據段數據段DA1 DB This is a sample program.,0DH,0AH,$DATA ENDSSTACK SEGMENT ;堆棧段堆棧段ST1 DB 100 DUP(?)STACK ENDSCODE SEGMENT ;代碼段代碼段MAIN PROC FAR ;過程定義過程定義ASSUME CS:CODE,DS
3、:DATA,SS:STACK ;段分配段分配 ORG 1000H START: MOV AX,STACK MOV SS,AX ;SS堆棧段段地址堆棧段段地址 PUSH DS ;返回返回DOS所需的段地址所需的段地址 MOV AX,0 ; 偏移地址偏移地址 PUSH AX MOV AX,DATA MOV DS,AX ;DS數據段段地址數據段段地址 MOV AH,9 ;設置設置DOS 9號功能調用,顯號功能調用,顯示字符串示字符串 MOV DX,OFFSET DA1 ;DS:DX 串首地址,串首地址,$為為結束符結束符 INT 21H ;DOS功能調用功能調用 RETMAIN ENDP ;過程結束
4、過程結束CODE ENDS ;代碼段結束代碼段結束 END START 回車回車換行換行結束符結束符l分段結構分段結構 段名段名 SEGMENTSEGMENT 段名段名 ENDSENDSlMAIN為一過程為一過程 由由DOSDOS調用,調用,RETRET返回返回DOSDOSl兩種語句兩種語句 指令語句指令語句 :匯編后產生目標代碼:匯編后產生目標代碼 偽指令語句:不產生目標代碼,僅提供匯編信息偽指令語句:不產生目標代碼,僅提供匯編信息程序結構:程序結構:4.1 匯編語言的語句格式匯編語言的語句格式一、指令性語句:一、指令性語句:可執(zhí)行語句,有對應的機器碼可執(zhí)行語句,有對應的機器碼 格式:標號:
5、助記符標號:助記符 操作數操作數1 1,操作數,操作數2 2;注釋;注釋二、指示性語句二、指示性語句:偽指令,無機器碼偽指令,無機器碼 格式:名字名字 指示符指示符 操作數操作數1 1,操作數,操作數2 2;注釋;注釋三、數據項三、數據項: 操作數:常量、變量、標號操作數:常量、變量、標號l常量常量:01101101B,38,5AH,0FEH,ABl變量與標號變量與標號:有有3 3個屬性:個屬性:段值:變量段值:變量/ /標號所在段的段地址標號所在段的段地址偏移地址:偏移地址:1.1.類型:變量類型:變量/ /標號:標號:BYTE,WORD,DWORD/NEAR,FARBYTE,WORD,DW
6、ORD/NEAR,FAR符號地址,由字母打頭的字母數字串組成符號地址,由字母打頭的字母數字串組成變量名、段名、過程名、符號名等變量名、段名、過程名、符號名等4.2 MASM中的運算符及表達式中的運算符及表達式一、算術運算符:一、算術運算符:,MOD,SHL,SHR例:例:DA EQU 300 MOV AX,DA80 MOV BX,DA MOD 100 MOV CX,DA/100 MOV DH,01100100B SHR 2二、邏輯運算符:二、邏輯運算符:AND,OR,XOR,NOT例:例:MOV AL,NOT 0FFH MOV BL,8CH AND 73H MOV AH,8CH OR 73H
7、MOV CH,8CH XOR 73H三、關系運算符:三、關系運算符:EQ、NE、LT、LE、GT、GE例:例:MOV AX,10H GT 16 ADD BL,6 EQ 0110B四、數值返回運算符:四、數值返回運算符:OFFSET,SEG,TYPE,LENGH,SIZE例:例:MOV BX,OFFSET DA1 MOV AX,SEG M1 MOV DS,AXnTYPE返回值:返回值: 變量:變量:DB/DW/DD/DQ:1248 標號:標號:NEAR/FAR:12例:例:A1 DB 20H,30H A2 DW 0438H A3 DD ? 返回值返回值 L1:MOV AH,TYPE A1 ; 1
8、 MOV BH,TYPE A2 ; 2 ADD AL,TYPE A3 ; 4 MOV BL,TYPE L1 ; 0FFHnLENGTH:使用使用DUPDUP時時, ,返回其單元數返回其單元數; ;其它情況返回其它情況返回1 1例:例:M1 DW 100 DUP(?)(?) M2 DW 1,2,3 MOV CX,LENGTH M1 MOV BL,LENGTH M2 MOV CX,SIZE M1 MOV BL,SIZE M2 ;SIZELENGTHTYPE五、修改屬性運算符:五、修改屬性運算符:PTR,THIS,HIGH,LOW,SHORT例:例:MOV AX,ES:BX N1 DB 15H,36
9、H N2 DW 1122H,3344H MOV AX,WORD PTR N1 JMP SHORT L2 K1 EQU 1234H MOV AH,HIGH K14.2 偽指令語句偽指令語句一、數據定義語句:一、數據定義語句:DB,DW,DD,DUP( )例:例:DA1 DB 10H,52H DA2 DW 1122H,34H FIRST DB HELLOSECOND DW OK M1 DB ? M2 DW 0D55H,?,? ONE DB 3 DUP(0) TWO DW 10 DUP(?)二、表達式賦值語句:二、表達式賦值語句:EQU例:例:COUNT EQU 100 DATA EQU COUNT
10、+2 B1 EQU OFFSET A1 C1 EQU ADDTHREE DB 4DUP(1,2DUP(20H)三、段定義語句三、段定義語句段定義語句段定義語句格式:段名格式:段名 SEGMENT 定義類型定義類型 組合類型組合類型 類別類別 段名段名 ENDS(1)定位類型:)定位類型:表示該段的起始邊界要求表示該段的起始邊界要求 有有PAGE/PARA/WORD/BYTEPAGE/PARA/WORD/BYTE四種四種, ,分別以頁分別以頁/ /節(jié)節(jié)/ /字字/ /字節(jié)為邊界。字節(jié)為邊界。(2)組合類型:)組合類型:告訴鏈接程序告訴鏈接程序, ,本段與其它段的組合關系本段與其它段的組合關系 共
11、共6 6種:種:nNONENONE: 本段與其它同名段不進行連接本段與其它同名段不進行連接, ,各段獨立(缺省值)各段獨立(缺省值)nPUBLICPUBLIC:該段與其它同名段相鄰地連在一起:該段與其它同名段相鄰地連在一起, ,組成一個邏輯段組成一個邏輯段nCOMMONCOMMON:鏈接程序為本段與其它同名段指定相同的段基址:鏈接程序為本段與其它同名段指定相同的段基址, ,采用覆蓋采用覆蓋 方式存放方式存放, ,連接長度為各段中最大長度。連接長度為各段中最大長度。nATAT表達式:鏈接程序把本段裝在表達式的值所指定的段地址上表達式:鏈接程序把本段裝在表達式的值所指定的段地址上nSTACKSTA
12、CK:指定該段的堆棧段:指定該段的堆棧段, ,在堆棧段中不可省略在堆棧段中不可省略, ,多個模塊只需設多個模塊只需設 置一個堆棧段置一個堆棧段, ,采用覆蓋方式組合。采用覆蓋方式組合。nMEMORYMEMORY:將本段定位在被連接的其它同名段上:將本段定位在被連接的其它同名段上, ,其它同名段按其它同名段按 COMMONCOMMON方式處理。方式處理。(3)類別類別:使所有類別相同的段組成一個段組使所有類別相同的段組成一個段組 典型類別:典型類別:STACKSTACK、CODECODE、DATADATA。nASSUME 段分配語句段分配語句 告訴匯編程序各段與段寄存器的關系告訴匯編程序各段與段
13、寄存器的關系, ,保證生成正確的目標程序保證生成正確的目標程序. . CS:指向代碼段指向代碼段 自動將段基址自動將段基址CSCSDS: 數據段數據段SS: 堆棧段堆棧段 不能自動裝入段基址不能自動裝入段基址, ,需初始化時裝入需初始化時裝入ES: 附加段附加段四、過程定義語句四、過程定義語句過程:過程:與子程序一樣,用與子程序一樣,用CALLCALL指令調用。指令調用。格式:過程名格式:過程名 PROC NEAR 或或 FAR RET 過程名過程名 ENDP五、開始與結束語句五、開始與結束語句 NAME 模塊名模塊名 TITLE 標題標題 ;指定每頁打印的標題指定每頁打印的標題 ORG 表達
14、式表達式 ;指定下面語句的起始偏移地址指定下面語句的起始偏移地址 END 標號;標號;匯編到此結束匯編到此結束不是必需的不是必需的主程序模塊中第一條可執(zhí)主程序模塊中第一條可執(zhí)行語句的標號,可省略行語句的標號,可省略lDOS不僅提供了許多命令讓用戶直接使用,還提供了一不僅提供了許多命令讓用戶直接使用,還提供了一批子程序供用戶直接調用,實現設備管理、文件管理、批子程序供用戶直接調用,實現設備管理、文件管理、目錄管理等。(見附錄目錄管理等。(見附錄F)lDOS規(guī)定用中斷指令規(guī)定用中斷指令INT 21H進入各功能調用總入口,進入各功能調用總入口,再為每個功能調用規(guī)定一個功能號,以便進入相應子程再為每個
15、功能調用規(guī)定一個功能號,以便進入相應子程序入口。序入口。lDOS功能調用的步驟:功能調用的步驟:l系統(tǒng)功能號系統(tǒng)功能號AHAHl調用參數調用參數指定寄存器指定寄存器lINT 21HINT 21H按規(guī)定取的按規(guī)定取的出口參數出口參數入口參數:或在寄存器中入口參數:或在寄存器中 或無參數或無參數返回參數:或在寄存器中返回參數:或在寄存器中 或直接顯示等或直接顯示等一、鍵盤功能調用一、鍵盤功能調用n1號功能調用:號功能調用:從鍵盤輸入單字符并顯示從鍵盤輸入單字符并顯示MOV AH,1 INT 21H;執(zhí)行上述指令;執(zhí)行上述指令, ,系統(tǒng)將掃描鍵盤系統(tǒng)將掃描鍵盤, ,一旦有鍵按下一旦有鍵按下, ,就將
16、鍵值就將鍵值(ASCII)(ASCII)讀入讀入, ,先檢查是否為先檢查是否為Ctrl-Break,Ctrl-Break,若是若是, ,則退出則退出; ;否則否則, ,將鍵值將鍵值 AL,AL,同時將字同時將字符顯示在屏幕上。符顯示在屏幕上。例:交互式程序:例:交互式程序:KEY:MOV AH,1 CMP AL,3 INT 21H JE THREE CMP AL,1 JMP KEY JE ONE ONE: CMP AL,2 TWO: JE TWO THREE: n0BH號功能調用:號功能調用:檢查是否有鍵按下檢查是否有鍵按下 LOOP: MOV AH,0BH INT 21H INC AL JN
17、Z LOOP CALL SOUNDAL=FFH, 有有AL=00H, 無無 DATA SEGMENT BUFF DB 100 ; ; 緩沖區(qū)第一字節(jié)存放字符串最大長度緩沖區(qū)第一字節(jié)存放字符串最大長度 DB ? ; ; 第二字節(jié)待存放實際輸入的字符個數第二字節(jié)待存放實際輸入的字符個數 DB 100 DUP(?) ; ;從第三字節(jié)開始存放從鍵盤接收的字符從第三字節(jié)開始存放從鍵盤接收的字符 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: PUSH DS SUB AX, AX PUSH AX MOV AX, DATA MOV DS, AX M
18、OV DX, OFFSET BUF MOV AH, 0AH INT 21H MOV BX, DX MOV CL, BX+1 ; ;輸入字符個數輸入字符個數CLCL ADD DX, 2 ; ;指向第一個字符指向第一個字符 DS:DX為緩為緩沖區(qū)首地址沖區(qū)首地址例例: : 開辟一個緩沖區(qū)開辟一個緩沖區(qū), , 接收鍵盤輸入的字符串接收鍵盤輸入的字符串, , 將輸入字符個數將輸入字符個數CL,CL,并將指針指向第一個字符。并將指針指向第一個字符。n 0AH號功能調用:號功能調用:從鍵盤接收字符串存入內存指定緩沖區(qū)從鍵盤接收字符串存入內存指定緩沖區(qū)l其它鍵盤功能調用:其它鍵盤功能調用: 06H號:號:直
19、接鍵盤輸入直接鍵盤輸入/ /輸出字符輸出字符, ,不檢查不檢查Ctrl-BreakCtrl-Break 08H號:號:鍵盤輸入一個字符鍵盤輸入一個字符, ,無回顯無回顯 07H號:號:直接鍵盤輸入直接鍵盤輸入/ /輸出字符輸出字符, ,無回顯無回顯, ,不檢查不檢查Ctrl-BreakCtrl-Break 0CH號:號:清鍵盤緩沖區(qū)清鍵盤緩沖區(qū), ,調用鍵盤輸入功能調用鍵盤輸入功能二、顯示功能調用二、顯示功能調用n2號功能調用:號功能調用: 將單字符送屏幕顯示將單字符送屏幕顯示 入口:字符入口:字符DLDLMOV DL, * *MOV AH, 2INT 21H ;在光標位置顯示在光標位置顯示
20、*n9號功能調用:號功能調用: 顯示字符串顯示字符串 入口:字符串首址入口:字符串首址DS:DXDS:DX $ $作結束符作結束符DATA SEGMENT CR EQU 0DH ;回車回車 LF EQU 0AH ;換行換行MES DB HOW DO YOU DO?,CR,LF,$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATAMAIN: MOV AX,DATAMOV DS,AXMOV DX,OFFSETOFFSET MESMOV AH,9INT 21HMOV AH,4CHINT 21HCODE ENDSEND MAIN例:在屏幕上顯示:例:在屏幕上顯示:
21、 HOW DO YOU DOHOW DO YOU DO?PUSH DSSUB AX, AXPUSH AX RET三、打印功能調用三、打印功能調用n5號功能調用:號功能調用:將將DL中字符中字符打印機打印機換頁換頁回車回車換行換行例:例:TEXT DB 0CH,Good morning!,0DH,0AH,$MOV BX,0MOV AH,5NEXT:MOV DL,TEXTBXCMP DL,$JE STOPINT 21HINC BXJMP NEXTSTOP: 四、設置日期與時間四、設置日期與時間n2BH功能調用:功能調用:設置日期設置日期 入口:入口:CX/DH/DL: CX/DH/DL: 年年/
22、/月月/ /日日 出口:出口:AL=0/0FFH:AL=0/0FFH:有效有效/ /無效無效n2AH功能調用:功能調用:取得日期取得日期 入口:無入口:無 出口:出口:CX/DH/DLCX/DH/DL:年:年/ /月月/ /日日n2DH功能調用:功能調用:設置時間設置時間入口:入口:CH/CL/DH/DL:CH/CL/DH/DL:時時/ /分分/ /秒秒/ /秒秒% %出口:出口:AL=0/0FFH:AL=0/0FFH:有效有效/ /無效無效n2CH功能調用:功能調用:取得時間取得時間入口:無入口:無出口:出口:CH/CL/DH/DL:CH/CL/DH/DL:時時/ /分分/ /秒秒/ /秒秒
23、% %n3號功能調用:號功能調用:異步通訊輸入異步通訊輸入 出口:出口:AL=AL=輸入數據輸入數據n4號功能調用:號功能調用:異步通訊輸出異步通訊輸出 入口:入口:DL=DL=輸出數據輸出數據COM1: 2400Bd/8COM1: 2400Bd/8位位/1/1位停止位位停止位 無校驗無校驗/ /無聯(lián)絡無聯(lián)絡五、異步通訊五、異步通訊BIOSBIOS中斷調用中斷調用 方法與方法與DOSDOS功能調用類似功能調用類似, ,自學。自學。4.5 程序設計方法程序設計方法n高質量程序的特點高質量程序的特點程序結構模塊化程序結構模塊化運行速度快運行速度快占內存空間少占內存空間少n程序的基本結構程序的基本結
24、構順序結構順序結構分支結構分支結構循環(huán)結構循環(huán)結構子程序結構子程序結構n 匯編語言源程序設計步驟匯編語言源程序設計步驟 分析問題:建模分析問題:建模, ,確定算法確定算法 繪制流程圖:由粗到細繪制流程圖:由粗到細 資源分配資源分配 編寫程序編寫程序 檢查調試檢查調試 運行分析運行分析一、順序結構一、順序結構DATA SEGMENT TAB DB 0,1,4,9,16,25,36,49,64,81 BUF DB Please input one number (09):,0DH,0AH,$DATA ENDSSTACK SEGMENT STACK STACK DB 50 DUP(?) ; 定義定義
25、50字節(jié)的堆棧區(qū)字節(jié)的堆棧區(qū) TOP LABLE WORD ; 棧底別名為棧底別名為TOP, 類型為字類型為字STACK ENDSCODE SEGMENTMAIN PROC FAR ASSUME CS:CODE, DS:DATA, SS:STACK例例1.1.查表程序查表程序 內存中內存中TABTAB開始存放開始存放0909的平方值,通過人機對話,查的平方值,通過人機對話,查給定數給定數X X的平方值,存入的平方值,存入ALAL中。中。START:MOV AX,DATA MOV DS,AX ;段初始化段初始化 MOV AX,STACK MOV SS,AX MOV SP,OFFSET TOP ;
26、棧指針棧指針 MOV BX,OFFSET TAB ;表頭表頭NEXT:MOV DX,OFFSET BUF MOV AH, 9 ;9號功能調用號功能調用 INT 21H ;提示輸入一個數提示輸入一個數 MOV AH,1 ;1號功能調用號功能調用 INT 21H ;掃描鍵盤掃描鍵盤,鍵值鍵值AL MOV AH,0 AND AL,0FH ;形成偏移量形成偏移量AXADD BX,AX ;查表查表MOV AL,BX ;存結果存結果RET MAIN ENDPCODE ENDS END STARTTAB00010409162536496481TAB+1+2+3+4+5+6+7+8+9二、分支結構二、分支結構
27、DATA SEGMENT BUF DB N DB 01H,38H,47H,60H,76H NUM DB 3 DUP(?);存結果存結果DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE, DS:DATASTART: PUSH DSSUB AX , AXPUSH AXMOV AX , DATAMOV DS , AX例例2.2.統(tǒng)計統(tǒng)計BUFBUF為首址的字符串中數字為首址的字符串中數字, ,字母及其它符號的個數。字母及其它符號的個數。數字數字: 09, ASCII:30H39H字母字母: AZ,ASCII:41H5AHMOV CH,N ;CH串個數串
28、個數MOV BX,1MOV DX,0 ;數字數字,字母個數字母個數LP:MOV AH,BUFBX ;取字符取字符CMP AH,30HJL NEXT ;9,轉轉INC DH ;數字個數數字個數+1JMP NEXTABC:CMP AH,41HJL NEXT ;Z,轉轉INC DL ;字母個數字母個數+1NEXT:INC BX ;地址地址+1DEC CH ;個數個數-1JNE LPMOV BUFBX,DHMOV BUFBX+1,DLMOV AH,NSUB AH,DHSUB AH,DLMOV BUFBX+2,AHRETMAIN ENDPCODE ENDSEND STARTMOV AH,1INT 21H
29、 ;1號功能調用,鍵值號功能調用,鍵值 ALCMP AL,0JE P0CMP AL,1JE P1 CMP AL,7JE P7 方法簡單,但速度慢方法簡單,但速度慢例例3. 3. 查詢法實現多分支查詢法實現多分支有有8 8個加工子程序,入口地址分別為:個加工子程序,入口地址分別為:P0,P1,P2,P0,P1,P2,P7P7。根據鍵盤輸入命令根據鍵盤輸入命令, ,依次轉向依次轉向8 8個子程序。個子程序。DATA SEGMENT BASE DW P0,P1,P2,P3,P4,P5,P6,P7DATA ENDS MOV AH,1INT 21H ; AL鍵值鍵值AND AL,0FHMOV BX,OF
30、FSET BASE ;BX表首址表首址MOV AH,0ADD AL,AL ;形成偏移量形成偏移量ADD BX,AX ;表地址表地址JMP WORD PTRBX ;轉入口地址轉入口地址 P0LP0HP1LP1HP2LP2HP3LP3HP7LP7HBASE+2+4+6+14偏移量偏移量例例4.4.跳轉表實現多分支之一:根據表內地址分支跳轉表實現多分支之一:根據表內地址分支 元素在表中的地址元素在表中的地址, ,即即: :表地址表首址偏移量表地址表首址偏移量DATA SEGMENTBASE DB E9,P0L,P0H,E9,P1L,P1H,DATA ENDSMOV AH,1INT 21H AND A
31、L,0FHMOV BL,ALADD AL,ALADD AL,BL ;偏移量偏移量=鍵值鍵值*3 MOV AH,0MOV BX,OFFSET BASE ;表首址表首址ADD BX,AX ;表地址表地址JMP BX ;跳入表內跳入表內,執(zhí)行轉移指令執(zhí)行轉移指令E9P0LP0HE9P1LP1HE9P2LP2HE9P7LP7HBASE+3+6+21 JMP P0JMP P1JMP P2JMP P7也可根據關鍵字跳轉表實現分支也可根據關鍵字跳轉表實現分支例例5.5.利用跳轉表實現多分支之二:根據表內指令分支利用跳轉表實現多分支之二:根據表內指令分支三、循環(huán)結構程序三、循環(huán)結構程序兩種結構:兩種結構:初始
32、化循環(huán)體修改參數控制條件出口 初始化循環(huán)體控制條件修改參數出口先執(zhí)行,后判斷先判斷,后執(zhí)行YYNN至少執(zhí)行一次循環(huán)體至少執(zhí)行一次循環(huán)體用于次數固定的程序用于次數固定的程序可能一次也不執(zhí)行循環(huán)體可能一次也不執(zhí)行循環(huán)體用于次數不固定的程序用于次數不固定的程序例例6. 十六進制數十六進制數ASCII將將BX中的中的16進制數轉換為進制數轉換為ASCII,存放到存放到BUF開始的單元中開始的單元中,并顯示出來。并顯示出來。 MOV SI,OFFSET BUF MOV CH,4NEXT:MOV CL,4 ROL BX,CL ;最高最高4位移右邊位移右邊 MOV AL,BL AND AL,0FH ADD
33、AL,30H CMP AL,3AH JL STORE ;09,轉轉 ADD AL,7 ;AF,+7 STORE:MOV SI,ALMOV AH,2MOV DL,ALINT 21HINC SIDEC CHJNZ NEXTHLT先循環(huán)先循環(huán),后判斷后判斷 MOV CL,0 L1: AND AX,AX ; JZ STOP SAL AX,1 JNC L1 INC CL L2: JMP L1 STOP: HLT 例例7. AX7. AX寄存器中有一個寄存器中有一個1616位二進制數位二進制數, ,統(tǒng)計其中統(tǒng)計其中1 1的個數的個數, ,并存入并存入CLCL中。中。重置重置PSW先判斷先判斷,后循環(huán)后循環(huán)
34、例例8. 8. 邏輯尺控制循環(huán)邏輯尺控制循環(huán) 某采樣系統(tǒng)某采樣系統(tǒng): :第第1,2,5,7,101,2,5,7,10次,按公式次,按公式FUN1=X+5FUN1=X+5計算計算 第第3,4,6,8,9 3,4,6,8,9 次,按公式次,按公式FUN2=X-3FUN2=X-3計算計算DATA SEGMENT LOGRUL EQU 0011010110000000B COUNT EQU 10 BUF DB 20 DUP(?) ;采樣數據采樣數據 BLOCK DB 20 DUP(?) ;存處理后的數據存處理后的數據DATA ENDS MOV DX,LOGRULMOV CX,COUNT MOV SI,
35、OFFSET BUF MOV DI,OFFSET BLOCKNEXT:MOV AX,WORD PTRSI ROL DX,1 JC FUN2 FUN1: ADD AX,5 JMP NEXT1 FUN2:SUB AX,3NEXT1:MOV DI,AX INC SI INC SI INC DI INC DI LOOP NEXT 編程思路編程思路:從第一個數開始從第一個數開始, ,順序比較相鄰兩數順序比較相鄰兩數, ,若順序不對若順序不對, ,則交換位置則交換位置, ,第一遍比較第一遍比較N-1N-1次次, ,最大數沉到數尾最大數沉到數尾; ;第二遍只需比第二遍只需比較較N-2N-2次次; ;共進行共
36、進行N-1N-1遍即可完成排序。(遍即可完成排序。(冒泡法冒泡法) 若設置交換標志若設置交換標志, ,可加快進程。(書中第二種方法)可加快進程。(書中第二種方法)STARTSTART:MOV DI,OFFSETOFFSET BUF MOV CX,DI DEC CX ;內循環(huán)次數內循環(huán)次數=N-1L1:MOV DX,CX ;DX=外循環(huán)次數外循環(huán)次數 MOV BH,0 ;交換標志交換標志L2:ADD DI,2 ;指向下一個字指向下一個字 MOV AX,DI CMP AX,DI+2 ;相鄰兩數比較相鄰兩數比較 JBE CONTI CONTI ;XiXi+1,不交換不交換 XCHG AX,DI+2
37、;XiXi+1,交換交換 MOV DI,AX MOV BH,1 ;交換標志置交換標志置1CONTICONTI:LOOP L2 CMP BH,0 JE STOPSTOP ;未發(fā)生交換未發(fā)生交換,結束結束 MOV CX,DX MOV DI,OFFSETOFFSET BUF LOOP L1 ;CX-1,DX-1STOPSTOP: RET 例例9. 9. 多重循環(huán):給多重循環(huán):給BUFBUF開始的字數組按從小到大的順序排列。開始的字數組按從小到大的順序排列。四、子程序結構四、子程序結構 子程序子程序(過程過程)調用應處理好三個問題:調用應處理好三個問題:n保護斷點:保護斷點:CS,IPCS,IP入棧及
38、出棧(入棧及出棧(CPUCPU自動完成)自動完成)n保護現場:保護現場:子程序中用到的寄存器子程序中用到的寄存器/ /存儲單元需保護存儲單元需保護n參數傳遞:參數傳遞: 寄存器傳遞寄存器傳遞: : 速度快速度快, ,參數少參數少 存儲器傳遞存儲器傳遞 堆棧傳遞堆棧傳遞可傳遞較多參數可傳遞較多參數例例10. 完整形式的子程序完整形式的子程序; ;名稱:名稱:BCD2BINBCD2BIN; ;功能:將一個字節(jié)功能:將一個字節(jié)BCDBCD碼碼; ; 轉換成二進制數轉換成二進制數; ;使用寄存器使用寄存器:CX:CX; ;入口參數:入口參數: ALAL存放兩位存放兩位BCDBCD碼碼; ;出口參數:出
39、口參數: ALAL存放二進制數存放二進制數; ;調用其它子程序:無調用其它子程序:無BCD2BIN PROC FARPUSH CXMOV CH,ALAND CH,0FHMOV CL,4SHR AL,CL MOV CL,10 MUL CL ADD AL,CH POP CX RETBCD2BIN ENDP通過寄存器傳遞參數通過寄存器傳遞參數DATA SEGMENTARY1 DW 100 DUP(?) ; 定義數組定義數組1 1SUM1 DW ? ; 和和ARY2 DW 100 DUP(?) ; 定義數組定義數組2 2SUM2 DW ? ; 和和DATA ENDS 例例11.11.數據段定義兩個數組
40、數據段定義兩個數組, ,分別求兩數組元素之和分別求兩數組元素之和( (不計溢出不計溢出) )。MAIN PROC FAR ;主程序主程序START: LEA SI,ARY1 MOV CX,LENGTH ARY1 CALL SUM LEA SI,ARY2 MOV CX,LENGTH ARY2 CALL SUM RET MAIN ENDPSUM PROC NEAR;求和子程序求和子程序 XOR AX,AX L1: ADD AX,WORD PTRSI INC SI INC SI LOOP L1 MOV WORD PTRSI,AX RETSUM ENDP 通過存儲單元傳遞參數通過存儲單元傳遞參數例例1
41、2. 12. 分別求兩個十進制數組之和分別求兩個十進制數組之和DATA SEGMENTDATA SEGMENTARY1 DB 20 DUP(?)ARY1 DB 20 DUP(?)SUM1 DW ?SUM1 DW ?ARY2 DB 100 DUP(?)ARY2 DB 100 DUP(?)SUM2 DW ?SUM2 DW ?DATA ENDSDATA ENDS MAIN PROC FAR ;MAIN PROC FAR ;主程序主程序START:START: MOV AX,OFFSET ARY1; MOV AX,OFFSET ARY1;數組數組1 1首址首址 PUSH AXPUSH AX MOV A
42、X,SIZE ARY1 ; MOV AX,SIZE ARY1 ;數組數組1 1個數個數 PUSH AXPUSH AX CALL FAR PTR PADD ; CALL FAR PTR PADD ;調子程序調子程序MOV AX,OFFSET ARY2MOV AX,OFFSET ARY2PUSH AXPUSH AXMOV AX,SIZE ARY2MOV AX,SIZE ARY2PUSH AXPUSH AXCALL FAR PTR PADDCALL FAR PTR PADDRETRET PCODE SEGMENT ; PCODE SEGMENT ;子程序子程序 ASSUMEASSUME CSCS:P
43、CODEPCODE,DSDS:DATA,DATA,與主程序不與主程序不在一個段在一個段堆棧傳遞參數堆棧傳遞參數PADD PROC FARPUSH BX ;保護現場保護現場PUSH CXPUSH BPMOV BP,SPPUSHFMOV CX,BP+10 ;數組長度數組長度MOV BX,BP+12 ;數組首址數組首址MOV AX,0NEXT:ADD AL,BXDAAMOV DL,ALMOV AL,0ADC AL,AH ; AL 0+CF+AHDAAMOV AH,AL ; AH 高位累加和高位累加和MOV AL,DLINC BXLOOP NEXTMOV BX,AXPOPFPOP BPPOP CXPOP BXRET 4;PADD ENDP彈出斷點后彈出斷點后,再彈出再彈出4個子節(jié)個子節(jié),使使SIZE,ARY作廢作廢,恢復恢復SPPSWBPCXBXIPCSSIZEARY
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療軟件合同范例
- 出售固定資產合同范本
- 單方出資合作合同范本
- 農村大包建房合同范本
- 合同范例效力
- 印刷合同范本 博客
- 廠房消防設計合同范本
- 農業(yè)合作社入股合同范本
- 醫(yī)生顧問聘用合同范本
- 導演工作室合作合同范本
- 光伏發(fā)電場建設工程資料表格(239表格齊全)
- 古代漢語文選無標點(第一冊,第二冊)
- 《紙馬》教學設計公開課
- 西服裙縫制工藝課件(PPT 14頁)
- 城市道路綠化養(yǎng)護工作
- 國內木材炭化技術專利現狀
- 施耐德公司品牌戰(zhàn)略
- 校企合作人才培養(yǎng)模式實踐研究開題報告定稿
- 城市供水計劃統(tǒng)計指標解釋
- 塑膠原料檢驗規(guī)范
- 建筑公司內部管理流程-課件PPT
評論
0/150
提交評論