第3章_匯編語(yǔ)言程序設(shè)計(jì)-例_第1頁(yè)
第3章_匯編語(yǔ)言程序設(shè)計(jì)-例_第2頁(yè)
第3章_匯編語(yǔ)言程序設(shè)計(jì)-例_第3頁(yè)
第3章_匯編語(yǔ)言程序設(shè)計(jì)-例_第4頁(yè)
第3章_匯編語(yǔ)言程序設(shè)計(jì)-例_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、2022-2-12例例3-1:數(shù)據(jù)塊傳送程序:將以S1為起始地址的30個(gè)字符依次傳送到同數(shù)據(jù)段的以S2為起始地址的一片字節(jié)存儲(chǔ)單元里。 41H42 H33 H S130個(gè)字符S2S2-SISIDIDI方法一:數(shù)據(jù)塊是用DB定義的一個(gè)字符串S1。用寄存器間接尋址方式訪問(wèn)S1和S2,即用SI表示S1中各字節(jié)的位移量,用DI表示S2中各字節(jié)的位移量。第三章第三章 匯編語(yǔ)言程序設(shè)計(jì)舉例匯編語(yǔ)言程序設(shè)計(jì)舉例2022-2-12程序如下:程序如下:DATA SEGMENTDATA SEGMENTS1 DB S1 DB ABCDEFGHIJKLMNOPQRSTUVWABCDEFGHIJKLMNOPQRSTUV

2、W DB DB XYZ0123XYZ0123S2 DB 30 DUPS2 DB 30 DUP(?)(?)DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENT ASSUME DS ASSUME DS:DATADATA,CSCS:CODECODESTARTSTART:MOV AXMOV AX,DATADATA MOV DS MOV DS,AXAX MOV SI MOV SI,OFFSET S1OFFSET S1 MOV DI MOV DI,OFFSET S2OFFSET S2 MOV CX MOV CX,3030NEXTNEXT: MOV AL MOV AL,SIS

3、I MOV DI MOV DI,ALAL INC SI INC SI INC DI INC DI LOOP NEXT LOOP NEXT MOV AH MOV AH,4CH4CH INT 21H INT 21HCODE ENDSCODE ENDS END START END START2022-2-12DATA SEGMENTDATA SEGMENTS1 DB S1 DB A,A,B,B,C,C,D,D,EE DB DB FGHIJKLMNOPQRSTUVWXYZFGHIJKLMNOPQRSTUVWXYZ DB DB 0,0,1,1,2,2,33S2 DB 30 DUPS2 DB 30 DUP

4、(?)(?)DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENT ASSUME DS ASSUME DS:DATADATA,CSCS:CODECODESTARTSTART: MOV AX MOV AX,DATADATA MOV DSMOV DS,AX AX 我們也可以使用其它方法來(lái)實(shí)現(xiàn),如用變址尋址方式等。程序如下: MOV SI MOV SI,0 0 MOV CX,30 MOV CX,30NEXTNEXT: MOV AL MOV AL,S1SIS1SI MOV MOV S2SIS2SI,ALAL INC SI INC SI LOOP NEXT LOOP NEX

5、T MOV AH MOV AH,4CH4CH INT 21H INT 21HCODE ENDSCODE ENDS END START END START2022-2-12 DSEG SEGMENT DATA DB 20 DUP(?)(?) DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG GO: MOV AX,DSEG MOV DS,AX MOV CX,20 MOV SI,OFFSET DATA L01: MOV AH,01H INT 21H MOV SI,AL INC SI LOOP L01 例例3-2:從鍵盤(pán)上輸入20個(gè)字符,然后以與鍵入字符的先后

6、相同的順序顯示出來(lái)。 MOV CX,20 MOV SI,OFFSET DATAL02: MOV DL,SI MOV AH,02H INT 21H INC SI LOOP L02 MOV AH,4CH INT 21HCSEG ENDS END GO 2022-2-12 CODE SEGMENT ASSUME CS:CODE START: MOV CX,20 L1:MOV AH,01H INT 21H PUSH AX LOOP L1 MOV DL,0AH;顯示顯示“回車(chē)回車(chē)” MOV AH,02H INT 21H MOV DL,0DH ;顯示顯示“換行換行” INT 21H 例例3-3:在鍵盤(pán)上輸

7、入:在鍵盤(pán)上輸入20個(gè)字符,然后用與輸入個(gè)字符,然后用與輸入字符的先后相反的順序在屏幕上顯示出來(lái)。字符的先后相反的順序在屏幕上顯示出來(lái)。 MOV CX,20L2: POP DX MOV AH,02H INT 21H LOOP L2 MOV AH,4CH INT 21HCODE ENDS END START2022-2-12 一位一位 十進(jìn)制(十進(jìn)制(BCD碼)的顯示:碼)的顯示: MOV DL,AL AND DL,0FH ADD DL, 30H MOV AH,02H INT 21H 例例3-4:數(shù)據(jù)的顯示:數(shù)據(jù)的顯示:2022-2-12例例3-4:數(shù)據(jù)的顯示:數(shù)據(jù)的顯示:緊湊結(jié)構(gòu):緊湊結(jié)構(gòu):

8、MOV DL,AL AND DL,0FHCMPDL, 09JNA NEXT ADD DL, 07NEXT: ADDDL, 30HMOV AH,02H INT 21H 一位一位 十六進(jìn)制的顯示:十六進(jìn)制的顯示: MOV DL,AL AND DL,0FHCMPDL, 09JNA NEXT ADD DL, 37HJMP DISPNEXT: ADDDL, 30HDISP: MOV AH,02H INT 21H 2022-2-12 CODE SEGMENT ASSUME CS:CODE START: MOV DL,BL MOV CL,04 SHR DL, CL ;高高4位移至低位移至低4位位 ADD D

9、L, 30H MOV AH,02H INT 21H ;高高4位顯示位顯示 例例3-4:數(shù)據(jù)的顯示:數(shù)據(jù)的顯示: 1、把BL中一個(gè)字節(jié)的十進(jìn)制數(shù)據(jù)(BCD碼)顯示出來(lái)。MOV DL, BL AND DL,0FHOR DL, 30HMOV AH,02H INT 21H ;低低4位顯示位顯示MOV AH,4CH INT 21HCODE ENDS END START2022-2-12CODE SEGMENTASSUME CS:CODESTART: MOV DL,BL MOV CL,04SHR DL, CL ;高高4位移至低位移至低4位位CMPDL, 09JNA NEXT ADD DL, 07NEXT:

10、 ADDDL, 30HMOV AH,02H INT 21H ;高高4位顯示位顯示 例例3-4:數(shù)據(jù)的顯示:數(shù)據(jù)的顯示: 2、把BL中一個(gè)字節(jié)的十六進(jìn)制數(shù)據(jù)顯示出來(lái)。MOV DL, BL CMPDL, 0AHJB NEXT2 ADD DL, 07NEXT2:ADDDL, 30HMOV AH,02H INT 21H ;低低4位顯示位顯示MOV AH,4CH INT 21HCODE ENDS END START2022-2-12例:例:MOV BX, OFFSET TABLE ; (BX)=0040H MOV AL, 3 XLAT TABLE 指令執(zhí)行后指令執(zhí)行后 (AL)=33H注意注意: * 不

11、影響標(biāo)志位不影響標(biāo)志位* 字節(jié)表格字節(jié)表格(長(zhǎng)度不超過(guò)長(zhǎng)度不超過(guò)256) 首地址首地址 (BX)* 需轉(zhuǎn)換代碼需轉(zhuǎn)換代碼 (AL)(BX) 30 H F004031 H F0041 (AL) = 3 32 H F0042 33 H F0043TABLE(DS)=F000H換碼指令:換碼指令:XLAT 或或XLAT OPR執(zhí)行操作:執(zhí)行操作:(AL) ( (BX) + (AL) )2022-2-12例例3-53-5:編寫(xiě)一個(gè)加密:編寫(xiě)一個(gè)加密0 09 9數(shù)字序列的程序,設(shè)數(shù)字序列的程序,設(shè)0 0,1 1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9對(duì)應(yīng)的密碼表為:對(duì)應(yīng)的密碼表為

12、:9 9,0 0,8 8,2 2,7 7,4 4,6 6,3 3,1 1,5 5,鍵,鍵盤(pán)輸入盤(pán)輸入08082525,顯示輸出,顯示輸出91918484。DATA SEGMENTDATA SEGMENTSTRDAT DB 0STRDAT DB 0,8 8,2 2,5 5TABLE DB 9082746315TABLE DB 9082746315DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENT ASSUME CS:CODE ,DS:DATAASSUME CS:CODE ,DS:DATAGOGO: MOV AX MOV AX,DATADATA MOV DS MO

13、V DS,AXAX MOV ES MOV ES,AXAX LEA SI LEA SI,STRDATSTRDAT LEA BX LEA BX,TABLETABLEMOV CX, 4MOV CX, 4L1L1:MOV ALMOV AL,SISIXLAT XLAT MOV DL, ALMOV DL, ALMOV AH, 02MOV AH, 02INT 21HINT 21HLOOP L1LOOP L1MOV AH, 4CHMOV AH, 4CHINT 21HINT 21HCODE ENDSCODE ENDSEND GOEND GO2022-2-12DATA SEGMENTBUFFER DB 00H,1

14、2H,3BH,43H,60H,0CH COUNT EQU $-OFFSET BUFFER ($-BUFFER)MAX DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV SI,OFFSET BUFFER MOV CX,COUNT MOV AL,SI INC SI DEC CX ;比較COUNT-1次COMPA: CMP AL,SI ;找大數(shù) JA NEXT MOV AL,SINEXT: INC SI LOOP COMPA ;比較完否? MOV MAX, AL ;保存大數(shù)例3-6:對(duì)一組

15、字節(jié)型無(wú)符號(hào)數(shù)進(jìn)行比較,把最大數(shù)顯示在屏幕上。2022-2-12 MOV BL,AL MOV DL,AL MOV CL,4 SHR DL,CL CMP DL,0AH JB L1 ADD DL,7L1: ADD DL,30H MOV AH,02H INT 21H ;顯示高位 MOV DL,BL ;將大數(shù)送至DL AND DL,0FH ;截取其低4位 CMP DL,0AH JB L2 ADD DL,7L2: ADD DL,30H MOV AH,02H INT 21H ;顯示低位 MOV AH,4CH INT 21HCODE ENDS END START 2022-2-12DATA SEGMENTB

16、UFFER DW 00H,12H,3BH,0A3H,94H,0CH COUNT DW $-OFFSET BUFFER ;或($-BUFFER)/2RUSLT DB 0DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX LEA SI,BUFFER MOVBL, 0 MOV CX,COUNT SHRCX,1COMPA: MOV AL,SI ;找大數(shù) OR AL, 0 JNS NEXT INCBLNEXT: INC SI LOOP COMPA ;比較完否? MOV RUSLT, BL ;保存大數(shù)例3-7:統(tǒng)

17、計(jì)一批字型數(shù)據(jù)中負(fù)數(shù)的個(gè)數(shù),結(jié)果放在RUSLT變量中。2022-2-12例3-8:間接轉(zhuǎn)移 編寫(xiě)一個(gè)程序,根據(jù)輸入的1-8的數(shù)字,轉(zhuǎn)到8個(gè)不同的標(biāo)號(hào)處進(jìn)行各自的處理。即:當(dāng)輸入1時(shí),則轉(zhuǎn)到標(biāo)號(hào)L1處,輸出字母A;當(dāng)輸入2時(shí),則轉(zhuǎn)到標(biāo)號(hào)L2處,輸出字母B;當(dāng)輸入8時(shí),則轉(zhuǎn)到標(biāo)號(hào)L8處,輸出字母H。假設(shè): 數(shù)字1-8由鍵盤(pán)上輸入。分析: 首先將輸入的ASCII碼轉(zhuǎn)換成對(duì)應(yīng)的數(shù)字;然后根據(jù)數(shù)字,利用段內(nèi)間接轉(zhuǎn)移指令 JMP WORD PTRBX ,轉(zhuǎn)移到對(duì)應(yīng)的標(biāo)號(hào)處執(zhí)行。2022-2-12DATA SEGMENTTABLE1 DW L1,L2,L3,L4,L5,L6,L7,L8DATA ENDS C

18、ODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AH,01H INT 21H SUB AL, 30H CMP AL,8 JA L10 DEC AL SHL AL,1 MOV AH,0 MOV SI, AX LEA BX,TABLE1 JMP WORD PTRBXSI .JMP TABLE1SI2022-2-12 L1: MOV DL,A JMP L9 L2: MOV DL,B JMP L9 L3: MOV DL,C JMP L9 L4: MOV DL,D JMP L9 L5: MOV DL,E JMP L9

19、L6: MOV DL,F JMP L9L7: MOV DL, G JMP L9 L8: MOV DL, H JMP L9L9: MOV AH, 02H INT 21HL10: MOV AH, 4CH INT 21HCODE ENDS END START2022-2-12例例3-9:數(shù)據(jù)塊傳送程序:將以S1為起始地址的30個(gè)字符依次傳送到同數(shù)據(jù)段的以S2為起始地址的一片字節(jié)存儲(chǔ)單元里。(例3-1) 完成操作后完成操作后自動(dòng)修改自動(dòng)修改SI、DI,使其指向串的下一個(gè)元素,使其指向串的下一個(gè)元素, 串操作方向由串操作方向由CLD和和STD指令設(shè)置:指令設(shè)置:CLD 地址遞增方向(地址遞增方向(DF=

20、0)STD地址遞減方向(地址遞減方向(DF=1) 字符串操作指令:字符串操作指令: MOVS str1, str2 ;(格式)將一個(gè)字節(jié)(格式)將一個(gè)字節(jié)/字從字從DS:SI ES:DI CMPS 、 SCAS、 LODS、 STOS 指令前要先將源串首地址指令前要先將源串首地址 DS:SI 目標(biāo)串首地址目標(biāo)串首地址 ES:DI2022-2-12需要先將串的長(zhǎng)度存入需要先將串的長(zhǎng)度存入CX寄存器寄存器每處理完一個(gè)元素自動(dòng)使每處理完一個(gè)元素自動(dòng)使CX-1,直到直到CX=0才結(jié)束才結(jié)束串傳送串傳送完成整個(gè)串的操作。完成整個(gè)串的操作。 REPZ 、REPNZ重復(fù)前綴重復(fù)前綴:REP MOVS S1,

21、 S2REP MOVSB / MOVSW2022-2-12DATA SEGMENTDATA SEGMENTS1 DB S1 DB ABCDEFGHIJKLMNOPQRSTUVWABCDEFGHIJKLMNOPQRSTUVWCOUNT EQU $-S1COUNT EQU $-S1S2 DB COUNT DUPS2 DB COUNT DUP(?)(?)DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA ASSUME CS:CODE,DS:DATA,ES:DATASTARTSTART:MOV AXMOV AX,DATADATA MOV DS MOV DS,AXAXMOV ES, AXMOV ES, AX MOV SI MOV SI,OFFSET S1OFFSET S1 MOV DI MOV DI,OFFSET S2OFFSET S2 MOV CX MOV CX,COUNTCOUNTCLDCLDNEXTNEXT: MOVS S2,S1 MOVS S2,S1 LOOP NEXT LOOP NEXT

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論