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