用匯編語(yǔ)言實(shí)現(xiàn)電話本功能課程設(shè)計(jì)_第1頁(yè)
用匯編語(yǔ)言實(shí)現(xiàn)電話本功能課程設(shè)計(jì)_第2頁(yè)
用匯編語(yǔ)言實(shí)現(xiàn)電話本功能課程設(shè)計(jì)_第3頁(yè)
用匯編語(yǔ)言實(shí)現(xiàn)電話本功能課程設(shè)計(jì)_第4頁(yè)
用匯編語(yǔ)言實(shí)現(xiàn)電話本功能課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、微機(jī)原理 課 程 設(shè) 計(jì) 報(bào) 告一、 課程設(shè)計(jì)目的運(yùn)用所學(xué)的匯編語(yǔ)言寫(xiě)一個(gè)具有電話本功能的程序,達(dá)到提高動(dòng)手能力及解決問(wèn)題的能力。二、 設(shè)計(jì)要求1、 能夠存儲(chǔ)50個(gè)電話號(hào)碼,包括人名(20個(gè)字符)、電話號(hào)碼(8個(gè)字符)。2、 系統(tǒng)可以隨時(shí)接受新的人名和電話號(hào)碼。3、 具有隨時(shí)查詢(xún)號(hào)碼的功能。要求輸入人名后,在屏幕上顯示相應(yīng)的電話號(hào)碼。4、 具有刪除號(hào)碼的功能。要求輸入人名后,系統(tǒng)自動(dòng)刪除相應(yīng)的號(hào)碼。5、 運(yùn)行此系統(tǒng)后,要顯示菜單選擇的功能。三、 程序設(shè)計(jì)思想每個(gè)人的信息包括人名和號(hào)碼,人名占20個(gè)字節(jié),外加一個(gè)$字符,電話號(hào)碼占8個(gè)字節(jié),外加一個(gè)$字符,所以每個(gè)人的信息一共占30個(gè)字節(jié)。可以開(kāi)

2、辟一片連續(xù)的存儲(chǔ)區(qū),包含30*50即1500個(gè)字節(jié),即zhu db 1500 dup(0)。另外再定義四個(gè)需要輸入信息的變量,依次為:zhu1 db 21,0,21 dup(0) ;搜索姓名變量 zhu2 db 21,0,21 dup(0) ;添加姓名變量 zhu3 db 9,0,9 dup(0) ;添加號(hào)碼變量zhu4 db 21,0,21 dup(0) ;刪除姓名變量添加新的人名和號(hào)碼時(shí),可以通過(guò)10號(hào)功能調(diào)用,先將人名和號(hào)碼暫時(shí)存放在zhu2和zhu3中,然后在逐字節(jié)地復(fù)制到zhu 中,記住在人名和號(hào)碼末尾加上$字符。查詢(xún)號(hào)碼時(shí),將輸入的要查詢(xún)的人名存放在zhu1中,然后再每隔30個(gè)字節(jié)

3、與zhu中的人名逐個(gè)字符地比較,若完全相等,則將人名下面的號(hào)碼輸出,否則說(shuō)明要查詢(xún)的人名不存在。刪除時(shí),先輸入要?jiǎng)h除的人名,同查詢(xún)相似,按同樣的方法在zhu中尋找相應(yīng)的數(shù)據(jù)區(qū),若找到了,則從找到時(shí)下面一個(gè)人的信息開(kāi)始,統(tǒng)一向上移動(dòng)30個(gè)字節(jié),若沒(méi)有找到,則說(shuō)明要?jiǎng)h除的人名的信息不存在。四、 程序框圖 五、程序清單datas segment obf1 db welcome to use this phone book!$ obf2 db please choose the function buttom(1/2/3):$ obf11 db 1 for inputing$ obf16 db 2 f

4、or searching$ obf17 db 3 for deleting$ obf18 db other for exiting$ obf3 db please input a new name(within 20 words):$ obf4 db please input the number(within 8 numbers):$ obf5 db continue to input?(y/n)$ obf6 db are you sure to end the phone book?(y/n)$ obf7 db please input a name you want to search(

5、within 20 words):$ obf8 db got it,it is:$ obf9 db have not found ,it does not exit!$ obf10 db continue to search?(y/n)$ obf12 db please input the name you want to delete(within 20 words):$ obf13 db the name you want to delete does not exit!$ obf14 db success to delete!$ obf15 db continue to delete?(

6、y/n)$ zhu1 db 21,0,21 dup(0) ;搜索(查詢(xún))姓名變量 zhu2 db 21,0,21 dup(0) ;添加姓名變量 zhu3 db 9,0,9 dup(0) ;添加號(hào)碼變量 zhu4 db 21,0,21 dup(0) ;刪除姓名變量 zhu db 1500 dup(0)datas endsstacks segment dw 32 dup(0) stacks endscodes segment assume cs:codes,ds:datas,ss:stacksstart:mov ax,datas mov ds,ax mov bp,-30begin:call nex

7、tline mov dx,offset obf1 ;顯示菜單選擇界面 mov ah,9 int 21h call nextline ;調(diào)用換行函數(shù) mov dx,offset obf2 mov ah,9 int 21h call nextline mov dx,offset obf11 mov ah,9 int 21h call nextline mov dx,offset obf16 mov ah,9 int 21h call nextline mov dx,offset obf17 mov ah,9 int 21h call nextline mov dx,offset obf18 mov

8、 ah,9 int 21h call nextline mov al,0 mov ah,1 int 21h cmp al,1 ;選擇1,輸入信息 je input cmp al,2 ;選擇2,查詢(xún)信息 je search cmp al,3 ;選擇3,刪除信息 je delete jmp stop input: call nextline add bp,30 mov si,bp s2:mov byte ptr zhusi,0 ;清除zhu中最后一個(gè)人的信息后面的30 inc si ; 個(gè)字節(jié)中非0的單元 cmp si,0 jne s2 mov si,bp mov dx,offset obf3 m

9、ov ah,9 int 21h mov dx,offset zhu2 ;輸入的人名存放在zh2中 mov ah,10 int 21h mov bx,-1 s5:inc bx ;為避免zhu2中剛輸入的信息沒(méi)有完全覆 cmp byte ptr zhu2bx+2,0dh ;蓋上一次的信息,將出車(chē)符(0dh)及其后 jne s5 ;面的字節(jié)歸0 s6:mov byte ptr zhu2bx+2,0 inc bx cmp bx,20 jne s6 mov byte ptr zhu2bx+2,0dh mov cx,20 mov bx,-1 s1:inc bx ;將zh2復(fù)制到zhu中 mov dl,by

10、te ptr zhu2bx+2 mov byte ptr zhusi+bx,dl loop s1 mov byte ptr zhusi+20,$ call nextline mov dx,offset obf4 mov ah,9 int 21h mov dx,offset zhu3 mov ah,10 int 21h mov bx,-1 s7:inc bx ;為避免剛輸入的號(hào)碼沒(méi)有完全覆蓋上一次的號(hào)碼,將這次輸 cmp byte ptr zhu3bx+2,0dh ; 入的號(hào)碼的最后一位的回車(chē)符(0dh)換成$ jne s7 mov byte ptr zhu3bx+2,$ add si,21 m

11、ov cx,8 mov bx,-1 s3:inc bx mov dl,byte ptr zhu3bx+2 mov byte ptr zhusi+bx,dl loop s3 mov byte ptr zhusi+8,$ call nextline mov dx,offset obf5 mov ah,9 int 21h call nextline mov ah,1 int 21h cmp al,y je input cmp al,y je input jmp beginstop: call nextline mov dx,offset obf6 mov ah,9 int 21h mov al,0

12、mov ah,1 int 21h cmp al,y je exit cmp al,y jne begin exit:mov ax,4c00h ;退出電話本程序 int 21h search:call nextline mov dx,offset obf7 ;輸入你要搜索的名字,存放在zhu1中 mov ah,9 int 21h mov dx,offset zhu1 mov ah,10 int 21h mov bx,-1 l5:inc bx ;為避免zhu1剛輸入的信息沒(méi)有完全覆蓋上一次的信息, cmp byte ptr zhu1bx+2,0dh ;將回車(chē)符(0dh)及其后面的字節(jié)歸0 jne

13、l5 l6:mov byte ptr zhu1bx+2,0 inc bx cmp bx,20 jne l6 mov byte ptr zhu1bx+2,0dh call nextline mov cx,50 ;在zhu中搜索與zhu1相等的字符串 mov si,-30 l1:add si,30 mov bx,-1 l2:inc bx cmp bx,20 je l3 push ax mov al,byte ptr zhusi+bx mov ah,byte ptr zhu1bx+2 cmp al,ah pop ax je l2 loop l1 mov dx,offset obf9 ;沒(méi)有搜索到 m

14、ov ah,9 int 21h jmp l4 l3:mov dx,offset obf8 ;搜索到了 mov ah,9 int 21h inc bx add bx,offset zhu add bx,si mov dx,bx mov ah,9 int 21h l4:call nextline mov dx,offset obf10 ;繼續(xù)搜索嗎? mov ah,9 int 21h mov al,0 mov ah,1 int 21h cmp al,y je search cmp al,y je search jmp begin delete:call nextline mov dx,offset

15、 obf12 ;輸入你要?jiǎng)h除的名字,存放在zhu4中 mov ah,9 int 21h mov dx,offset zhu4 mov ah,10 int 21h mov bx,-1 d6:inc bx ;為避免zhu4剛輸入的信息沒(méi)有完全覆蓋上一次的信息, cmp byte ptr zhu4bx+2,0dh ;將回車(chē)符(0dh)及其后面的字節(jié)歸0 jne d6 d7:mov byte ptr zhu4bx+2,0 inc bx cmp bx,20 jne d7 mov byte ptr zhu4bx+2,0dh call nextline mov cx,50 mov si,-30 d1:add

16、 si,30 mov bx,-1 d2:inc bx cmp bx,20 je d3 push ax mov al,byte ptr zhusi+bx mov ah,byte ptr zhu4bx+2 cmp al,ah pop ax je d2 loop d1 mov dx,offset obf13 ;你要?jiǎng)h除的姓名不存在 mov ah,9 int 21h jmp d5 d3:push ax d4:mov al,byte ptr zhusi+30 mov byte ptr zhusi,al inc si cmp si,0 jne d4 pop ax sub bp,30 mov dx,offs

17、et obf14 ;刪除成功! mov ah,9 int 21h d5:call nextline mov dx,offset obf15 ;要繼續(xù)刪除嗎? mov ah,9 int 21h mov al,0 mov ah,1 int 21h cmp al,y je delete cmp al,y je delete jmp begin nextline proc ;換行函數(shù) mov dl,0ah mov ah,2 int 21h mov dl,0dh mov ah,2 int 21h retnextline endpcodes ends end start六、程序測(cè)試結(jié)果調(diào)試以上程序,生成.

18、exe文件后,運(yùn)行該.exe文件,得到如下結(jié)果:圖(1)先選擇1號(hào)功能,即輸入信息,得到:圖(2)選擇n,即返回菜單選擇界面,并選擇2號(hào)功能,即查詢(xún)信息,得到:圖(3)選擇n,返回顯示菜單選擇界面,選擇3號(hào)功能,即刪除信息,得到:圖(4)選擇n,又回到菜單顯示界面,重新查詢(xún)信息,可以得到:圖(5)選擇n,返回菜單顯示界面,按任意鍵,得到:圖(6)選擇n,結(jié)束電話本系統(tǒng)。 分析:選擇1號(hào)功能時(shí),輸入了zhu qing chun,95209638;zhang lei,85209637;qin jun,52093478一共三個(gè)人的號(hào)碼信息,選擇2號(hào)功能時(shí),查詢(xún)了zhang lei和qin jun的信

19、息,均正確,當(dāng)輸入cheng yuan xi時(shí),顯示have not found,it does not exit!表明無(wú)此人信息。當(dāng)選擇3號(hào)刪除功能時(shí),先刪除了qin jun的信息,后刪除cheng yuan xi時(shí)顯示the name you want to delete does not exit!表明電話本中原來(lái)就沒(méi)有存儲(chǔ)cheng yuan xi的信息。當(dāng)再次查詢(xún)時(shí),沒(méi)有qin jun的信息,而zhang lei和zhu qing chun的信息仍然保存。由以上測(cè)試表明此電話本系統(tǒng)能正確地實(shí)現(xiàn)添加、查詢(xún)和刪除的功能,滿(mǎn)足設(shè)計(jì)要求。七、程序調(diào)試過(guò)程中遇到的問(wèn)題即解決方法1、當(dāng)要讓顯示器

20、顯示一個(gè)字符串時(shí),一定要在字符串的結(jié)尾加上一個(gè)$字符,這個(gè)$字符非常重要,第一次,由于粗心,從字符串obf5起,后面的字符串的末尾都忘了加$,結(jié)果造成程序在運(yùn)行時(shí),跳過(guò)了很多語(yǔ)句,直接將obf5及obf5后邊的所有的提示性語(yǔ)句都輸了出來(lái)。因?yàn)橄到y(tǒng)在輸出時(shí),只有在遇到$時(shí)才結(jié)束,若沒(méi)有結(jié)束字符$,則系統(tǒng)一直將數(shù)據(jù)段的數(shù)據(jù)順序輸出,知道遇到$字符為止。2、在編寫(xiě)子函數(shù)時(shí),一定要在其結(jié)尾加上ret,然后加上結(jié)束標(biāo)志endp。在編寫(xiě)換行子函數(shù)nextline時(shí),由于在結(jié)尾沒(méi)有加ret,結(jié)果程序不能正確運(yùn)行,而且總是自動(dòng)終止了程序,加上ret后,即可正確運(yùn)行。3、在實(shí)現(xiàn)查詢(xún)功能時(shí),開(kāi)始總是出現(xiàn)有的人名的信息第一次可以查詢(xún)出來(lái),而同樣的人名在第二次、第三次查詢(xún)時(shí),則顯示不存在。經(jīng)過(guò)反復(fù)思考,發(fā)現(xiàn)在第二次輸入查詢(xún)的人名時(shí),由于所有的查詢(xún)都共用一個(gè)變量zhu1,這就導(dǎo)致第二次輸入時(shí),由于人名比第一次短,沒(méi)有完全覆蓋,造成上次的人名和這次輸入的人名相疊加了,結(jié)果和zhu中所有的人名比較時(shí),就不能查詢(xún)到第二次實(shí)際輸入的人名。同樣的問(wèn)題也出現(xiàn)在刪除函數(shù)中和添加函數(shù)(輸入函數(shù))中。為此,可將輸入、查詢(xún)和刪除中的zhu2,zhu1和zhu4中20個(gè)字符的位置中沒(méi)有使用的統(tǒng)一置0。4、在輸入時(shí),如果輸入的電話號(hào)碼沒(méi)有8位,則在查詢(xún)時(shí),出現(xiàn)上一個(gè)人的電話號(hào)碼的頭幾位出現(xiàn)在要查詢(xún)的人的號(hào)碼的后幾位中。顯

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論