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 far
assume cs:prognam,ds:datarea,es:datarea
start: push ds
sub ax,ax
push ax
mov ax,datarea
mov 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,mess2
jmp disp
match: lea dx,mess1
disp: mov ah,09h
int 21h
retmain endp
prognam ends
end start
1.用編輯器建立原始檔d101-1.asm
2.用匯程式設計序masm.exe對原始檔進行彙編,產生目標檔案,再用連線程式link產生可執行檔案
3.使用除錯工具debug進行程式除錯
先用u命令反彙編,以便了解指令位址。顯示結果如下∶
將斷點設定在程式的主要部分執行前。
用g命令將程式執行到暫存器初始化後暫停,檢視當前資料段中的值,如下:
用r命令檢視當前各個暫存器中的值如下:
用e命令將資料區的字串backward,修改為forward.,如下:
其次,該實驗的核心所在是指令repz cmpsb,只要把該條指令的執行過程搞明白了,那麼整個實驗原理基本就沒什麼問題了,該條指令中repz其含義為:當cx!=0並且zf=1時,則重複執行後面緊接著的指令即cmpsb,每執行一次cx的值減1;而cmpsb指令的含義為:按位元組比較比較si指向的記憶體運算元與di指向的記憶體運算元,也就是對兩個運算元進行相減的操作,顯然該操作影響標誌位,因此其後面一般跟隨跳轉指令,在該程式中為jz match。
201409 3 字串匹配
試題編號 201409 3 試題名稱 字串匹配 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給出乙個字串和多行文字,在這些文字中找到字串出現的那些行。你的程式還需支援大小寫敏感選項 當選項開啟時,表示同乙個字母的大寫和小寫看作不同的字元 當選項關閉時,表示同乙個字母的大寫和小...
20140903 字串匹配
問題描述 試題編號 201409 3 試題名稱 字串匹配 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給出乙個字串和多行文字,在這些文字中找到字串出現的那些行。你的程式還需支援大小寫敏感選項 當選項開啟時,表示同乙個字母的大寫和小寫看作不同的字元 當選項關閉時,表示同乙個字母...
201409 3 字串匹配
問題描述 給出乙個字串和多行文字,在這些文字中找到字串出現的那些行。你的程式還需支援大小寫敏感選項 當選項開啟時,表示同乙個字母的大寫和小寫看作不同的字元 當選項關閉時,表示同乙個字母的大寫和小寫看作相同的字元。輸入格式 輸入的第一行包含乙個字串s,由大小寫英文本母組成。第二行包含乙個數字,表示大小...