91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

匯編語言中如何實現字符串操作

發布時間:2021-11-29 09:22:34 來源:億速云 閱讀:417 作者:柒染 欄目:開發技術

這篇文章將為大家詳細講解有關匯編語言中如何實現字符串操作,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

軟件:emu8086

語言:匯編語言(Assembly)

注意:小編列出了字符串匹配和字符串輸入顯示的代碼,全部代碼為小編獨自一人編寫,會有瑕疵,謹慎使用。

1.字符串匹配設計

1.1設計要求:

要求掌握提示信息的設置及讀取鍵入信息的方法。設計程序,從鍵盤輸入兩個字符串進行比較,如相同,則顯示“MATCH”,否則顯示“NO MATCH”。

1.2設計思路:

DOS功能調用輸入兩個字符串,通過CMPSB指令一個字節一個字節比較字符串,相同輸出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          ;數據段和堆棧段初始化
              
        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

1.4程序運行結果及分析:

主要是學會CMPSB指令的使用,清零DF標志使DI,SI遞增,然后實現一個字節一個字節的比較。

匯編語言中如何實現字符串操作

圖7 字符串匹配設計結果

2.字符串輸入及顯示設計

2.1設計要求:

要求掌握字符和數據的顯示方法。設計程序,接收鍵盤鍵入字符串,包括字符和數字,并在終端顯示。設計要求:有鍵入和結束提示信息,如在鍵入字符串之前提示:INPUT STRING,THE END FLAG IS $。要求統計鍵入字符串中數字(0-9)的個數和字符的個數,分行顯示。

2.2設計思路:

判斷在0~9范圍內DI累加,判斷在a~z和A~Z范圍內SI累加,然后將SI和DI即字母個數和數字個數分別轉十進制輸出。

匯編語言中如何實現字符串操作

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                 ;數據段堆棧段初始化
        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

2.4程序運行結果及分析:

當輸入字母或數字個數大于10之后統計輸出比較麻煩,這里使用了除以10循環并存入堆棧再依次輸出的方法實現輸出。

匯編語言中如何實現字符串操作

圖8 字符串輸入及顯示設計結果

關于匯編語言中如何實現字符串操作就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泰和县| 武山县| 绍兴县| 丰顺县| 林口县| 洞口县| 巧家县| 封丘县| 彰武县| 兴城市| 清徐县| 宁南县| 新田县| 布尔津县| 赤壁市| 即墨市| 塔河县| 堆龙德庆县| 海安县| 若尔盖县| 元江| 新河县| 南陵县| 利川市| 新兴县| 宜都市| 沁阳市| 崇明县| 双辽市| 固原市| 和静县| 彭州市| 开平市| 五大连池市| 金平| 偃师市| 望江县| 甘德县| 大方县| 漳州市| 津南区|