匯編程序?qū)嶒?yàn)4_查找電話號(hào)碼_第1頁
匯編程序?qū)嶒?yàn)4_查找電話號(hào)碼_第2頁
匯編程序?qū)嶒?yàn)4_查找電話號(hào)碼_第3頁
匯編程序?qū)嶒?yàn)4_查找電話號(hào)碼_第4頁
匯編程序?qū)嶒?yàn)4_查找電話號(hào)碼_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)用匯編語言設(shè)計(jì)與編寫子程序二、實(shí)驗(yàn)要求(1) 要求程序建立一個(gè)可存放50項(xiàng)的電話號(hào)碼表,每項(xiàng)包括人名(20個(gè)字符)及電話號(hào)碼(8個(gè)字符)兩部分;(2) 程序可接收輸入人名及相應(yīng)的電話號(hào)碼,并把它們加入電話號(hào)碼表中;(3) 凡有新的輸入后,程序應(yīng)按人名對(duì)電話號(hào)碼表重新排序;(4) 程序可接收需要查找電話號(hào)碼的人名,并從電話號(hào)碼表中查出其電話號(hào)碼,再在屏幕上以如下格式顯示出來。 name tel X X X X X X X X三、實(shí)驗(yàn)提示:(1)顯示提示符 Input name:; (2)調(diào)用子程序 input_name 接收人名; (3)調(diào)用子程序 stor_name 把人名存入

2、電話號(hào)碼表 tel_tab 中:(4)顯示提示符 Input a telephone number:;(5)調(diào)用子程序 inphone 接收電話號(hào)碼,并把它存入電話號(hào)碼表tel_tab中;(6)如輸入已結(jié)束則調(diào)用 name_sort 子程序?qū)﹄娫捥?hào)碼表接人名排序; (7)顯示提示符 Do you want a telephone number ?(Y/N);(8)回答N收退出程序; (9)回答Y則再顯示提示符 name ?;(10)調(diào)用子程序 input_name接收人名;(11)調(diào)用子程序 name_search 在電話號(hào)碼表中查找所要的電話號(hào)碼; (12)調(diào)用子程序 printline 按

3、要求格式顯示人名及電話號(hào)碼; (13)重復(fù)查號(hào)提示符直至用戶不要求查號(hào)為止。四、實(shí)驗(yàn)程序datarea segment tel_name label byte maxnlen db 20 namelen db ? namefld db 21 dup(?) ;定義20個(gè)字符的用于存放人名的字符串 tel_num label byte maxtlen db 8 tellen db ? telfld db 9 dup(?) ;定義8個(gè)字符的用于存放電話號(hào)碼的字符串 tel_tab db 50 dup(20 dup(' '), 8 dup(' ') ;定義可存放50項(xiàng)紀(jì)

4、錄的電話號(hào)碼表 tel_sav db 28 dup(?), 13, 10, '$' list db 20 dup(' '), 8 dup(' '), 0dh, 0ah, '$' ;定義電話號(hào)碼表的每個(gè)條目 string1 db 'Input name:', '$' string2 db 'Input a telphone number:', '$' string3 db 'Do you want a telephone number?(Y/N)', &

5、#39;$' string4 db 'name?', '$' string5 db 'Would you like to input a telephone list?(Y/N)', '$' string6 db 'The Tel_Lab is empty.', '$' string7 db 'There is no list fitting.', '$' string8 db 'name tel. ', '$' string9

6、 db 'Do you want a Tel_Lab?(Y/N)', '$' endadd dw ? swapped db 0 tel_count db 0 ;計(jì)算電話號(hào)碼表中的條目數(shù)量datarea endsprognam segmentmain proc far ;主程序 assume cs: prognam, ds: datarea, es: datareastart: push ds sub ax, ax push ax mov ax, datarea mov ds, ax mov es, ax cld lea di, tel_tab ;將電話號(hào)碼表傳給

7、目的變址寄存器cho_inp: ;進(jìn)行選擇,是否輸入條目 mov ah, 09 lea dx, string5 int 21h ;輸出“Would you like to in put a telephone list?(Y/N)” mov ah, 01 int 21h ;輸入,進(jìn)行選擇 mov dl, 4eh cmp al, dl je sort_n ;若輸入為N,則跳轉(zhuǎn)至sort_n,進(jìn)行電話號(hào)碼表的排序 mov dl, 6eh cmp al, dl je sort_n ;若輸入為n,則同上 mov dl, 59h cmp al, dl je input_n ;若輸入為Y,則跳轉(zhuǎn)至inpu

8、t_n,進(jìn)行電話號(hào)碼條目的輸入 mov dl, 79h cmp al, dl je input_n ;若輸入為y,則同上 mov ah, 02 mov dx, 0dh int 21h mov dx, 0ah int 21h jmp cho_inp ;若輸入不為Y(y)/N(n),則返回cho_inp,重新進(jìn)行選擇 input_n: ;輸入人名,并保存 mov ah, 02 mov dx, 0dh int 21h mov dx, 0ah int 21h mov ah, 09 lea dx, string1 int 21h ;輸出“Input name:” call input_name ;調(diào)用子

9、程序input_name接收人名 call stor_name ;調(diào)用子程序stor_name把人名存入電話號(hào)碼表tel_tab中input_p: ;輸入電話號(hào)碼,并保存 lea dx,string2 mov ah, 09 int 21h ;輸出“Input a telephone number:” call inphone ;調(diào)用子程序inphone接收電話號(hào)碼,并把它存入電話號(hào)碼表tel_tab中 jmp cho_inp ;跳轉(zhuǎn)至cho_inp,按提示選擇是否繼續(xù)輸入條目sort_n: ;對(duì)電話號(hào)碼表進(jìn)行排序 mov ah, 02 mov dx, 0dh int 21h mov dx, 0

10、ah int 21h call name_sort ;調(diào)用子程序name_sort,對(duì)電話號(hào)碼表按人名排序print_lab: ;輸出整個(gè)電話號(hào)碼表 lea dx, string9 mov ah, 09 int 21h ;輸出“Do you want a tel_lab?(Y/N)” mov ah, 01 int 21h ;輸入,進(jìn)行選擇 mov cl, al mov ah, 02 mov dl, 0dh int 21h mov ah, 02 mov dl, 0ah int 21h mov al, cl mov dl, 4eh cmp al, dl je search_n ;若輸入為N,則跳轉(zhuǎn)

11、至search_n,進(jìn)行電話號(hào)碼的查找 mov dl, 6eh cmp al, dl je search_n ;若輸入為n,則同上 mov dl, 59h cmp al, dl je goon_p ;若輸入為Y,則跳轉(zhuǎn)至goon_p,繼續(xù)該部分操作 mov dl, 79h cmp al, dl je goon_p ;若輸入為y,則同上 jmp print_lab ;若輸入不為Y(y)/N(n),則跳轉(zhuǎn)至print_lab,重新進(jìn)行選擇 goon_p: ;繼續(xù)輸出電話號(hào)碼表的操作 call printall ;調(diào)用子程序printall,輸出整個(gè)電話號(hào)碼表search_n: ;查找電話號(hào)碼條目

12、lea dx, string3 mov ah, 09 int 21h ;輸出“Do you want a telephone number?(Y/N)” mov ah, 01 int 21h ;輸入,進(jìn)行選擇 mov cl, al mov ah, 02 mov dl, 0dh int 21h mov ah, 02 mov dl, 0ah int 21h mov al, cl mov dl, 4eh cmp al, dl je exit ;若輸入為N,則跳轉(zhuǎn)至exit,退出程序 mov dl, 6eh cmp al, dl je exit ;若輸入為n,則同上 mov dl, 59h cmp a

13、l, dl je goon_s ;若輸入為Y,則跳轉(zhuǎn)至goon_s,繼續(xù)該部分操作 mov dl, 79h cmp al, dl je goon_s ;若輸入為y,則同上 jmp search_n ;若輸入不為Y(y)/N(n),則跳轉(zhuǎn)至search_n,重新進(jìn)行選擇 goon_s: ;繼續(xù)查找操作 lea dx, string4 mov ah, 09 int 21h ;輸出“name?” mov ah, 02 mov dl, 0dh int 21h mov ah, 02 mov dl, 0ah int 21h call input_name ;調(diào)用子程序input_name,接收人名 cal

14、l name_search ;調(diào)用子程序name_search,對(duì)電話號(hào)碼表按人名進(jìn)行查找 jmp search_n ;跳轉(zhuǎn)至search_n,繼續(xù)進(jìn)行查找exit: ;退出程序 retmain endpinput_name proc near ;子程序input_name,用于接受人名 mov ah, 0ah lea dx, tel_name int 21h ;輸入人名 mov ah, 02h mov dl, 0dh int 21h mov dl, 0ah int 21h mov bh, 0 mov bl, namelen mov cx, 20 sub cx, bxnamebrk: ;將人名

15、除外所剩下的字符用空格填滿 mov namefldbx, 20h inc bx loop namebrk retinput_name endpstor_name proc near ;子程序stor_name,用于把人名存入電話號(hào)碼表tel_tab中 inc tel_count ;將人名存入電話號(hào)碼之后,電話號(hào)碼條目數(shù)量增1 cld lea si, namefld mov cx, 10 rep movsw retstor_name endpinphone proc near ;子程序inphone,用于接受電話號(hào)碼,并把它存入電話號(hào)碼表tel_tab中 mov ah, 0ah lea dx,

16、tel_num int 21h ;輸入電話號(hào)碼 mov ah, 02h mov dl, 0dh int 21h mov dl, 0ah int 21h mov bh, 0 mov bl, tellen mov cx, 8 sub cx, bxtelbrk: ;將電話號(hào)碼數(shù)字除外,所剩下的字符用空格填滿 mov telfldbx, 20h inc bx loop telbrk cld lea si, telfld mov cx, 4 rep movsw ret inphone endpname_sort proc near ;子程序name_sort,用于對(duì)電話號(hào)碼表按人名排序 sub di,

17、56 mov endadd, di cmp al, 0 je emptystart_sort: mov swapped, 0 lea si, tel_tabcmp_n: mov cx, 20 mov di, si add di, 28 mov ax, di mov bx, si repe cmpsb jbe no_exchg call exchange_name ;調(diào)用子程序exchang_name,將兩個(gè)相鄰的條目進(jìn)行對(duì)調(diào) jmp no_exchgempty: ;若電話號(hào)碼表為空 mov ah, 09 lea dx, string6 int 21h ;輸出“The tel_lab is em

18、pty.” jmp exit_sortno_exchg: ;不進(jìn)行對(duì)調(diào) mov si, ax cmp si, endadd jbe cmp_n cmp swapped, 0 jnz start_sortexit_sort: retname_sort endpexchange_name proc near ;子程序exchange_name,用于將電話號(hào)碼表中的兩個(gè)相鄰的條目進(jìn)行對(duì)調(diào) mov cx, 14 lea di, list mov si, bx rep movsw mov cx, 14 mov di, bx rep movsw mov cx, 14 lea si, list rep mo

19、vsw mov swapped, 1 retexchange_name endpname_search proc near ;子程序name_search,用于按人名在電話號(hào)碼表中查找所要的電話號(hào)碼 push di mov al, tel_count lea si, tel_tabagain: cmp al, 0 je no_list mov cx, 20 lea di, namefld mov bx, si repz cmpsb jb find_n ja no_list dec al mov ah, 09 lea dx, string8 int 21h ;輸出“name tel. ” mov

20、 ah, 02 mov dl, 0dh int 21h mov dl, 0ah int 21h call printline ;調(diào)用子程序printline,輸出所查找到的條目 jmp exit_schfind_n: mov si, bx add si, 28 jmp againno_list: ;若不存在該條目 mov ah, 09 lea dx, string7 int 21h ;輸出“There is no list fitting.” mov ah, 02 mov dl, 0dh int 21h mov dl, 0ah int 21hexit_sch: pop di retname_s

21、earch endpprintline proc near ;子程序printline,用于輸出所查找到的電話號(hào)碼條目 mov si, bx lea di, list mov cx, 14 rep movsw mov ah, 09 lea dx, list int 21h retprintline endpprintall proc near ;子程序printall,用于輸出整個(gè)電話號(hào)碼表 push di mov ah, 09 lea dx, string8 int 21h mov ah, 02 mov dl, 0dh int 21h mov dl, 0ah int 21h mov bl, tel_count cmp bl, 0 je empty_lab lea si, tel_tabnext: lea di, list mov cx, 14 rep movsw

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論