|
介紹了一個(gè)使用x86指令集的匯編語(yǔ)言仿真實(shí)驗(yàn),實(shí)驗(yàn)具體要求和仿真結(jié)果如下:1、實(shí)驗(yàn)任務(wù)要求
2、設(shè)計(jì)思路
分析實(shí)驗(yàn)要求,我們要完成四個(gè)功能:
1)從一個(gè)已知字符串str中找到匹配字符串substr的起始位置;
2)從起始位置開始,比對(duì)兩個(gè)字符串,確定兩個(gè)字符串確實(shí)一樣,由此便可認(rèn)為已知字符串中出現(xiàn)了匹配字符串;
3)在找到匹配字符串后,設(shè)置標(biāo)志為單元found;
4)在找到匹配字符串后,把匹配位置存放到pos中。
明確需要完成的功能,然后設(shè)計(jì)算法:
1)使用‘while’循環(huán),遍歷字符串str,找到匹配字符串substr的起始位置;
2)找到起始位置后,再用LOOP循環(huán)對(duì)兩個(gè)字符串比對(duì)。循環(huán)次數(shù)是substr長(zhǎng)度再減一(第一次已經(jīng)在while中完成);
3)4)完成循環(huán)后,設(shè)置標(biāo)志位found,把匹配位置存放到pos中。
注意到str可能不包含substr,當(dāng)遍歷str沒有找到substr時(shí),程序終止。
圖片1.png (1.3 MB, 下載次數(shù): 70)
下載附件
2023-5-21 12:08 上傳
下面是程序思路流程圖:
圖片2.png (24.52 KB, 下載次數(shù): 55)
下載附件
算法流程圖
2023-5-21 12:09 上傳
3、運(yùn)行結(jié)果
設(shè)置字符串str和匹配字符串substr如圖:
圖片3.png (1.74 MB, 下載次數(shù): 64)
下載附件
字符串設(shè)置
2023-5-21 12:09 上傳
運(yùn)行結(jié)果如下:
圖片4.png (318.88 KB, 下載次數(shù): 53)
下載附件
仿真結(jié)果
2023-5-21 12:09 上傳
本實(shí)驗(yàn)的匯編語(yǔ)言源代碼見博客末尾:
- ;Finding substr from string
- DATA SEGMENT
- str DB '2020210827 Liqiwen', 00H
- substr DB 'Liqiwen', 00H
- N EQU $-substr
- found DB 00H
- pos DW ?
- DATA ENDS
- CODE SEGMENT
- ASSUME CS:CODE, DS:DATA
- START:
- MOV AX, DATA
- MOV DS, AX
-
- LEA SI, str
- XOR AX, AX
- MOV AL, [SI] ;Using AL as the container of [SI]
- XOR CX, CX
- MOV CX, N-1 ;LOOP times: N-1
- BACK:LEA DI, substr
- SHIFT:
- CMP AL, 00H ;str doesn't contain substr, program terminated.
- JE FINISH
- CMP AL, [DI]
- JE COMP ;If [SI] euqals the first chart of substr, comparation will begin.
- INC SI
- MOV AL, [SI]
- JMP SHIFT
- COMP:
- INC SI ;Shift to the next chart
- INC DI
- MOV AL, [SI]
- L1:
- CMP AL, [DI]
- JNE BACK ;If [DI] doesn't euqal [SI], clarifying substr didn't appare, instruction will go back.
- INC SI
- INC DI
- MOV AL, [SI]
- LOOP L1
-
- MOV AL, 0FFH
- MOV found, AL
- LEA BX, SI-8 ;BX deposits the beginning position.
- MOV [pos], BX
-
- FINISH:
- MOV AH, 4CH
- INT 21H
- CODE ENDS
- END START
復(fù)制代碼 |
|