您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關匯編語言中如何實現字符串操作,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
軟件:emu8086
語言:匯編語言(Assembly)
注意:小編列出了字符串匹配和字符串輸入顯示的代碼,全部代碼為小編獨自一人編寫,會有瑕疵,謹慎使用。
要求掌握提示信息的設置及讀取鍵入信息的方法。設計程序,從鍵盤輸入兩個字符串進行比較,如相同,則顯示“MATCH”,否則顯示“NO MATCH”。
DOS功能調用輸入兩個字符串,通過CMPSB指令一個字節一個字節比較字符串,相同輸出MATCH,不同輸出NO MATCH。
DATA SEGMENT pkey DB 0DH,0AH, 'please input str1 end by enter:','$' qkey DB 0DH,0AH,'please input str2 end by enter:','$' skey DB 0DH,0AH,'MATCH','$' tkey DB 0DH,0AH,'NO MATCH','$' BUFF1 DB 101,0,101 DUP(0) BUFF2 DB 101,0,101 DUP(0)` DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX ;數據段和堆棧段初始化 LEA DX,pkey MOV AH,9 INT 21H ;DOS功能調用,輸出字符串 LEA DX,BUFF1 MOV AH,0AH INT 21H ;輸入第一個字符串到BUFF1緩沖區 LEA DX,qkey MOV AH,9 INT 21H LEA DX,BUFF2 MOV AH,0AH INT 21H ;輸入第二個字符串到BUFF2緩沖區 LEA SI,BUFF1 ;將第一個字符串給SI LEA DI,BUFF2 ;將第二個字符串給DI MOV CX,53 ;給計數器值 CLD ;清方向標準DF REPZ CMPSB ;一個字節一個字節比較字符串,SI和DI遞增 JZ MATCH ;全部字節都相等輸出MATCH LEA DX,tkey MOV AH,9 INT 21H ;不等輸出NO MATCH JMP START MATCH: LEA DX,skey MOV AH,9 INT 21H ;DOS功能調用,輸出MATCH JMP START CODE ENDS END START
主要是學會CMPSB指令的使用,清零DF標志使DI,SI遞增,然后實現一個字節一個字節的比較。
圖7 字符串匹配設計結果
要求掌握字符和數據的顯示方法。設計程序,接收鍵盤鍵入字符串,包括字符和數字,并在終端顯示。設計要求:有鍵入和結束提示信息,如在鍵入字符串之前提示:INPUT STRING,THE END FLAG IS $。要求統計鍵入字符串中數字(0-9)的個數和字符的個數,分行顯示。
判斷在0~9范圍內DI累加,判斷在a~z和A~Z范圍內SI累加,然后將SI和DI即字母個數和數字個數分別轉十進制輸出。
DATA SEGMENT pkey DB 0dh,0ah,"input string,the end flag is $" skey DB 0dh,0ah,'abc length is:','$' tkey DB 0dh,0ah,'num length is:','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX ;數據段堆棧段初始化 LEA DX,pkey MOV AH,9 INT 21H ;DOS功能調用,輸出字符串 MOV DX,'$' MOV AH,2 INT 21H ;DOS功能調用,輸出$ MOV DX,3AH MOV AH,2 INT 21H ;DOS功能調用,輸出: MOV DX,0DH MOV AH,2 INT 21H ;DOS功能調用,歸位 MOV DX,0AH MOV AH,2 INT 21H ;DOS功能調用,換行 MOV SI,0 MOV DI,0 ;清零,SI存放字母個數,DI存放數字個數 INPUT: MOV AH,1 INT 21H CMP AL,'$' JZ INEND CMP AL,'z' JA INPUT CMP AL,'a' JAE ABC1 ;輸入為a~f,SI加1 CMP AL,'Z' JA INPUT CMP AL,'A' JAE ABC1 ;輸入為A~F,SI也加1 CMP AL,'9' JA INPUT CMP AL,'0' JAE NUM1 ;輸入為0~9,DI加1 JMP INPUT ABC1: INC SI JMP INPUT NUM1: INC DI JMP INPUT INEND: MOV BX,0 MOV CX,10 MOV AX,SI ;將字母個數給AX(十六進制轉十進制) LP1: MOV DX,0 DIV CX ;AX表示的32位數除以10,商放在AX,余數放在DX PUSH DX ;將余數壓入棧 INC BX CMP AX,0 ;商不為0就繼續除10 JNZ LP1 LEA DX,skey MOV AH,9 INT 21H ;DOS功能調用,輸出字符串 LLP1: POP DX ;DX中數據依次出棧并顯示 ADD DX,30H MOV AH,2 INT 21H ;DOS功能調用,輸出字母個數 DEC BX JNZ LLP1 MOV BX,0 MOV AX,DI ;將數字個數給AX(十六進制轉十進制) LP2: MOV DX,0 DIV CX ;AX表示的32位數除以10,商放在AX,余數放在DX PUSH DX ;將余數壓入棧 INC BX CMP AX,0 JNZ LP2 ;商不為0就繼續除10 LEA DX,tkey MOV AH,9 INT 21H ;DOS功能調用,輸出字符串 LLP2: POP DX ;DX中數據依次出棧并顯示 ADD DX,30H MOV AH,2 INT 21H ;DOS功能調用,輸出數字個數 DEC BX JNZ LLP2 JMP START CODE ENDS END START
當輸入字母或數字個數大于10之后統計輸出比較麻煩,這里使用了除以10循環并存入堆棧再依次輸出的方法實現輸出。
圖8 字符串輸入及顯示設計結果
關于匯編語言中如何實現字符串操作就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。