版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第4章 8086匯編語言程序設(shè)計(jì)n幾個(gè)概念n8086匯編語言的語句n8086匯編中的偽指令n8086匯編中的運(yùn)算符n匯編語言程序設(shè)計(jì)n宏定義與宏調(diào)用n匯編語言程序設(shè)計(jì)實(shí)例幾個(gè)概念n匯編語言n匯編語言源程序n匯編n匯編程序41 8086匯編語言的語句 匯編語言由指令性語句和指示性語句組成n一、指令性語句格式 標(biāo)號: 操作碼 操作數(shù)1, 操作數(shù)2 ;注釋n二、指示性語句格式標(biāo)識符(名字) 指示符(偽指令) 表達(dá)式 n三、標(biāo)號和名字(變量)的有關(guān)屬性 屬性有三種:段值、段內(nèi)偏移量和類型。42 8086匯編中的偽指令n一、 符號定義語句 n1、等值語句 格式:符號名 EQU 表達(dá)式例: PORT EQ
2、U 1234 BUFF EQU PORT58 MEM EQU DS:BP20H COUNT EQU CX ABC EQU AAA2、等號語句 格式: NUM34 NUM341n二、變量定義語句 格式: 符號名 DB/DW/DD 表達(dá)式n1、定義一組數(shù)據(jù) 例1: BUFF DW 1234H, 0ABCDH, 8EH DW 79DH, 7B6AHn2、定義一串字符例2: STR DB Welcome !n3、定義保留存儲(chǔ)單元 例3: SUM DW ? , ?n4、復(fù)制操作復(fù)制操作符DUP(Duplication)可預(yù)置重復(fù)的數(shù)值例4: ALL_ZERO DB 0,0,0,0,0用復(fù)制操作可改為:A
3、LL_ZERO DB 5 DUP(0)n5、將已定義的地址存入內(nèi)存單元 例5: LIT DD CYC CYC: MOV AX , BXn三、段定義語句n1、 段定義語句格式:段名 SEGMENT 段名 ENDSn2、段假設(shè)語句ASSUME 段寄存器名:段名,n3、 ORG偽指令與地址計(jì)數(shù)器 $ORG偽指令格式: ORG n四、過程定義語句 過程名 PROC NEAR/FAR RET 過程名 ENDP43 8086匯編中的運(yùn)算符 一、常用運(yùn)算符1、算術(shù)運(yùn)算符 (加)、(減)、(加)、(減)、*(乘)、(乘)、/(除)(除)、MOD(求余)。求余)。2、邏輯運(yùn)算符 AND、OR、XOR、NOT 3
4、、關(guān)系運(yùn)算符 EQ(相等)、NE(不等)、 LT(小于)、GT(大于)、 LE(小于等于)、GE(大于等于)。 例:例: MOV DL , 10H LT 16 例:例: AND AX , 555 GT 222 4、常用解析運(yùn)算符1)SEG操作符例:例: MOV AX , SEG BUFF2)OFFSET操作符 例:例:MOV BX , OFFSET BUFF3)TYPE操作符 對于變量有對于變量有3種:種: 1 字節(jié)型;字節(jié)型; 2 字型;字型; 4 雙字型雙字型; 對于標(biāo)號有對于標(biāo)號有2種:種:1 NEAR(段內(nèi))段內(nèi)), 2 FAR(段間)。段間)。4)LENGTH操作符5)SIZE操作符
5、 SIZETYPELENGTH 例:例:BUF DW 10DUP(?) MOV CX,LENGTH BUF MOV CX,10 MOV CX,SIZE BUF MOV CX,205、綜合運(yùn)算符(合成操作符)1)PTR運(yùn)算符格式: 類型 PTR 表達(dá)式例:例:INC WORD PTR BX 2)THIS操作符格式: THIS 類型(或?qū)傩?例:例:FIRST EQU THIS BYTE SECOND DW 100 DUP (?) 44匯編語言程序設(shè)計(jì) 常用的匯編語言程序框架:常用的匯編語言程序框架: DATA SEGMENT;定義數(shù)據(jù)段定義數(shù)據(jù)段VAL1 DB 12H , 8EH ;定義變量定義
6、變量 DATA ENDS ;數(shù)據(jù)段結(jié)束數(shù)據(jù)段結(jié)束 CODE SEGMENT;定義代碼段定義代碼段 ASSUME DS:DATA , CS: CODE;段屬性說明段屬性說明 START: MOV AX , DATA;初始化初始化DS MOV DS , AX MOV AX , 4C00H;返回返回DOS INT 21H CODE ENDS ;代碼段結(jié)束代碼段結(jié)束 END START ;源程序結(jié)束源程序結(jié)束一、匯編語言程序設(shè)計(jì)基本步驟 分析問題 繪制流程圖編寫程序檢查和調(diào)試 二、匯編語言程序的基本結(jié)構(gòu)1、順序結(jié)構(gòu)n2、分支結(jié)構(gòu) 3、循環(huán)結(jié)構(gòu) n4、子程序 Call proc1ret45 宏定義與宏調(diào)
7、用 1、宏定義宏指令名 MACRO ENDM2、宏調(diào)用宏指令名 實(shí)元表例例:MULTY MACRO OPR1,OPR2,RESULT;宏定義宏定義 PUSH AX MOV AL, OPR1 MOV AH, OPR2 IMUL OPR2 MOV RESULT , AX POP AX ENDM DATA SEGMENTXX DB 12YY DB 34 ZZDW ? MULTY XX,YY,ZZ ;宏調(diào)用,實(shí)參替代虛參宏調(diào)用,實(shí)參替代虛參 4.6匯編語言程序設(shè)計(jì)實(shí)例 1、算術(shù)運(yùn)算例題 例1:在偏移首地址為ARRAY的內(nèi)存儲(chǔ)區(qū),有100個(gè)字型數(shù)據(jù),要求將數(shù)組的每個(gè)元素加1,試編寫匯編語言程序完成該要求
8、。 DATA SEGMENTARRAY DW 100 DUP (?) ;定義100個(gè)字型隨機(jī)數(shù)DATA EDNSCODE SEGMENTASSUME DS:DATA,CS:CODE LEA BX , ARRAY ;設(shè)數(shù)組首地址指針設(shè)數(shù)組首地址指針 MOV CX , LENGTH ARRAY ;數(shù)組數(shù)據(jù)長數(shù)組數(shù)據(jù)長AA1: INC WORD PTR BX ;指定為字型數(shù)加指定為字型數(shù)加1 ADD BX , 2 ;移動(dòng)地址指針移動(dòng)地址指針 LOOP AA1 ;循環(huán)操作循環(huán)操作例2: 有兩個(gè)無符號字節(jié)型數(shù)組,設(shè)數(shù)組元素個(gè)數(shù)相等,編程將數(shù)組中的對應(yīng)元素相加,結(jié)果存入另一內(nèi)存區(qū)。 DATA SEGMEN
9、TM1 DB 20 DUP (?)M2 DB 20 DUP(?)M3 DW 20 DUP (0)DATA ENDSCODE SEGMENT LEA SI , M1 ; 設(shè)數(shù)組設(shè)數(shù)組1的地址指針的地址指針 LEA DI , M2 ;設(shè)數(shù)組設(shè)數(shù)組2的地址指針的地址指針 LEA BX , M3 ;設(shè)結(jié)果區(qū)的地址指針設(shè)結(jié)果區(qū)的地址指針 MOV CX , 20AA1: MOV AL , SI ADD AL , DI MOV BX ,AL ADC BYTE PTRBX+1 ,0 ;存結(jié)果的進(jìn)位存結(jié)果的進(jìn)位 INC SI INC DI ADD BX , 2 LOOP AA1 2、位操作類例題、位操作類例題例
10、例1:將寄存器:將寄存器AL中高、低中高、低4位交換位交換MOV AL , 0ABH MOV CL , 4 ROL AL , CL ;移出位補(bǔ)充移空位移出位補(bǔ)充移空位4次次例例2:將:將AX中的內(nèi)容按相反順序存入中的內(nèi)容按相反順序存入BX中中 MOV AX , 1234H MOV CX , 16AA1: SHL AX , 1 ;移出的位進(jìn)到移出的位進(jìn)到CF RCR BX , 1 ;AX中移出的位進(jìn)入中移出的位進(jìn)入BX LOOP AA13、跳轉(zhuǎn)類例題、跳轉(zhuǎn)類例題 例例1:編程將以:編程將以$結(jié)束的字符串中的小寫字母結(jié)束的字符串中的小寫字母改為大寫字母。改為大寫字母。DATA SEGMENTSTR
11、 DB heLLo,eveRyboBY !,$DATA ENDS LEA BX , STRA1: MOV AL ,BX CMP AL , $ ;是是$符,則結(jié)束符,則結(jié)束 JE DONE CMP AL , a JB NEXT ;低于,則為大寫字母低于,則為大寫字母 CMP AL ,z JA NEXT ;高于,則不是字母高于,則不是字母 SUB AL , 20H ;將小寫字母改為大寫將小寫字母改為大寫 MOV BX , ALNEXT: INC BX JMP A1例例2:十六進(jìn)制數(shù)到十進(jìn)制數(shù)的轉(zhuǎn)換。:十六進(jìn)制數(shù)到十進(jìn)制數(shù)的轉(zhuǎn)換。(除(除10取余法)取余法) MOV AX , 4B6CH MOV C
12、X , 0 ;統(tǒng)計(jì)除法次數(shù)統(tǒng)計(jì)除法次數(shù) MOV BX , 10 ;A1: MOV DX , 0 ;被除數(shù)擴(kuò)展為被除數(shù)擴(kuò)展為32位位 DIV BX PUSH DX ;將轉(zhuǎn)換好的數(shù)存入堆棧將轉(zhuǎn)換好的數(shù)存入堆棧 INC CX OR AX , AX ;轉(zhuǎn)換直到商為轉(zhuǎn)換直到商為0 JNZ A1 n4、表格處理題、表格處理題例例1:編程序?qū)ⅲ壕幊绦驅(qū)?9的數(shù)字轉(zhuǎn)換成所要求的密碼的數(shù)字轉(zhuǎn)換成所要求的密碼 明碼和密碼的映射關(guān)系為:明碼和密碼的映射關(guān)系為:0 1 2 3 4 5 6 7 8 92 7 1 6 9 0 8 3 4 5DATA SEGMENTTABLE DB 2, 7, 1, 6 ,9, 0, 8,
13、 3, 4, 5 ;密碼表密碼表VAL1 DB 8, 4, 1, 7, 5 ; 被加密碼(明碼)被加密碼(明碼)VAL2 DB 5 DUP(?)DATA ENDS MOV SI , OFFSET VAL1 MOV DI , OFFSET VAL2 MOV CX , 5 LEA BX , TABLE ;表格首地址指針表格首地址指針A1: MOV AL ,SI ;取明碼取明碼 XLAT ;轉(zhuǎn)換為密碼轉(zhuǎn)換為密碼 MOV DI , AL INC SI INC DI LOOP A1 5、按數(shù)據(jù)大小排序題、按數(shù)據(jù)大小排序題 例例1:編程序?qū)崿F(xiàn),從一串帶符號:編程序?qū)崿F(xiàn),從一串帶符號字型數(shù)據(jù)中找出最大值。字
14、型數(shù)據(jù)中找出最大值。DATA SEGMENTBLOCK DW 762EH,6A8BH,664AH,0B945H,85DHCOUNT EQU ($BLOCK)2DATA ENDS LEA SI , BLOCK MOV CX , COUNT MOV AX , SI ;取第取第1個(gè)數(shù)個(gè)數(shù) DEC CX ;準(zhǔn)備與下個(gè)數(shù)比較準(zhǔn)備與下個(gè)數(shù)比較AA1: ADD SI , 2 CMP AX , SI ;與下個(gè)數(shù)比較與下個(gè)數(shù)比較 JG AA2 ;前一個(gè)數(shù)大,則保留下次再前一個(gè)數(shù)大,則保留下次再比比 MOV AX , SI ;否則,取后一個(gè)數(shù)下次再比否則,取后一個(gè)數(shù)下次再比 AA2: LOOP AA1 4.7 D
15、OS功能調(diào)用與子程序設(shè)計(jì)功能調(diào)用與子程序設(shè)計(jì) 調(diào)用過程為:調(diào)用過程為: DOS功能調(diào)用號送功能調(diào)用號送AH寄存器;寄存器; 如果需要,按要求給定輸入?yún)?shù)(有的不如果需要,按要求給定輸入?yún)?shù)(有的不需要輸入?yún)?shù));需要輸入?yún)?shù)); 寫入中斷指令寫入中斷指令I(lǐng)NT 21H。調(diào)用結(jié)束,按功能使用其輸出參數(shù)。調(diào)用結(jié)束,按功能使用其輸出參數(shù)。1、單字符輸入、單字符輸入1號號 功功 能:從鍵盤輸入能:從鍵盤輸入1個(gè)字符個(gè)字符輸入?yún)?shù):無輸入?yún)?shù):無 輸出參數(shù):輸出參數(shù):AL=ASCII碼碼2、單字符輸出、單字符輸出2號號 功能:在屏幕上顯示功能:在屏幕上顯示1個(gè)字符(個(gè)字符(ASCII碼)碼) 輸入?yún)?shù):
16、輸入?yún)?shù):DL=ASCII碼碼 輸出參數(shù):無輸出參數(shù):無 MOV AH , 1 ;DOS調(diào)用輸入第一個(gè)數(shù)調(diào)用輸入第一個(gè)數(shù) INT 21H MOV BL , AL ;保存輸入的第一個(gè)數(shù)保存輸入的第一個(gè)數(shù) MOV AH , 1 INT 21H ADD AL , BL ;兩個(gè)兩個(gè)ASCII碼相加碼相加 AAA ; 調(diào)整加法結(jié)果為非壓縮調(diào)整加法結(jié)果為非壓縮BCD數(shù)數(shù) MOV DL , AL ADD DL , 30H ;加法結(jié)果轉(zhuǎn)換成加法結(jié)果轉(zhuǎn)換成ASCII碼碼 MOV AH , 2 ;DOS調(diào)用輸出到屏幕調(diào)用輸出到屏幕 INT 21H例例:從鍵盤輸入兩個(gè)從鍵盤輸入兩個(gè)1位十進(jìn)制數(shù),求兩數(shù)之和并在位十進(jìn)
17、制數(shù),求兩數(shù)之和并在屏幕上顯示結(jié)果。屏幕上顯示結(jié)果。 3、多字符輸入、多字符輸入0AH 功功 能:能: 多個(gè)字符輸入到緩沖區(qū)多個(gè)字符輸入到緩沖區(qū) 輸入?yún)?shù):輸入?yún)?shù):DS:DX=輸入緩沖區(qū)首地址輸入緩沖區(qū)首地址 輸出參數(shù):輸出參數(shù):DS:DX=輸入字符串所在緩沖區(qū)地址輸入字符串所在緩沖區(qū)地址 4、多字符輸出、多字符輸出9號號 功功 能:多個(gè)字符輸出到屏幕顯示能:多個(gè)字符輸出到屏幕顯示 輸入?yún)?shù):輸入?yún)?shù):DS:DX=輸出字符緩沖區(qū)首地址輸出字符緩沖區(qū)首地址 輸出參數(shù):無輸出參數(shù):無 例例1:在屏幕上顯示一串字符:在屏幕上顯示一串字符 DATA SEGMENT B U F F D B H o w
18、 d o y o u do?,0DH,0AH,$ DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX , DATA MOV DS , AX LEA DX , BUFF MOV AH , 9 INT 21H5、單字符輸入、單字符輸入/輸出輸出6號號 6號號DOS功能實(shí)際上是功能實(shí)際上是1號和號和2號功能號功能的組合,當(dāng)?shù)慕M合,當(dāng)DL寄存器的內(nèi)容為寄存器的內(nèi)容為0FFH時(shí)時(shí),6號功能與號功能與1號功能同,即從鍵盤輸入號功能同,即從鍵盤輸入單個(gè)字符;而當(dāng)單個(gè)字符;而當(dāng)DL寄存器中放入字符的寄存器中放入字符的ASCII值,它就是值,它
19、就是2號功能。號功能。 6、過程終止、過程終止4CH號號 該調(diào)用的功能是結(jié)束當(dāng)前程序,并返回該調(diào)用的功能是結(jié)束當(dāng)前程序,并返回調(diào)用它的程序,如在調(diào)用它的程序,如在DEBUG狀態(tài)下運(yùn)行,狀態(tài)下運(yùn)行,則返回則返回DEBUG;如果在;如果在DOS下運(yùn)行,則返下運(yùn)行,則返回回DOS。在匯編語言程序結(jié)束處放上在匯編語言程序結(jié)束處放上MOV AX ,4C00H和和INT 21H兩條指令,以利于程兩條指令,以利于程序執(zhí)行完畢,返回操作系統(tǒng)控制。序執(zhí)行完畢,返回操作系統(tǒng)控制。 7、子程序設(shè)計(jì)、子程序設(shè)計(jì) 設(shè)計(jì)子程序要提供以下信息:設(shè)計(jì)子程序要提供以下信息:子程序的功能子程序的功能調(diào)用時(shí)需要的輸入?yún)?shù)(入口參數(shù)
20、)調(diào)用時(shí)需要的輸入?yún)?shù)(入口參數(shù))調(diào)用后提供的輸出參數(shù)(出口參數(shù))調(diào)用后提供的輸出參數(shù)(出口參數(shù))子程序中所使用的寄存器(以便調(diào)用前做子程序中所使用的寄存器(以便調(diào)用前做必要的保護(hù))必要的保護(hù))例例1:編寫一子程序,完成一個(gè):編寫一子程序,完成一個(gè)2位十六進(jìn)位十六進(jìn) 制數(shù)到對應(yīng)的制數(shù)到對應(yīng)的ASCII碼的轉(zhuǎn)換。碼的轉(zhuǎn)換。 子程序名子程序名: CONHA 功功 能:能: 將將2位十六進(jìn)制數(shù)轉(zhuǎn)換成對應(yīng)位十六進(jìn)制數(shù)轉(zhuǎn)換成對應(yīng) 的的ASCCII碼碼輸入?yún)?shù):輸入?yún)?shù): AL待轉(zhuǎn)換的數(shù)待轉(zhuǎn)換的數(shù)輸出參數(shù):輸出參數(shù): BX轉(zhuǎn)換好的轉(zhuǎn)換好的ASCII碼碼使用寄存器:使用寄存器:AL、AH、BX、CL CON
21、HA PROC FARMOV AH , AL ;保存待轉(zhuǎn)換的數(shù)保存待轉(zhuǎn)換的數(shù)AND AL , 0FH ;處理十六進(jìn)制數(shù)低位處理十六進(jìn)制數(shù)低位CMP AL , 0AH ;是是16進(jìn)制中的字母嗎?進(jìn)制中的字母嗎?JB ASC1 ;否,轉(zhuǎn)移否,轉(zhuǎn)移ADD AL , 07 ;是,先加是,先加7ASC1: ADD AL , 30H ;轉(zhuǎn)換為轉(zhuǎn)換為ASCII碼碼 MOV BL , AL ;保存轉(zhuǎn)換好的低位保存轉(zhuǎn)換好的低位 MOV CL , 4 ;移位控制移位控制 SHR AH , CL ;將原數(shù)右移將原數(shù)右移,處理高位處理高位CMP AH , 0AH ;是是16進(jìn)制中的字母嗎?進(jìn)制中的字母嗎?JB ASC2 ;否,轉(zhuǎn)移否,轉(zhuǎn)移ADD AH , 07 ;是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度全款購入進(jìn)口跑車合同范本3篇
- 二零二五年度企業(yè)與個(gè)人投資回報(bào)對賭協(xié)議3篇
- 二零二五年度員工試用期工作內(nèi)容調(diào)整及考核標(biāo)準(zhǔn)協(xié)議3篇
- 二零二五年度電商平臺(tái)商家會(huì)員返利合同3篇
- 2025年度新能源汽車產(chǎn)業(yè)鏈投資基金合作協(xié)議3篇
- 2025年度公司股東內(nèi)部關(guān)于企業(yè)并購整合的專項(xiàng)協(xié)議3篇
- 2025年度綠色能源項(xiàng)目分?jǐn)倕f(xié)議3篇
- 二零二五年度新能源汽車充電樁建設(shè)投資入股合同3篇
- 2025通信銷售合同
- 2025年農(nóng)村土地永久轉(zhuǎn)讓與農(nóng)村電商合作框架合同3篇
- 心理健康對學(xué)生學(xué)習(xí)成績的影響
- 食品生產(chǎn)企業(yè)員工食品安全培訓(xùn)
- 小學(xué)數(shù)學(xué)綜合素質(zhì)評價(jià)專項(xiàng)方案
- 模型預(yù)測控制現(xiàn)狀與挑戰(zhàn)
- MOOC創(chuàng)新創(chuàng)業(yè)與管理基礎(chǔ)(東南大學(xué))
- 中職課程思政說課比賽 課件
- 臺(tái)大歐麗娟《紅樓夢》公開課全部筆記
- 公司報(bào)價(jià)管理辦法
- 農(nóng)貿(mào)市場安全生產(chǎn)風(fēng)險(xiǎn)分級管控和隱患排查治理雙體系方案全套資料2019-2020完整實(shí)施方案模板
- 人教版 五年級上冊道德與法治全冊各課及單元同步檢測試卷【含答案】
- T梁濕接縫及橫隔梁施工方案
評論
0/150
提交評論