日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

微机原理实验1:字符串匹配程序实验

發(fā)布時(shí)間:2023/12/2 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微机原理实验1:字符串匹配程序实验 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、實(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。