匯編語言程序設(shè)計(jì)(37).ppt_第1頁
匯編語言程序設(shè)計(jì)(37).ppt_第2頁
匯編語言程序設(shè)計(jì)(37).ppt_第3頁
匯編語言程序設(shè)計(jì)(37).ppt_第4頁
匯編語言程序設(shè)計(jì)(37).ppt_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第四章 8086匯編語言程序設(shè)計(jì),幾個(gè)概念 8086匯編語言的語句 8086匯編中的偽指令 8086匯編中的運(yùn)算符 匯編語言程序設(shè)計(jì) 宏定義與宏調(diào)用 匯編語言程序設(shè)計(jì)實(shí)例,幾個(gè)概念,匯編語言 匯編語言源程序 匯編 匯編程序,41 8086匯編語言的語句,匯編語言由指令性語句和指令性語句組成 一、指令性語句格式 標(biāo)號: 操作碼 操作數(shù)1, 操作數(shù)2 ;注釋 二、指示性語句格式 標(biāo)識符(名字) 指示符(偽指令) 表達(dá)式 三、有關(guān)屬性 存儲器操作數(shù)的屬性有三種:段值、段內(nèi)偏移量和類型。,42 8086匯編中的偽指令,一、 符號定義語句 1、等值語句 格式:符號名 EQU 表達(dá)式 例: PORT EQU 1234 BUFF EQU PORT58 MEM EQU DS:BP20H COUNT EQU CX ABC EQU AAA,2、等號語句 格式: NUM34 NUM341,二、變量定義語句 格式: 符號名 DB/DW/DD 表達(dá)式,1、定義一組數(shù)據(jù) 例1: BUFF DW 1234H, 0ABCDH, 8EH DW 79DH, 7B6AH 2、定義一串字符 例2: STR DB Welcome ! 3、定義保留存儲單元 例3: SUM DW ? , ?,4、復(fù)制操作 復(fù)制操作符DUP(Duplication)可預(yù)置重復(fù)的數(shù)值 例4: ALL_ZERO DB 0,0,0,0,0 用復(fù)制操作可改為: ALL_ZERO DB 5 DUP(0) 5、將已定義的地址存入內(nèi)存單元 例5: LIT DD CYC CYC: MOV AX , BX,三、段定義語句 1、 段定義語句格式: 段名 SEGMENT 定位類型 組合類型 類別 段名 ENDS 只需要掌握 段名 SEGMENT 段名 ENDS,2、段假設(shè)語句 ASSUME 段寄存器名:段名, 3、 ORG偽指令與地址計(jì)數(shù)器 $ ORG偽指令格式: ORG 4、PUBLIC和 EXTRN偽指令,四、過程定義語句 過程名 PROC NEAR/FAR RET 過程名 ENDP,43 8086匯編中的運(yùn)算符,一、常用運(yùn)算符 1、算術(shù)運(yùn)算符 (加)、(減)、*(乘)、/(除)、MOD(求余)。 2、邏輯運(yùn)算符 AND、OR、XOR、NOT,3、關(guān)系運(yùn)算符 EQ(相等)、NE(不等、) LT(小于)、GT(大于)、 LE(小于等于)、GE(大于等于)。 例: MOV DL , 10H LT 16 例: AND AX , 555 GT 222,二、 常用的操作符 4、分析操作符 1)SEG操作符 例: MOV AX , SEG BUFF 2)OFFSET操作符 例:MOV BX , OFFSET BUFF,3)TYPE操作符 對于變量有3種: 1 字節(jié)型; 2 字型; 4 雙字型; 對于標(biāo)號有2種:1 NEAR(段內(nèi)), 2 FAR(段間)。 例: BUFF DB 20H MOV BX , OFFSET BUFF MOV BX,01,4)LENGTH操作符 5)SIZE操作符 SIZETYPELENGTH 例:BUFF DB 10DIP(?) MOV CX,LENGTH BUF MOV CX,10 MOV CX,SIZE BUF MOV CX,20,5、綜合運(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ù)段 VAL1 DB 12H , 8EH ;定義變量 DATA ENDS ;數(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é)束 END START ;源程序結(jié)束,一、匯編語言程序設(shè)計(jì)基本步驟 分析問題 繪制流程圖編寫程序檢查和調(diào)試 二、匯編語言程序的基本結(jié)構(gòu),1、順序結(jié)構(gòu),2、分支結(jié)構(gòu),3、循環(huán)結(jié)構(gòu),4、子程序,Call proc1,ret,45 宏定義與宏調(diào)用,1、宏定義 宏指令名 MACRO ENDM 2、宏調(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 SEGMENT XX DB 12 YY DB 34 ZZ DW ? MULTY XX,YY,ZZ ;宏調(diào)用,實(shí)參替代虛參 ,4.6匯編語言程序設(shè)計(jì)實(shí)例,1、算術(shù)運(yùn)算例題 例1:在偏移首地址為ARRAY的內(nèi)存儲區(qū),有100個(gè)字型數(shù)據(jù),要求將數(shù)組的每個(gè)元素加1,試編寫匯編語言程序完成該要求。 DATA SEGMENT ARRAY DW 100 DUP (?) ;定義100個(gè)字型隨機(jī)數(shù) DATA EDNS CODE SEGMENT ASSUME DS:DATA,CS:CODE ,LEA BX , ARRAY ;設(shè)數(shù)組首地址指針 MOV CX , LENGTH ARRAY ;數(shù)組數(shù)據(jù)長 AA1: INC WORD PTR BX , 1 ;指定為字型數(shù)加1 ADD BX , 2 ;移動地址指針 LOOP AA1 ;循環(huán)操作 完整程序請參看教材,例2: 有兩個(gè)無符號字節(jié)型數(shù)組,設(shè)數(shù)組元素個(gè)數(shù)相等,編程將數(shù)組中的對應(yīng)元素相加,結(jié)果存入另一內(nèi)存區(qū)。 DATA SEGMENT M1 DB 20 DUP (?) M2 DB 20 DUP(?) M3 DW 20 DUP (0) DATA ENDS CODE SEGMENT , LEA SI , M1 ; 設(shè)數(shù)組1的地址指針 LEA DI , M2 ;設(shè)數(shù)組2的地址指針 LEA BX , M3 ;設(shè)結(jié)果區(qū)的地址指針 MOV CX , 20 AA1: MOV AL , SI ADD AL , DI MOV BX ,AL ADC BYTE PTRBX+1 ,0 ;存結(jié)果的進(jìn)位 INC SI INC DI ADD BX , 2 LOOP AA1 ,2、邏輯處理題 例1:將寄存器AL中高、低4位交換 MOV AL , 0ABH MOV CL , 4 ROL AL , CL ;移出位補(bǔ)充移空位4次 ,例2:將AX中的內(nèi)容按相反順序存入BX中 MOV AL , 1234H MOV CX , 16 AA1: SHL AX , 1 ;移出的位進(jìn)到CF RCR BX , 1 ;AX中移出的位進(jìn)入BX LOOP AA1 ,3、代碼轉(zhuǎn)換例題 例1:編程將以$結(jié)束的字符串中的小寫字母改為大寫字母。 DATA SEGMENT STR DB heLLo,eveRyboBY !,$ DATA ENDS ,LEA BX , STR A1: MOV AL ,BX CMP AL , $ ;是$符,則結(jié)束 JE DONE CMP AL , a JB NEXT ;低于,則為大寫字母 CMP AL ,z JA NEXT ;高于,則不是字母 SUB AL , 20H ;將小寫字母改為大寫 MOV BX , AL NEXT: INC BX JMP A1 ,例2:十六進(jìn)制數(shù)到十進(jìn)制數(shù)的轉(zhuǎn)換。 除10取余法, MOV AX , 4B6CH MOV CX , 0 ;統(tǒng)計(jì)除法次數(shù) MOV BX , 10 ; A1: MOV DX , 0 ;被除數(shù)擴(kuò)展為32位 DIV BX PUSH DX ;將轉(zhuǎn)換好的數(shù)存入堆棧 INC CX OR AX , AX ;轉(zhuǎn)換直到商為0 JNZ A1 ,4、表格處理題 例1:編程序?qū)?9的數(shù)字轉(zhuǎn)換成所要求的密碼 明碼和密碼的映射關(guān)系為: 0 1 2 3 4 5 6 7 8 9 2 7 1 6 9 0 8 3 4 5 DATA SEGMENT TABLE DB 2,7, 1, 6 ,9, 0, 8, 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)換為密碼 MOV DI , AL INC SI INC DI LOOP A1 ,6、按數(shù)據(jù)大小排序題 例1:編程序?qū)崿F(xiàn),從一串帶符號字型數(shù)據(jù)中找出最大值。 DATA SEGMENT BLOCK DW 762EH,6A8BH,664AH,0B945H,85DH COUNT EQU ($BLOCK)2 DATA ENDS ,LEA SI , BLOCK MOV CX , COUNT MOV AX , SI ;取第1個(gè)數(shù) DEC CX ;準(zhǔn)備與下個(gè)數(shù)比較 AA1: ADD SI , 2 CMP AX , SI ;與下個(gè)數(shù)比較 JG AA2 ;前一個(gè)數(shù)大,則保留下次再比 MOV AX , SI ;否則,取后一個(gè)數(shù)下次再比 AA2: LOOP AA1 ,4.7 DOS功能調(diào)用與子程序設(shè)計(jì),調(diào)用過程為: DOS功能調(diào)用號送AH寄存器; 如果需要,按要求給定輸入?yún)?shù)(有的不需要輸入?yún)?shù)); 寫入中斷指令I(lǐng)NT 21H。 調(diào)用結(jié)束,按功能使用其輸出參數(shù)。,1、單字符輸入1號 功 能:從鍵盤輸入1個(gè)字符 輸入?yún)?shù):無 輸出參數(shù):AL=ASCII碼,2、單字符輸出2號 功 能:在屏幕上顯示1個(gè)字符(ASCII碼) 輸入?yún)?shù):DL=ASCII碼 輸出參數(shù):無 例:從鍵盤輸入兩個(gè)1位十進(jìn)制數(shù),求兩數(shù)之和并在屏幕上顯示結(jié)果。,MOV AH , 1 ;DOS調(diào)用輸入第一個(gè)數(shù) INT 21H MOV BL , AL ;保存輸入的第一個(gè)數(shù) MOV AH , 1 INT 21H ADD AL , BL ;兩個(gè)ASCII碼相加 AAA ; 調(diào)整加法結(jié)果為非壓縮BCD數(shù) MOV DL , AL ADD DL , 30H ;加法結(jié)果轉(zhuǎn)換成ASCII碼 MOV AH , 2 ;DOS調(diào)用輸出到屏幕 INT 21H,3、多字符輸入0AH 功 能: 多個(gè)字符輸入到緩沖區(qū) 輸入?yún)?shù):DS:DX=輸入緩沖區(qū)首地址 輸出參數(shù):DS:DX=輸入字符串所在緩沖區(qū) 地址,4、多字符輸出9號 功 能:多個(gè)字符輸出到屏幕顯示 輸入?yún)?shù):DS:DX=輸出字符緩沖區(qū)首地址 輸出參數(shù):無 例1:在屏幕上顯示一串字符 。 DATA SEGMENT BUFF DB How do you 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 21H ,5、單字符輸入/輸出6號 6號DOS功能實(shí)際上是1號和2號功能的組合,當(dāng)DL寄存器的內(nèi)容為0FFH時(shí),6號功能與1號功能同,即從鍵盤輸入單個(gè)字符;而當(dāng)DL寄存器中放入字符的ASCII值,它就是2號功能。,6、過程終止4CH號 該調(diào)用的功能是結(jié)束當(dāng)前程序,并返回調(diào)用它的程序,如在DEBUG狀態(tài)下運(yùn)行,則返回DEBUG;如果在DOS下運(yùn)行,則返回DOS。在匯編語言程序結(jié)束處放上MOV AX ,4C00H和INT 21H兩條指令,以利于程序執(zhí)行完畢,返回操作系統(tǒng)控制。,7、子程序設(shè)計(jì) 設(shè)計(jì)子程序要提供以下信息: 子程序的功能 調(diào)用時(shí)需要的輸入?yún)?shù)(入口參數(shù)) 調(diào)用后提供的輸出參數(shù)(出口參數(shù)) 子程序中所使用的寄存器(以便調(diào)用前做必要的保護(hù)),例1:編寫一子程序,完成一個(gè)2位十六進(jìn) 制數(shù)到對應(yīng)的ASCII碼的轉(zhuǎn)換。 子程序名: CONHA 功 能: 將2位十六進(jìn)制數(shù)轉(zhuǎn)換成對應(yīng) 的ASCCII碼 輸入?yún)?shù): AL待轉(zhuǎn)換的數(shù) 輸出參數(shù): BX轉(zhuǎn)換好的ASCII碼 使用寄存器:AL、AH、BX、CL,CONHA PROC FAR MOV AH , AL ;保存待轉(zhuǎn)換的數(shù) AND AL , 0FH ;處理十六進(jìn)制數(shù)低位 CMP AL , 0AH ;是16進(jìn)制中的字母嗎? JB ASC1 ;否,轉(zhuǎn)移 ADD AL , 07 ;是,先加7 ASC1: ADD AL , 30H ;轉(zhuǎn)換為ASCII碼 MOV BL , AL ;保存轉(zhuǎn)換好的低位 MOV CL , 4 ;移位控制 SHR AH , CL ;將原數(shù)右移,處理高位 CMP AH , 0AH ;是16進(jìn)制中的字母嗎? JB ASC2 ;否,轉(zhuǎn)移 ADD AH , 07 ;是,先加7 ASC2: ADD AH, 30H MOV BH , AH ;保存轉(zhuǎn)換好的高位 RET CONHA ENDP,例2:用子程序調(diào)用形式,編寫從鍵盤輸入4位16進(jìn)制數(shù)的程序。 子程序名: ZH 功 能:檢查鍵盤輸入錯(cuò)誤,將鍵入值轉(zhuǎn)換成16進(jìn)制數(shù) 輸入?yún)?shù):AL 輸出參數(shù):AL 使用寄存器:BX,CX,CODE SEGMENT ASSUME CS :CODE START: MOV CX , 4 ;輸入4次 MOV DX , CX ; 轉(zhuǎn)換4次 MOV BX , 0 ;用BX保存輸入數(shù) RE1: MOV AH , 1 ; 從鍵盤輸入

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論