匯編程序實驗4_查找電話號碼_第1頁
匯編程序實驗4_查找電話號碼_第2頁
匯編程序實驗4_查找電話號碼_第3頁
匯編程序實驗4_查找電話號碼_第4頁
匯編程序實驗4_查找電話號碼_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

4、錄的電話號碼表 tel_sav db 28 dup(?), 13, 10, '$' list db 20 dup(' '), 8 dup(' '), 0dh, 0ah, '$' ;定義電話號碼表的每個條目 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 ;計算電話號碼表中的條目數(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 ;將電話號碼表傳給

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

8、t_n,進行電話號碼條目的輸入 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,重新進行選擇 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把人名存入電話號碼表tel_tab中input_p: ;輸入電話號碼,并保存 lea dx,string2 mov ah, 09 int 21h ;輸出“Input a telephone number:” call inphone ;調(diào)用子程序inphone接收電話號碼,并把它存入電話號碼表tel_tab中 jmp cho_inp ;跳轉至cho_inp,按提示選擇是否繼續(xù)輸入條目sort_n: ;對電話號碼表進行排序 mov ah, 02 mov dx, 0dh int 21h mov dx, 0

10、ah int 21h call name_sort ;調(diào)用子程序name_sort,對電話號碼表按人名排序print_lab: ;輸出整個電話號碼表 lea dx, string9 mov ah, 09 int 21h ;輸出“Do you want a tel_lab?(Y/N)” mov ah, 01 int 21h ;輸入,進行選擇 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,則跳轉

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

12、lea dx, string3 mov ah, 09 int 21h ;輸出“Do you want a telephone number?(Y/N)” mov ah, 01 int 21h ;輸入,進行選擇 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,則跳轉至exit,退出程序 mov dl, 6eh cmp al, dl je exit ;若輸入為n,則同上 mov dl, 59h cmp a

13、l, dl je goon_s ;若輸入為Y,則跳轉至goon_s,繼續(xù)該部分操作 mov dl, 79h cmp al, dl je goon_s ;若輸入為y,則同上 jmp search_n ;若輸入不為Y(y)/N(n),則跳轉至search_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,對電話號碼表按人名進行查找 jmp search_n ;跳轉至search_n,繼續(xù)進行查找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,用于把人名存入電話號碼表tel_tab中 inc tel_count ;將人名存入電話號碼之后,電話號碼條目數(shù)量增1 cld lea si, namefld mov cx, 10 rep movsw retstor_name endpinphone proc near ;子程序inphone,用于接受電話號碼,并把它存入電話號碼表tel_tab中 mov ah, 0ah lea dx,

16、tel_num int 21h ;輸入電話號碼 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: ;將電話號碼數(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,用于對電話號碼表按人名排序 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,將兩個相鄰的條目進行對調(diào) jmp no_exchgempty: ;若電話號碼表為空 mov ah, 09 lea dx, string6 int 21h ;輸出“The tel_lab is em

18、pty.” jmp exit_sortno_exchg: ;不進行對調(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,用于將電話號碼表中的兩個相鄰的條目進行對調(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,用于按人名在電話號碼表中查找所要的電話號碼 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,用于輸出所查找到的電話號碼條目 mov si, bx lea di, list mov cx, 14 rep movsw mov ah, 09 lea dx, list int 21h retprintline endpprintall proc near ;子程序printall,用于輸出整個電話號碼表 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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論