微机原理实验1:字符串匹配程序实验
一、實驗目的
1.掌握分支程序的設計方法。
2.熟悉在PC機上建立、匯編、鏈接、調試和運行8086匯編程序的過程。
二、實驗內容
1.比較兩個字符串STRING1和STRING2所含的字符是否相同,若相同則顯示‘Match’,否則顯示‘No Match’。
2.修改程序,顯示所比較字符的個數。
三、程序清單
DATAREA SEGMENT ; 數據段 STRING1 DB 'Move the cursor backward.' STRING2 DB 'Move the cursor backward.'MESS1 DB 'Match.',13,10,'$' MESS2 DB 'No match.',13,10,'$' DATAREA ENDS PROGNAM SEGMENT ; 代碼段 MAIN PROC FARASSUME CS:PROGNAM,DS:DATAREA,ES:DATAREA START: PUSH DSSUB AX,AXPUSH AXMOV AX,DATAREAMOV DS,AX ; DS指向數據段MOV ES,AX ; ES指向數據段LEA SI,STRING1 ; 源數據寄存器LEA DI,STRING2 ; 目的數據寄存器CLD ; DF=0,向高地址增加MOV CX,STRING2-STRING1 ; 字符串STRING1的長度REPZ CMPSB ; 當CX!=0并且ZF=1時 重復執行后邊的指令,每執行一次CX的值減1 ;CMPSB 指令比較 SI 指向的內存操作數與 DI 指向的內存操作數,按字節比較JZ MATCH ; 比較完ZF=1則 匹配,否則 不匹配LEA DX,MESS2JMP DISP MATCH: LEA DX,MESS1 DISP: MOV AH,09HINT 21HRET MAIN ENDP PROGNAM ENDSEND START四、實驗過程
1.用編輯器建立源文件D101-1.ASM
2.用匯編程序MASM.EXE對源文件進行匯編,產生目標文件,再用連接程序LINK產生可執行文件
3.使用調試工具DEBUG進行程序調試
先用U命令反匯編,以便了解指令地址。顯示結果如下∶
將斷點設置在程序的主要部分運行前。
用G命令將程序運行到寄存器初始化后暫停,查看當前數據段中的值,如下:
用R命令查看當前各個寄存器中的值如下:
用E命令將數據區的字符串backward,修改為forward.,如下:
五、實驗結果分析
1.程序執行結果
通過E命令修改STRING2為“Move the cursor forward.”后再運行程序,得到結果為“No match.”,即兩個字符串內容不相同,如下。但使用L命令重新加載程序,結果還是“Match.”,這正說明了DEBUG調試期間所修改的數據段或代碼段的內容只是修改內存中的內容,而磁盤文件并未改變。
重新進入編輯器,通過編輯代碼修改字符串的內容,使它們互不相同,如下:
然后重新匯編、連接、執行。其運行結果應為: No match!
2.分析總結
首先,實驗指導書上所給的程序缺少2行代碼需要自己進行補齊,才可以實現本實驗的目的和該程序的功能,這兩行代碼分別是JZ MATCH和JMP DISP。其中,第一句代碼的功能是在CX寄存器遞減到值為0時,如果此時源操作地址和目的操作地址中的字節相同,那么說明兩個字符串是相同的,則跳轉到匹配標號;否則不跳轉,執行第二句JMP指令。
其次,該實驗的核心所在是指令REPZ CMPSB,只要把該條指令的執行過程搞明白了,那么整個實驗原理基本就沒什么問題了,該條指令中REPZ其含義為:當CX!=0并且ZF=1時,則重復執行后面緊接著的指令即CMPSB,每執行一次CX的值減1;而CMPSB指令的含義為:按字節比較比較SI指向的內存操作數與DI指向的內存操作數,也就是對兩個操作數進行相減的操作,顯然該操作影響標志位,因此其后面一般跟隨跳轉指令,在該程序中為JZ MATCH。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的微机原理实验1:字符串匹配程序实验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS 15 小技巧:在 iPhone
- 下一篇: 天眼在线查企业查询系统