匯編語言系列之匯編實(shí)現(xiàn)字符串操作
軟件:emu8086
語言:匯編語言(Assembly)
注意:本文列出了字符串匹配和字符串輸入顯示的代碼,全部代碼為博主獨(dú)自一人編寫,會(huì)有瑕疵,謹(jǐn)慎使用。
1.字符串匹配設(shè)計(jì)
1.1設(shè)計(jì)要求:
要求掌握提示信息的設(shè)置及讀取鍵入信息的方法。設(shè)計(jì)程序,從鍵盤輸入兩個(gè)字符串進(jìn)行比較,如相同,則顯示“MATCH”,否則顯示“NO MATCH”。
1.2設(shè)計(jì)思路:
DOS功能調(diào)用輸入兩個(gè)字符串,通過CMPSB指令一個(gè)字節(jié)一個(gè)字節(jié)比較字符串,相同輸出MATCH,不同輸出NO MATCH。
1.3程序清單:
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 ;數(shù)據(jù)段和堆棧段初始化 LEA DX,pkey MOV AH,9 INT 21H ;DOS功能調(diào)用,輸出字符串 LEA DX,BUFF1 MOV AH,0AH INT 21H ;輸入第一個(gè)字符串到BUFF1緩沖區(qū) LEA DX,qkey MOV AH,9 INT 21H LEA DX,BUFF2 MOV AH,0AH INT 21H ;輸入第二個(gè)字符串到BUFF2緩沖區(qū) LEA SI,BUFF1 ;將第一個(gè)字符串給SI LEA DI,BUFF2 ;將第二個(gè)字符串給DI MOV CX,53 ;給計(jì)數(shù)器值 CLD ;清方向標(biāo)準(zhǔn)DF REPZ CMPSB ;一個(gè)字節(jié)一個(gè)字節(jié)比較字符串,SI和DI遞增 JZ MATCH ;全部字節(jié)都相等輸出MATCH LEA DX,tkey MOV AH,9 INT 21H ;不等輸出NO MATCH JMP START MATCH: LEA DX,skey MOV AH,9 INT 21H ;DOS功能調(diào)用,輸出MATCH JMP START CODE ENDS END START
1.4程序運(yùn)行結(jié)果及分析:
主要是學(xué)會(huì)CMPSB指令的使用,清零DF標(biāo)志使DI,SI遞增,然后實(shí)現(xiàn)一個(gè)字節(jié)一個(gè)字節(jié)的比較。
圖7 字符串匹配設(shè)計(jì)結(jié)果
2.字符串輸入及顯示設(shè)計(jì)
2.1設(shè)計(jì)要求:
要求掌握字符和數(shù)據(jù)的顯示方法。設(shè)計(jì)程序,接收鍵盤鍵入字符串,包括字符和數(shù)字,并在終端顯示。設(shè)計(jì)要求:有鍵入和結(jié)束提示信息,如在鍵入字符串之前提示:INPUT STRING,THE END FLAG IS $。要求統(tǒng)計(jì)鍵入字符串中數(shù)字(0-9)的個(gè)數(shù)和字符的個(gè)數(shù),分行顯示。
2.2設(shè)計(jì)思路:
判斷在0~9范圍內(nèi)DI累加,判斷在a~z和A~Z范圍內(nèi)SI累加,然后將SI和DI即字母個(gè)數(shù)和數(shù)字個(gè)數(shù)分別轉(zhuǎn)十進(jìn)制輸出。
2.3程序清單:
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 ;數(shù)據(jù)段堆棧段初始化 LEA DX,pkey MOV AH,9 INT 21H ;DOS功能調(diào)用,輸出字符串 MOV DX,'$' MOV AH,2 INT 21H ;DOS功能調(diào)用,輸出$ MOV DX,3AH MOV AH,2 INT 21H ;DOS功能調(diào)用,輸出: MOV DX,0DH MOV AH,2 INT 21H ;DOS功能調(diào)用,歸位 MOV DX,0AH MOV AH,2 INT 21H ;DOS功能調(diào)用,換行 MOV SI,0 MOV DI,0 ;清零,SI存放字母個(gè)數(shù),DI存放數(shù)字個(gè)數(shù) 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 ;將字母個(gè)數(shù)給AX(十六進(jìn)制轉(zhuǎn)十進(jìn)制) LP1: MOV DX,0 DIV CX ;AX表示的32位數(shù)除以10,商放在AX,余數(shù)放在DX PUSH DX ;將余數(shù)壓入棧 INC BX CMP AX,0 ;商不為0就繼續(xù)除10 JNZ LP1 LEA DX,skey MOV AH,9 INT 21H ;DOS功能調(diào)用,輸出字符串 LLP1: POP DX ;DX中數(shù)據(jù)依次出棧并顯示 ADD DX,30H MOV AH,2 INT 21H ;DOS功能調(diào)用,輸出字母個(gè)數(shù) DEC BX JNZ LLP1 MOV BX,0 MOV AX,DI ;將數(shù)字個(gè)數(shù)給AX(十六進(jìn)制轉(zhuǎn)十進(jìn)制) LP2: MOV DX,0 DIV CX ;AX表示的32位數(shù)除以10,商放在AX,余數(shù)放在DX PUSH DX ;將余數(shù)壓入棧 INC BX CMP AX,0 JNZ LP2 ;商不為0就繼續(xù)除10 LEA DX,tkey MOV AH,9 INT 21H ;DOS功能調(diào)用,輸出字符串 LLP2: POP DX ;DX中數(shù)據(jù)依次出棧并顯示 ADD DX,30H MOV AH,2 INT 21H ;DOS功能調(diào)用,輸出數(shù)字個(gè)數(shù) DEC BX JNZ LLP2 JMP START CODE ENDS END START
2.4程序運(yùn)行結(jié)果及分析:
當(dāng)輸入字母或數(shù)字個(gè)數(shù)大于10之后統(tǒng)計(jì)輸出比較麻煩,這里使用了除以10循環(huán)并存入堆棧再依次輸出的方法實(shí)現(xiàn)輸出。
圖8 字符串輸入及顯示設(shè)計(jì)結(jié)果
到此這篇關(guān)于匯編語言系列之匯編實(shí)現(xiàn)字符串操作的文章就介紹到這了,更多相關(guān)匯編字符串操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
匯編 函數(shù)調(diào)用的實(shí)現(xiàn)
這篇文章主要介紹了匯編 函數(shù)調(diào)用的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02匯編語言系列之匯編實(shí)現(xiàn)簡單數(shù)學(xué)運(yùn)算
這篇文章主要介紹了匯編語言系列之匯編實(shí)現(xiàn)簡單數(shù)學(xué)運(yùn)算的思路詳解,本文給大家列出了兩種算術(shù)運(yùn)算的代碼,設(shè)計(jì)思路給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11匯編程序設(shè)計(jì)之DOSBox模擬環(huán)境配置
最近在學(xué)習(xí)匯編語言設(shè)計(jì),然后上網(wǎng)找關(guān)于匯編程序的編譯軟件,不負(fù)有心人,終于找到了我需要的軟件,值得慶幸2023-08-08匯編語言實(shí)現(xiàn)在指定字符串中搜索字符''A''的方法
這篇文章主要介紹了匯編語言實(shí)現(xiàn)在指定字符串中搜索字符'A'的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02純匯編實(shí)現(xiàn)打飛機(jī)小游戲的示例代碼
這篇文章主要介紹了純匯編實(shí)現(xiàn)打飛機(jī)小游戲的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01匯編語言XOR指令:對(duì)兩個(gè)操作數(shù)進(jìn)行邏輯(按位)異或操作(推薦)
匯編語言(assembly language)是一種用于電子計(jì)算機(jī)、微處理器、微控制器或其他可編程器件的低級(jí)語言,亦稱為符號(hào)語言。這篇文章主要介紹了匯編語言XOR指令:對(duì)兩個(gè)操作數(shù)進(jìn)行邏輯(按位)異或操作,需要的朋友可以參考下2020-01-01