介紹了一個使用x86指令集的匯編語言仿真實驗,實驗具體要求和仿真結果如下:1、實驗任務要求
2、設計思路
分析實驗要求,我們要完成四個功能:
1)從一個已知字符串str中找到匹配字符串substr的起始位置;
2)從起始位置開始,比對兩個字符串,確定兩個字符串確實一樣,由此便可認為已知字符串中出現了匹配字符串;
3)在找到匹配字符串后,設置標志為單元found;
4)在找到匹配字符串后,把匹配位置存放到pos中。
明確需要完成的功能,然后設計算法:
1)使用‘while’循環,遍歷字符串str,找到匹配字符串substr的起始位置;
2)找到起始位置后,再用LOOP循環對兩個字符串比對。循環次數是substr長度再減一(第一次已經在while中完成);
3)4)完成循環后,設置標志位found,把匹配位置存放到pos中。
注意到str可能不包含substr,當遍歷str沒有找到substr時,程序終止。
圖片1.png (1.3 MB, 下載次數: 70)
下載附件
2023-5-21 12:08 上傳
下面是程序思路流程圖:
圖片2.png (24.52 KB, 下載次數: 55)
下載附件
算法流程圖
2023-5-21 12:09 上傳
3、運行結果
設置字符串str和匹配字符串substr如圖:
圖片3.png (1.74 MB, 下載次數: 64)
下載附件
字符串設置
2023-5-21 12:09 上傳
運行結果如下:
圖片4.png (318.88 KB, 下載次數: 53)
下載附件
仿真結果
2023-5-21 12:09 上傳
本實驗的匯編語言源代碼見博客末尾:
- ;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
復制代碼 |