




版權說明:本文檔由用戶提供并上傳,收益歸屬內(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山西省渾源縣第七中學2024-2025學年高三第一次調(diào)查研究考試(4月)化學試題含解析
- 浙江商業(yè)職業(yè)技術學院《體育產(chǎn)業(yè)經(jīng)營管理》2023-2024學年第二學期期末試卷
- 懷化學院《中國古代物質文化與審美風尚》2023-2024學年第二學期期末試卷
- 重慶市忠縣達標名校2025屆初三2月七校聯(lián)考數(shù)學試題含解析
- 山東菏澤市曹縣重點中學2024-2025學年初三下學期第六次周練化學試題文試題含解析
- 山東省濟南市章丘區(qū)重點中學2024-2025學年初三第一次強化訓練英語試題含答案
- 遼寧對外經(jīng)貿(mào)學院《外景采集與創(chuàng)作》2023-2024學年第二學期期末試卷
- 長春大學旅游學院《醫(yī)學影像診斷學上》2023-2024學年第一學期期末試卷
- 天津市和平區(qū)2025年高三第二次(4月)適應性測試生物試題試卷含解析
- 廈門理工學院《食品安全檢測技術》2023-2024學年第一學期期末試卷
- DB3305-T 57-2018幸福鄰里中心建設與服務管理規(guī)范
- AIGC基礎與應用全套教學課件
- 9.1.3二項分布(解析版)
- 神經(jīng)生長因子在神經(jīng)退行性疾病中的作用
- 國有企業(yè)采購管理規(guī)范 T/CFLP 0027-2020
- 《災害風險管理》 課件 第6、7章 災害風險分析與評估、災害發(fā)生前的風險管理
- 2024年內(nèi)蒙古中考地理生物試卷
- 緩和醫(yī)療-以死觀生的生活智慧智慧樹知到期末考試答案章節(jié)答案2024年嘉興大學
- 小學畢業(yè)考試數(shù)學試卷附答案【b卷】
- 2024年江蘇省泰州市興化市中考二模數(shù)學試題
- 文獻檢索智慧樹知到期末考試答案章節(jié)答案2024年寧夏醫(yī)科大學
評論
0/150
提交評論