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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、2022-2-12例例3-1:數(shù)據(jù)塊傳送程序:將以S1為起始地址的30個字符依次傳送到同數(shù)據(jù)段的以S2為起始地址的一片字節(jié)存儲單元里。 41H42 H33 H S130個字符S2S2-SISIDIDI方法一:數(shù)據(jù)塊是用DB定義的一個字符串S1。用寄存器間接尋址方式訪問S1和S2,即用SI表示S1中各字節(jié)的位移量,用DI表示S2中各字節(jié)的位移量。第三章第三章 匯編語言程序設計舉例匯編語言程序設計舉例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 我們也可以使用其它方法來實現(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:從鍵盤上輸入20個字符,然后以與鍵入字符的先后

6、相同的順序顯示出來。 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;顯示顯示“回車回車” MOV AH,02H INT 21H MOV DL,0DH ;顯示顯示“換行換行” INT 21H 例例3-3:在鍵盤上輸

7、入:在鍵盤上輸入20個字符,然后用與輸入個字符,然后用與輸入字符的先后相反的順序在屏幕上顯示出來。字符的先后相反的順序在屏幕上顯示出來。 MOV CX,20L2: POP DX MOV AH,02H INT 21H LOOP L2 MOV AH,4CH INT 21HCODE ENDS END START2022-2-12 一位一位 十進制(十進制(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ù)的顯示:緊湊結構:緊湊結構:

8、MOV DL,AL AND DL,0FHCMPDL, 09JNA NEXT ADD DL, 07NEXT: ADDDL, 30HMOV AH,02H INT 21H 一位一位 十六進制的顯示:十六進制的顯示: 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中一個字節(jié)的十進制數(shù)據(jù)(BCD碼)顯示出來。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中一個字節(jié)的十六進制數(shù)據(jù)顯示出來。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、影響標志位不影響標志位* 字節(jié)表格字節(jié)表格(長度不超過長度不超過256) 首地址首地址 (BX)* 需轉換代碼需轉換代碼 (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:編寫一個加密:編寫一個加密0 09 9數(shù)字序列的程序,設數(shù)字序列的程序,設0 0,1 1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9對應的密碼表為:對應的密碼表為

12、:9 9,0 0,8 8,2 2,7 7,4 4,6 6,3 3,1 1,5 5,鍵,鍵盤輸入盤輸入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:對一組

15、字節(jié)型無符號數(shù)進行比較,把最大數(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、計一批字型數(shù)據(jù)中負數(shù)的個數(shù),結果放在RUSLT變量中。2022-2-12例3-8:間接轉移 編寫一個程序,根據(jù)輸入的1-8的數(shù)字,轉到8個不同的標號處進行各自的處理。即:當輸入1時,則轉到標號L1處,輸出字母A;當輸入2時,則轉到標號L2處,輸出字母B;當輸入8時,則轉到標號L8處,輸出字母H。假設: 數(shù)字1-8由鍵盤上輸入。分析: 首先將輸入的ASCII碼轉換成對應的數(shù)字;然后根據(jù)數(shù)字,利用段內間接轉移指令 JMP WORD PTRBX ,轉移到對應的標號處執(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個字符依次傳送到同數(shù)據(jù)段的以S2為起始地址的一片字節(jié)存儲單元里。(例3-1) 完成操作后完成操作后自動修改自動修改SI、DI,使其指向串的下一個元素,使其指向串的下一個元素, 串操作方向由串操作方向由CLD和和STD指令設置:指令設置:CLD 地址遞增方向(地址遞增方向(DF=

20、0)STD地址遞減方向(地址遞減方向(DF=1) 字符串操作指令:字符串操作指令: MOVS str1, str2 ;(格式)將一個字節(jié)(格式)將一個字節(jié)/字從字從DS:SI ES:DI CMPS 、 SCAS、 LODS、 STOS 指令前要先將源串首地址指令前要先將源串首地址 DS:SI 目標串首地址目標串首地址 ES:DI2022-2-12需要先將串的長度存入需要先將串的長度存入CX寄存器寄存器每處理完一個元素自動使每處理完一個元素自動使CX-1,直到直到CX=0才結束才結束串傳送串傳送完成整個串的操作。完成整個串的操作。 REPZ 、REPNZ重復前綴重復前綴: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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論