版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第四章第四章 匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì)概述概述l匯編語(yǔ)言匯編語(yǔ)言l用指令助記符、符號(hào)地址、用指令助記符、符號(hào)地址、標(biāo)號(hào)等編寫(xiě)的程序。標(biāo)號(hào)等編寫(xiě)的程序。l為機(jī)器語(yǔ)言的符號(hào)表示為機(jī)器語(yǔ)言的符號(hào)表示 l匯編語(yǔ)言的特點(diǎn)匯編語(yǔ)言的特點(diǎn)l高級(jí)語(yǔ)言高級(jí)語(yǔ)言可移植性好可移植性好程序易編程序易編/ /易讀易讀/ /易學(xué)易學(xué)應(yīng)用:科學(xué)計(jì)算、信息應(yīng)用:科學(xué)計(jì)算、信息管理等管理等l匯編語(yǔ)言匯編語(yǔ)言面向機(jī)器面向機(jī)器/ /硬件硬件程序代碼效率高程序代碼效率高執(zhí)行速度快執(zhí)行速度快, ,占內(nèi)存少占內(nèi)存少應(yīng)用:實(shí)時(shí)控制、儀器應(yīng)用:實(shí)時(shí)控制、儀器儀表、系統(tǒng)軟件等儀表、系統(tǒng)軟件等匯編語(yǔ)言源程序匯編語(yǔ)言源程序(.ASM)(.
2、ASM)匯編匯編(MASM)(MASM)目標(biāo)程序目標(biāo)程序(.OBJ)(.OBJ)鏈接鏈接(LINK)(LINK)可執(zhí)行程序可執(zhí)行程序(.EXE)(.EXE)例:在屏幕上顯示例:在屏幕上顯示“This is a sample program.”DATA SEGMENT ;數(shù)據(jù)段數(shù)據(jù)段DA1 DB This is a sample program.,0DH,0AH,$DATA ENDSSTACK SEGMENT ;堆棧段堆棧段ST1 DB 100 DUP(?)STACK ENDSCODE SEGMENT ;代碼段代碼段MAIN PROC FAR ;過(guò)程定義過(guò)程定義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數(shù)據(jù)段段地址數(shù)據(jù)段段地址 MOV AH,9 ;設(shè)置設(shè)置DOS 9號(hào)功能調(diào)用,顯號(hào)功能調(diào)用,顯示字符串示字符串 MOV DX,OFFSET DA1 ;DS:DX 串首地址,串首地址,$為為結(jié)束符結(jié)束符 INT 21H ;DOS功能調(diào)用功能調(diào)用 RETMAIN ENDP ;過(guò)程結(jié)束
4、過(guò)程結(jié)束CODE ENDS ;代碼段結(jié)束代碼段結(jié)束 END START 回車回車換行換行結(jié)束符結(jié)束符l分段結(jié)構(gòu)分段結(jié)構(gòu) 段名段名 SEGMENTSEGMENT 段名段名 ENDSENDSlMAIN為一過(guò)程為一過(guò)程 由由DOSDOS調(diào)用,調(diào)用,RETRET返回返回DOSDOSl兩種語(yǔ)句兩種語(yǔ)句 指令語(yǔ)句指令語(yǔ)句 :匯編后產(chǎn)生目標(biāo)代碼:匯編后產(chǎn)生目標(biāo)代碼 偽指令語(yǔ)句:不產(chǎn)生目標(biāo)代碼,僅提供匯編信息偽指令語(yǔ)句:不產(chǎn)生目標(biāo)代碼,僅提供匯編信息程序結(jié)構(gòu):程序結(jié)構(gòu):4.1 匯編語(yǔ)言的語(yǔ)句格式匯編語(yǔ)言的語(yǔ)句格式一、指令性語(yǔ)句:一、指令性語(yǔ)句:可執(zhí)行語(yǔ)句,有對(duì)應(yīng)的機(jī)器碼可執(zhí)行語(yǔ)句,有對(duì)應(yīng)的機(jī)器碼 格式:標(biāo)號(hào):
5、助記符標(biāo)號(hào):助記符 操作數(shù)操作數(shù)1 1,操作數(shù),操作數(shù)2 2;注釋;注釋二、指示性語(yǔ)句二、指示性語(yǔ)句:偽指令,無(wú)機(jī)器碼偽指令,無(wú)機(jī)器碼 格式:名字名字 指示符指示符 操作數(shù)操作數(shù)1 1,操作數(shù),操作數(shù)2 2;注釋;注釋三、數(shù)據(jù)項(xiàng)三、數(shù)據(jù)項(xiàng): 操作數(shù):常量、變量、標(biāo)號(hào)操作數(shù):常量、變量、標(biāo)號(hào)l常量常量:01101101B,38,5AH,0FEH,ABl變量與標(biāo)號(hào)變量與標(biāo)號(hào):有有3 3個(gè)屬性:個(gè)屬性:段值:變量段值:變量/ /標(biāo)號(hào)所在段的段地址標(biāo)號(hào)所在段的段地址偏移地址:偏移地址:1.1.類型:變量類型:變量/ /標(biāo)號(hào):標(biāo)號(hào):BYTE,WORD,DWORD/NEAR,FARBYTE,WORD,DW
6、ORD/NEAR,FAR符號(hào)地址,由字母打頭的字母數(shù)字串組成符號(hào)地址,由字母打頭的字母數(shù)字串組成變量名、段名、過(guò)程名、符號(hào)名等變量名、段名、過(guò)程名、符號(hào)名等4.2 MASM中的運(yùn)算符及表達(dá)式中的運(yùn)算符及表達(dá)式一、算術(shù)運(yùn)算符:一、算術(shù)運(yùn)算符:,MOD,SHL,SHR例:例:DA EQU 300 MOV AX,DA80 MOV BX,DA MOD 100 MOV CX,DA/100 MOV DH,01100100B SHR 2二、邏輯運(yùn)算符:二、邏輯運(yùn)算符:AND,OR,XOR,NOT例:例:MOV AL,NOT 0FFH MOV BL,8CH AND 73H MOV AH,8CH OR 73H
7、MOV CH,8CH XOR 73H三、關(guān)系運(yùn)算符:三、關(guān)系運(yùn)算符:EQ、NE、LT、LE、GT、GE例:例:MOV AX,10H GT 16 ADD BL,6 EQ 0110B四、數(shù)值返回運(yùn)算符:四、數(shù)值返回運(yùn)算符:OFFSET,SEG,TYPE,LENGH,SIZE例:例:MOV BX,OFFSET DA1 MOV AX,SEG M1 MOV DS,AXnTYPE返回值:返回值: 變量:變量:DB/DW/DD/DQ:1248 標(biāo)號(hào):標(biāo)號(hào):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時(shí)時(shí), ,返回其單元數(shù)返回其單元數(shù); ;其它情況返回其它情況返回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五、修改屬性運(yùn)算符:五、修改屬性運(yùn)算符: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 偽指令語(yǔ)句偽指令語(yǔ)句一、數(shù)據(jù)定義語(yǔ)句:一、數(shù)據(jù)定義語(yǔ)句: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(?)二、表達(dá)式賦值語(yǔ)句:二、表達(dá)式賦值語(yǔ)句:EQU例:例:COUNT EQU 100 DATA EQU COUNT
10、+2 B1 EQU OFFSET A1 C1 EQU ADDTHREE DB 4DUP(1,2DUP(20H)三、段定義語(yǔ)句三、段定義語(yǔ)句段定義語(yǔ)句段定義語(yǔ)句格式:段名格式:段名 SEGMENT 定義類型定義類型 組合類型組合類型 類別類別 段名段名 ENDS(1)定位類型:)定位類型:表示該段的起始邊界要求表示該段的起始邊界要求 有有PAGE/PARA/WORD/BYTEPAGE/PARA/WORD/BYTE四種四種, ,分別以頁(yè)分別以頁(yè)/ /節(jié)節(jié)/ /字字/ /字節(jié)為邊界。字節(jié)為邊界。(2)組合類型:)組合類型:告訴鏈接程序告訴鏈接程序, ,本段與其它段的組合關(guān)系本段與其它段的組合關(guān)系 共
11、共6 6種:種:nNONENONE: 本段與其它同名段不進(jìn)行連接本段與其它同名段不進(jìn)行連接, ,各段獨(dú)立(缺省值)各段獨(dú)立(缺省值)nPUBLICPUBLIC:該段與其它同名段相鄰地連在一起:該段與其它同名段相鄰地連在一起, ,組成一個(gè)邏輯段組成一個(gè)邏輯段nCOMMONCOMMON:鏈接程序?yàn)楸径闻c其它同名段指定相同的段基址:鏈接程序?yàn)楸径闻c其它同名段指定相同的段基址, ,采用覆蓋采用覆蓋 方式存放方式存放, ,連接長(zhǎng)度為各段中最大長(zhǎng)度。連接長(zhǎng)度為各段中最大長(zhǎng)度。nATAT表達(dá)式:鏈接程序把本段裝在表達(dá)式的值所指定的段地址上表達(dá)式:鏈接程序把本段裝在表達(dá)式的值所指定的段地址上nSTACKSTA
12、CK:指定該段的堆棧段:指定該段的堆棧段, ,在堆棧段中不可省略在堆棧段中不可省略, ,多個(gè)模塊只需設(shè)多個(gè)模塊只需設(shè) 置一個(gè)堆棧段置一個(gè)堆棧段, ,采用覆蓋方式組合。采用覆蓋方式組合。nMEMORYMEMORY:將本段定位在被連接的其它同名段上:將本段定位在被連接的其它同名段上, ,其它同名段按其它同名段按 COMMONCOMMON方式處理。方式處理。(3)類別類別:使所有類別相同的段組成一個(gè)段組使所有類別相同的段組成一個(gè)段組 典型類別:典型類別:STACKSTACK、CODECODE、DATADATA。nASSUME 段分配語(yǔ)句段分配語(yǔ)句 告訴匯編程序各段與段寄存器的關(guān)系告訴匯編程序各段與段
13、寄存器的關(guān)系, ,保證生成正確的目標(biāo)程序保證生成正確的目標(biāo)程序. . CS:指向代碼段指向代碼段 自動(dòng)將段基址自動(dòng)將段基址CSCSDS: 數(shù)據(jù)段數(shù)據(jù)段SS: 堆棧段堆棧段 不能自動(dòng)裝入段基址不能自動(dòng)裝入段基址, ,需初始化時(shí)裝入需初始化時(shí)裝入ES: 附加段附加段四、過(guò)程定義語(yǔ)句四、過(guò)程定義語(yǔ)句過(guò)程:過(guò)程:與子程序一樣,用與子程序一樣,用CALLCALL指令調(diào)用。指令調(diào)用。格式:過(guò)程名格式:過(guò)程名 PROC NEAR 或或 FAR RET 過(guò)程名過(guò)程名 ENDP五、開(kāi)始與結(jié)束語(yǔ)句五、開(kāi)始與結(jié)束語(yǔ)句 NAME 模塊名模塊名 TITLE 標(biāo)題標(biāo)題 ;指定每頁(yè)打印的標(biāo)題指定每頁(yè)打印的標(biāo)題 ORG 表達(dá)
14、式表達(dá)式 ;指定下面語(yǔ)句的起始偏移地址指定下面語(yǔ)句的起始偏移地址 END 標(biāo)號(hào);標(biāo)號(hào);匯編到此結(jié)束匯編到此結(jié)束不是必需的不是必需的主程序模塊中第一條可執(zhí)主程序模塊中第一條可執(zhí)行語(yǔ)句的標(biāo)號(hào),可省略行語(yǔ)句的標(biāo)號(hào),可省略lDOS不僅提供了許多命令讓用戶直接使用,還提供了一不僅提供了許多命令讓用戶直接使用,還提供了一批子程序供用戶直接調(diào)用,實(shí)現(xiàn)設(shè)備管理、文件管理、批子程序供用戶直接調(diào)用,實(shí)現(xiàn)設(shè)備管理、文件管理、目錄管理等。(見(jiàn)附錄目錄管理等。(見(jiàn)附錄F)lDOS規(guī)定用中斷指令規(guī)定用中斷指令I(lǐng)NT 21H進(jìn)入各功能調(diào)用總?cè)肟?,進(jìn)入各功能調(diào)用總?cè)肟?,再為每個(gè)功能調(diào)用規(guī)定一個(gè)功能號(hào),以便進(jìn)入相應(yīng)子程再為每個(gè)
15、功能調(diào)用規(guī)定一個(gè)功能號(hào),以便進(jìn)入相應(yīng)子程序入口。序入口。lDOS功能調(diào)用的步驟:功能調(diào)用的步驟:l系統(tǒng)功能號(hào)系統(tǒng)功能號(hào)AHAHl調(diào)用參數(shù)調(diào)用參數(shù)指定寄存器指定寄存器lINT 21HINT 21H按規(guī)定取的按規(guī)定取的出口參數(shù)出口參數(shù)入口參數(shù):或在寄存器中入口參數(shù):或在寄存器中 或無(wú)參數(shù)或無(wú)參數(shù)返回參數(shù):或在寄存器中返回參數(shù):或在寄存器中 或直接顯示等或直接顯示等一、鍵盤(pán)功能調(diào)用一、鍵盤(pán)功能調(diào)用n1號(hào)功能調(diào)用:號(hào)功能調(diào)用:從鍵盤(pán)輸入單字符并顯示從鍵盤(pán)輸入單字符并顯示MOV AH,1 INT 21H;執(zhí)行上述指令;執(zhí)行上述指令, ,系統(tǒng)將掃描鍵盤(pán)系統(tǒng)將掃描鍵盤(pán), ,一旦有鍵按下一旦有鍵按下, ,就將
16、鍵值就將鍵值(ASCII)(ASCII)讀入讀入, ,先檢查是否為先檢查是否為Ctrl-Break,Ctrl-Break,若是若是, ,則退出則退出; ;否則否則, ,將鍵值將鍵值 AL,AL,同時(shí)將字同時(shí)將字符顯示在屏幕上。符顯示在屏幕上。例:交互式程序:例:交互式程序: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號(hào)功能調(diào)用:號(hào)功能調(diào)用:檢查是否有鍵按下檢查是否有鍵按下 LOOP: MOV AH,0BH INT 21H INC AL JN
17、Z LOOP CALL SOUNDAL=FFH, 有有AL=00H, 無(wú)無(wú) DATA SEGMENT BUFF DB 100 ; ; 緩沖區(qū)第一字節(jié)存放字符串最大長(zhǎng)度緩沖區(qū)第一字節(jié)存放字符串最大長(zhǎng)度 DB ? ; ; 第二字節(jié)待存放實(shí)際輸入的字符個(gè)數(shù)第二字節(jié)待存放實(shí)際輸入的字符個(gè)數(shù) DB 100 DUP(?) ; ;從第三字節(jié)開(kāi)始存放從鍵盤(pán)接收的字符從第三字節(jié)開(kāi)始存放從鍵盤(pán)接收的字符 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 ; ;輸入字符個(gè)數(shù)輸入字符個(gè)數(shù)CLCL ADD DX, 2 ; ;指向第一個(gè)字符指向第一個(gè)字符 DS:DX為緩為緩沖區(qū)首地址沖區(qū)首地址例例: : 開(kāi)辟一個(gè)緩沖區(qū)開(kāi)辟一個(gè)緩沖區(qū), , 接收鍵盤(pán)輸入的字符串接收鍵盤(pán)輸入的字符串, , 將輸入字符個(gè)數(shù)將輸入字符個(gè)數(shù)CL,CL,并將指針指向第一個(gè)字符。并將指針指向第一個(gè)字符。n 0AH號(hào)功能調(diào)用:號(hào)功能調(diào)用:從鍵盤(pán)接收字符串存入內(nèi)存指定緩沖區(qū)從鍵盤(pán)接收字符串存入內(nèi)存指定緩沖區(qū)l其它鍵盤(pán)功能調(diào)用:其它鍵盤(pán)功能調(diào)用: 06H號(hào):號(hào):直
19、接鍵盤(pán)輸入直接鍵盤(pán)輸入/ /輸出字符輸出字符, ,不檢查不檢查Ctrl-BreakCtrl-Break 08H號(hào):號(hào):鍵盤(pán)輸入一個(gè)字符鍵盤(pán)輸入一個(gè)字符, ,無(wú)回顯無(wú)回顯 07H號(hào):號(hào):直接鍵盤(pán)輸入直接鍵盤(pán)輸入/ /輸出字符輸出字符, ,無(wú)回顯無(wú)回顯, ,不檢查不檢查Ctrl-BreakCtrl-Break 0CH號(hào):號(hào):清鍵盤(pán)緩沖區(qū)清鍵盤(pán)緩沖區(qū), ,調(diào)用鍵盤(pán)輸入功能調(diào)用鍵盤(pán)輸入功能二、顯示功能調(diào)用二、顯示功能調(diào)用n2號(hào)功能調(diào)用:號(hào)功能調(diào)用: 將單字符送屏幕顯示將單字符送屏幕顯示 入口:字符入口:字符DLDLMOV DL, * *MOV AH, 2INT 21H ;在光標(biāo)位置顯示在光標(biāo)位置顯示
20、*n9號(hào)功能調(diào)用:號(hào)功能調(diào)用: 顯示字符串顯示字符串 入口:字符串首址入口:字符串首址DS:DXDS:DX $ $作結(jié)束符作結(jié)束符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三、打印功能調(diào)用三、打印功能調(diào)用n5號(hào)功能調(diào)用:號(hào)功能調(diào)用:將將DL中字符中字符打印機(jī)打印機(jī)換頁(yè)換頁(yè)回車回車換行換行例:例:TEXT DB 0CH,Good morning!,0DH,0AH,$MOV BX,0MOV AH,5NEXT:MOV DL,TEXTBXCMP DL,$JE STOPINT 21HINC BXJMP NEXTSTOP: 四、設(shè)置日期與時(shí)間四、設(shè)置日期與時(shí)間n2BH功能調(diào)用:功能調(diào)用:設(shè)置日期設(shè)置日期 入口:入口:CX/DH/DL: CX/DH/DL: 年年/
22、/月月/ /日日 出口:出口:AL=0/0FFH:AL=0/0FFH:有效有效/ /無(wú)效無(wú)效n2AH功能調(diào)用:功能調(diào)用:取得日期取得日期 入口:無(wú)入口:無(wú) 出口:出口:CX/DH/DLCX/DH/DL:年:年/ /月月/ /日日n2DH功能調(diào)用:功能調(diào)用:設(shè)置時(shí)間設(shè)置時(shí)間入口:入口:CH/CL/DH/DL:CH/CL/DH/DL:時(shí)時(shí)/ /分分/ /秒秒/ /秒秒% %出口:出口:AL=0/0FFH:AL=0/0FFH:有效有效/ /無(wú)效無(wú)效n2CH功能調(diào)用:功能調(diào)用:取得時(shí)間取得時(shí)間入口:無(wú)入口:無(wú)出口:出口:CH/CL/DH/DL:CH/CL/DH/DL:時(shí)時(shí)/ /分分/ /秒秒/ /秒秒
23、% %n3號(hào)功能調(diào)用:號(hào)功能調(diào)用:異步通訊輸入異步通訊輸入 出口:出口:AL=AL=輸入數(shù)據(jù)輸入數(shù)據(jù)n4號(hào)功能調(diào)用:號(hào)功能調(diào)用:異步通訊輸出異步通訊輸出 入口:入口:DL=DL=輸出數(shù)據(jù)輸出數(shù)據(jù)COM1: 2400Bd/8COM1: 2400Bd/8位位/1/1位停止位位停止位 無(wú)校驗(yàn)無(wú)校驗(yàn)/ /無(wú)聯(lián)絡(luò)無(wú)聯(lián)絡(luò)五、異步通訊五、異步通訊BIOSBIOS中斷調(diào)用中斷調(diào)用 方法與方法與DOSDOS功能調(diào)用類似功能調(diào)用類似, ,自學(xué)。自學(xué)。4.5 程序設(shè)計(jì)方法程序設(shè)計(jì)方法n高質(zhì)量程序的特點(diǎn)高質(zhì)量程序的特點(diǎn)程序結(jié)構(gòu)模塊化程序結(jié)構(gòu)模塊化運(yùn)行速度快運(yùn)行速度快占內(nèi)存空間少占內(nèi)存空間少n程序的基本結(jié)構(gòu)程序的基本結(jié)
24、構(gòu)順序結(jié)構(gòu)順序結(jié)構(gòu)分支結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)子程序結(jié)構(gòu)子程序結(jié)構(gòu)n 匯編語(yǔ)言源程序設(shè)計(jì)步驟匯編語(yǔ)言源程序設(shè)計(jì)步驟 分析問(wèn)題:建模分析問(wèn)題:建模, ,確定算法確定算法 繪制流程圖:由粗到細(xì)繪制流程圖:由粗到細(xì) 資源分配資源分配 編寫(xiě)程序編寫(xiě)程序 檢查調(diào)試檢查調(diào)試 運(yùn)行分析運(yùn)行分析一、順序結(jié)構(gòu)一、順序結(jié)構(gòu)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.查表程序查表程序 內(nèi)存中內(nèi)存中TABTAB開(kāi)始存放開(kāi)始存放0909的平方值,通過(guò)人機(jī)對(duì)話,查的平方值,通過(guò)人機(jī)對(duì)話,查給定數(shù)給定數(shù)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號(hào)功能調(diào)用號(hào)功能調(diào)用 INT 21H ;提示輸入一個(gè)數(shù)提示輸入一個(gè)數(shù) MOV AH,1 ;1號(hào)功能調(diào)用號(hào)功能調(diào)用 INT 21H ;掃描鍵盤(pán)掃描鍵盤(pán),鍵值鍵值A(chǔ)L MOV AH,0 AND AL,0FH ;形成偏移量形成偏移量AXADD BX,AX ;查表查表MOV AL,BX ;存結(jié)果存結(jié)果RET MAIN ENDPCODE ENDS END STARTTAB00010409162536496481TAB+1+2+3+4+5+6+7+8+9二、分支結(jié)構(gòu)二、分支結(jié)構(gòu)
27、DATA SEGMENT BUF DB N DB 01H,38H,47H,60H,76H NUM DB 3 DUP(?);存結(jié)果存結(jié)果DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE, DS:DATASTART: PUSH DSSUB AX , AXPUSH AXMOV AX , DATAMOV DS , AX例例2.2.統(tǒng)計(jì)統(tǒng)計(jì)BUFBUF為首址的字符串中數(shù)字為首址的字符串中數(shù)字, ,字母及其它符號(hào)的個(gè)數(shù)。字母及其它符號(hào)的個(gè)數(shù)。數(shù)字?jǐn)?shù)字: 09, ASCII:30H39H字母字母: AZ,ASCII:41H5AHMOV CH,N ;CH串個(gè)數(shù)串
28、個(gè)數(shù)MOV BX,1MOV DX,0 ;數(shù)字?jǐn)?shù)字,字母?jìng)€(gè)數(shù)字母?jìng)€(gè)數(shù)LP:MOV AH,BUFBX ;取字符取字符CMP AH,30HJL NEXT ;9,轉(zhuǎn)轉(zhuǎn)INC DH ;數(shù)字個(gè)數(shù)數(shù)字個(gè)數(shù)+1JMP NEXTABC:CMP AH,41HJL NEXT ;Z,轉(zhuǎn)轉(zhuǎn)INC DL ;字母?jìng)€(gè)數(shù)字母?jìng)€(gè)數(shù)+1NEXT:INC BX ;地址地址+1DEC CH ;個(gè)數(shù)個(gè)數(shù)-1JNE LPMOV BUFBX,DHMOV BUFBX+1,DLMOV AH,NSUB AH,DHSUB AH,DLMOV BUFBX+2,AHRETMAIN ENDPCODE ENDSEND STARTMOV AH,1INT 21H
29、 ;1號(hào)功能調(diào)用,鍵值號(hào)功能調(diào)用,鍵值 ALCMP AL,0JE P0CMP AL,1JE P1 CMP AL,7JE P7 方法簡(jiǎn)單,但速度慢方法簡(jiǎn)單,但速度慢例例3. 3. 查詢法實(shí)現(xiàn)多分支查詢法實(shí)現(xiàn)多分支有有8 8個(gè)加工子程序,入口地址分別為:個(gè)加工子程序,入口地址分別為:P0,P1,P2,P0,P1,P2,P7P7。根據(jù)鍵盤(pán)輸入命令根據(jù)鍵盤(pán)輸入命令, ,依次轉(zhuǎn)向依次轉(zhuǎn)向8 8個(gè)子程序。個(gè)子程序。DATA SEGMENT BASE DW P0,P1,P2,P3,P4,P5,P6,P7DATA ENDS MOV AH,1INT 21H ; AL鍵值鍵值A(chǔ)ND AL,0FHMOV BX,OF
30、FSET BASE ;BX表首址表首址MOV AH,0ADD AL,AL ;形成偏移量形成偏移量ADD BX,AX ;表地址表地址JMP WORD PTRBX ;轉(zhuǎn)入口地址轉(zhuǎn)入口地址 P0LP0HP1LP1HP2LP2HP3LP3HP7LP7HBASE+2+4+6+14偏移量偏移量例例4.4.跳轉(zhuǎn)表實(shí)現(xiàn)多分支之一:根據(jù)表內(nèi)地址分支跳轉(zhuǎn)表實(shí)現(xiàn)多分支之一:根據(jù)表內(nèi)地址分支 元素在表中的地址元素在表中的地址, ,即即: :表地址表首址偏移量表地址表首址偏移量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 ;跳入表內(nèi)跳入表內(nèi),執(zhí)行轉(zhuǎn)移指令執(zhí)行轉(zhuǎn)移指令E9P0LP0HE9P1LP1HE9P2LP2HE9P7LP7HBASE+3+6+21 JMP P0JMP P1JMP P2JMP P7也可根據(jù)關(guān)鍵字跳轉(zhuǎn)表實(shí)現(xiàn)分支也可根據(jù)關(guān)鍵字跳轉(zhuǎn)表實(shí)現(xiàn)分支例例5.5.利用跳轉(zhuǎn)表實(shí)現(xiàn)多分支之二:根據(jù)表內(nèi)指令分支利用跳轉(zhuǎn)表實(shí)現(xiàn)多分支之二:根據(jù)表內(nèi)指令分支三、循環(huán)結(jié)構(gòu)程序三、循環(huán)結(jié)構(gòu)程序兩種結(jié)構(gòu):兩種結(jié)構(gòu):初始
32、化循環(huán)體修改參數(shù)控制條件出口 初始化循環(huán)體控制條件修改參數(shù)出口先執(zhí)行,后判斷先判斷,后執(zhí)行YYNN至少執(zhí)行一次循環(huán)體至少執(zhí)行一次循環(huán)體用于次數(shù)固定的程序用于次數(shù)固定的程序可能一次也不執(zhí)行循環(huán)體可能一次也不執(zhí)行循環(huán)體用于次數(shù)不固定的程序用于次數(shù)不固定的程序例例6. 十六進(jìn)制數(shù)十六進(jìn)制數(shù)ASCII將將BX中的中的16進(jìn)制數(shù)轉(zhuǎn)換為進(jìn)制數(shù)轉(zhuǎn)換為ASCII,存放到存放到BUF開(kāi)始的單元中開(kāi)始的單元中,并顯示出來(lái)。并顯示出來(lái)。 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,轉(zhuǎn)轉(zhuǎn) 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寄存器中有一個(gè)寄存器中有一個(gè)1616位二進(jìn)制數(shù)位二進(jìn)制數(shù), ,統(tǒng)計(jì)其中統(tǒng)計(jì)其中1 1的個(gè)數(shù)的個(gè)數(shù), ,并存入并存入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計(jì)算計(jì)算 第第3,4,6,8,9 3,4,6,8,9 次,按公式次,按公式FUN2=X-3FUN2=X-3計(jì)算計(jì)算DATA SEGMENT LOGRUL EQU 0011010110000000B COUNT EQU 10 BUF DB 20 DUP(?) ;采樣數(shù)據(jù)采樣數(shù)據(jù) BLOCK DB 20 DUP(?) ;存處理后的數(shù)據(jù)存處理后的數(shù)據(jù)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 編程思路編程思路:從第一個(gè)數(shù)開(kāi)始從第一個(gè)數(shù)開(kāi)始, ,順序比較相鄰兩數(shù)順序比較相鄰兩數(shù), ,若順序不對(duì)若順序不對(duì), ,則交換位置則交換位置, ,第一遍比較第一遍比較N-1N-1次次, ,最大數(shù)沉到數(shù)尾最大數(shù)沉到數(shù)尾; ;第二遍只需比第二遍只需比較較N-2N-2次次; ;共進(jìn)行共
36、進(jìn)行N-1N-1遍即可完成排序。(遍即可完成排序。(冒泡法冒泡法) 若設(shè)置交換標(biāo)志若設(shè)置交換標(biāo)志, ,可加快進(jìn)程。(書(shū)中第二種方法)可加快進(jìn)程。(書(shū)中第二種方法)STARTSTART:MOV DI,OFFSETOFFSET BUF MOV CX,DI DEC CX ;內(nèi)循環(huán)次數(shù)內(nèi)循環(huán)次數(shù)=N-1L1:MOV DX,CX ;DX=外循環(huán)次數(shù)外循環(huán)次數(shù) MOV BH,0 ;交換標(biāo)志交換標(biāo)志L2:ADD DI,2 ;指向下一個(gè)字指向下一個(gè)字 MOV AX,DI CMP AX,DI+2 ;相鄰兩數(shù)比較相鄰兩數(shù)比較 JBE CONTI CONTI ;XiXi+1,不交換不交換 XCHG AX,DI+2
37、;XiXi+1,交換交換 MOV DI,AX MOV BH,1 ;交換標(biāo)志置交換標(biāo)志置1CONTICONTI:LOOP L2 CMP BH,0 JE STOPSTOP ;未發(fā)生交換未發(fā)生交換,結(jié)束結(jié)束 MOV CX,DX MOV DI,OFFSETOFFSET BUF LOOP L1 ;CX-1,DX-1STOPSTOP: RET 例例9. 9. 多重循環(huán):給多重循環(huán):給BUFBUF開(kāi)始的字?jǐn)?shù)組按從小到大的順序排列。開(kāi)始的字?jǐn)?shù)組按從小到大的順序排列。四、子程序結(jié)構(gòu)四、子程序結(jié)構(gòu) 子程序子程序(過(guò)程過(guò)程)調(diào)用應(yīng)處理好三個(gè)問(wèn)題:調(diào)用應(yīng)處理好三個(gè)問(wèn)題:n保護(hù)斷點(diǎn):保護(hù)斷點(diǎn):CS,IPCS,IP入棧及
38、出棧(入棧及出棧(CPUCPU自動(dòng)完成)自動(dòng)完成)n保護(hù)現(xiàn)場(chǎng):保護(hù)現(xiàn)場(chǎng):子程序中用到的寄存器子程序中用到的寄存器/ /存儲(chǔ)單元需保護(hù)存儲(chǔ)單元需保護(hù)n參數(shù)傳遞:參數(shù)傳遞: 寄存器傳遞寄存器傳遞: : 速度快速度快, ,參數(shù)少參數(shù)少 存儲(chǔ)器傳遞存儲(chǔ)器傳遞 堆棧傳遞堆棧傳遞可傳遞較多參數(shù)可傳遞較多參數(shù)例例10. 完整形式的子程序完整形式的子程序; ;名稱:名稱:BCD2BINBCD2BIN; ;功能:將一個(gè)字節(jié)功能:將一個(gè)字節(jié)BCDBCD碼碼; ; 轉(zhuǎn)換成二進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù); ;使用寄存器使用寄存器:CX:CX; ;入口參數(shù):入口參數(shù): ALAL存放兩位存放兩位BCDBCD碼碼; ;出口參數(shù):出
39、口參數(shù): ALAL存放二進(jìn)制數(shù)存放二進(jìn)制數(shù); ;調(diào)用其它子程序:無(wú)調(diào)用其它子程序:無(wú)BCD2BIN PROC FARPUSH CXMOV CH,ALAND CH,0FHMOV CL,4SHR AL,CL MOV CL,10 MUL CL ADD AL,CH POP CX RETBCD2BIN ENDP通過(guò)寄存器傳遞參數(shù)通過(guò)寄存器傳遞參數(shù)DATA SEGMENTARY1 DW 100 DUP(?) ; 定義數(shù)組定義數(shù)組1 1SUM1 DW ? ; 和和ARY2 DW 100 DUP(?) ; 定義數(shù)組定義數(shù)組2 2SUM2 DW ? ; 和和DATA ENDS 例例11.11.數(shù)據(jù)段定義兩個(gè)數(shù)組
40、數(shù)據(jù)段定義兩個(gè)數(shù)組, ,分別求兩數(shù)組元素之和分別求兩數(shù)組元素之和( (不計(jì)溢出不計(jì)溢出) )。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 通過(guò)存儲(chǔ)單元傳遞參數(shù)通過(guò)存儲(chǔ)單元傳遞參數(shù)例例1
41、2. 12. 分別求兩個(gè)十進(jìn)制數(shù)組之和分別求兩個(gè)十進(jìn)制數(shù)組之和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;數(shù)組數(shù)組1 1首址首址 PUSH AXPUSH AX MOV A
42、X,SIZE ARY1 ; MOV AX,SIZE ARY1 ;數(shù)組數(shù)組1 1個(gè)數(shù)個(gè)數(shù) PUSH AXPUSH AX CALL FAR PTR PADD ; CALL FAR PTR PADD ;調(diào)子程序調(diào)子程序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,與主程序不與主程序不在一個(gè)段在一個(gè)段堆棧傳遞參數(shù)堆棧傳遞參數(shù)PADD PROC FARPUSH BX ;保護(hù)現(xiàn)場(chǎng)保護(hù)現(xiàn)場(chǎng)PUSH CXPUSH BPMOV BP,SPPUSHFMOV CX,BP+10 ;數(shù)組長(zhǎng)度數(shù)組長(zhǎng)度MOV BX,BP+12 ;數(shù)組首址數(shù)組首址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彈出斷點(diǎn)后彈出斷點(diǎn)后,再?gòu)棾鲈購(gòu)棾?個(gè)子節(jié)個(gè)子節(jié),使使SIZE,ARY作廢作廢,恢復(fù)恢復(fù)SPPSWBPCXBXIPCSSIZEARY
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 臨沂科技職業(yè)學(xué)院《精細(xì)化學(xué)工藝學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 遼河石油職業(yè)技術(shù)學(xué)院《糧油食品加工工藝學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 江西信息應(yīng)用職業(yè)技術(shù)學(xué)院《食品質(zhì)量與安全控制》2023-2024學(xué)年第一學(xué)期期末試卷
- 江蘇工程職業(yè)技術(shù)學(xué)院《女性文學(xué)鑒賞》2023-2024學(xué)年第一學(xué)期期末試卷
- 華東政法大學(xué)《健康教育》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖北黃岡應(yīng)急管理職業(yè)技術(shù)學(xué)院《外國(guó)文學(xué)專題》2023-2024學(xué)年第一學(xué)期期末試卷
- 遵義醫(yī)藥高等??茖W(xué)校《材料焊接性》2023-2024學(xué)年第一學(xué)期期末試卷
- 珠海格力職業(yè)學(xué)院《外科學(xué)Ⅱ》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶青年職業(yè)技術(shù)學(xué)院《高等天然藥物化學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 中華女子學(xué)院《運(yùn)動(dòng)控制系統(tǒng)》2023-2024學(xué)年第一學(xué)期期末試卷
- 第二章 運(yùn)營(yíng)管理戰(zhàn)略
- 《三本白皮書(shū)》全文內(nèi)容及應(yīng)知應(yīng)會(huì)知識(shí)點(diǎn)
- 專題14 思想方法專題:線段與角計(jì)算中的思想方法壓軸題四種模型全攻略(解析版)
- 醫(yī)院外來(lái)器械及植入物管理制度(4篇)
- 港口與港口工程概論
- 《念珠菌感染的治療》課件
- 門店裝修設(shè)計(jì)手冊(cè)
- 考研計(jì)算機(jī)學(xué)科專業(yè)基礎(chǔ)(408)研究生考試試卷與參考答案(2025年)
- 2024護(hù)理個(gè)人年終總結(jié)
- 海南省申論真題2020年(縣級(jí)及以上)
- 蛇年金蛇賀歲
評(píng)論
0/150
提交評(píng)論