匯編實(shí)驗(yàn)-查找電話號(hào)碼_第1頁(yè)
匯編實(shí)驗(yàn)-查找電話號(hào)碼_第2頁(yè)
匯編實(shí)驗(yàn)-查找電話號(hào)碼_第3頁(yè)
匯編實(shí)驗(yàn)-查找電話號(hào)碼_第4頁(yè)
匯編實(shí)驗(yàn)-查找電話號(hào)碼_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(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)四 查找電話號(hào)碼一、 實(shí)驗(yàn)的目的與要求(一)實(shí)驗(yàn)?zāi)康模簩W(xué)習(xí)用匯編語(yǔ)言設(shè)計(jì)與編寫子程序,理解子程序的調(diào)用過程。(二) 實(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)正文 實(shí)驗(yàn)分析:查找電話號(hào)碼程序設(shè)計(jì),應(yīng)注意子程序的設(shè)計(jì),合理的設(shè)計(jì)子程序

2、,使程序思路更清晰,便于設(shè)計(jì)。實(shí)驗(yàn)涉及查找排序,對(duì)程序設(shè)計(jì)提出了更高的要求,數(shù)據(jù)結(jié)構(gòu)采用二維數(shù)組來存儲(chǔ)電話信息,還應(yīng)設(shè)置變量用于排序以及查找等子功能的實(shí)現(xiàn)。核心的子功能是排序和查找功能,排序采用冒泡排序,并設(shè)置標(biāo)志位,以便提高程序效率,排序時(shí)應(yīng)當(dāng)注意的是數(shù)據(jù)段的截止地址,以防發(fā)生越界錯(cuò)誤。在排序時(shí)也嵌套調(diào)用子過程交換,此時(shí)應(yīng)該注意,源地址寄存器和目的地址寄存器的變化。查找的功能其實(shí)是對(duì)電話本的每一項(xiàng)的姓名進(jìn)行匹配。顯示電話本內(nèi)容是把電話本的每一項(xiàng)先放在一個(gè)變量里面,然后顯示,直到全部取出為止。由于字符串的操作較多,多次使用si和di寄存器,再適當(dāng)時(shí)候應(yīng)注意壓棧。保存必要的信息,否則會(huì)發(fā)生越界等

3、嚴(yán)重錯(cuò)誤。三、流程圖如下:四、實(shí)驗(yàn)結(jié)果附錄:程序源代碼如下:;*8data_seg segment namcount dw 0 ;the number count tel_tab db 50 dup(28 dup(' ') ;the telbook nameitem label byte ; store namemax1 db 21 ncurlen db ? namefld db 21 dup(?) phoneitem label byte;store numer max2 db 9 pcurlen db ? phonefld db 9 dup(?) addend dw ? ;

4、排序時(shí)的tel_tab尾地址指針 namtemp db 28 dup(?),13,10,'$' swap db 0 ;排序中是否有交換的標(biāo)志位 msg_count db 'Do you want to insert a item to phonebook?(Y/N)',13,10,'$' msg_error db 'Error!Please enter the requested.',13,10,'$' msg_inputnam db 'Input name:','$' msg_in

5、putnum db 'Input a telephone number:','$' msg_inquire db 'Do you want a telephone number?(Y/N)','$' msg_sname db 'name?',13,10,'$' msg_outtitle db 'name tel.',13,10,'$' msg_nomatch db 'NOt EXIT!',13,10,'$' msg_allphone d

6、b 'print all RECORD?(Y/N)',13,10,'$' msg_result db 'name tel.',13,10,'$' data_seg ends ;*stack_seg segment para stack 'stack' ;定義堆棧段 dw 256 dup(0) stack_seg ends ;*code_seg segment ;-main proc far assume cs:code_seg,ds:data_seg,es:data_seg,ss:stack_seg start:

7、mov ax,data_seg mov ds,ax ;初始化數(shù)據(jù)段 mov es,ax ;初始化附加段 xor bx,bx cld lea di,tel_tab ;名字表的首地址放入di a1: lea dx,msg_count mov ah,9 int 21h ;顯示信息是否插入一項(xiàng)紀(jì)錄?(Y/N)' mov ah,1 int 21h mov bl,al call crlf cmp bl,'n' ;判斷輸入 jz a2 cmp bl,'N' jz a2 cmp bl,'y' jz next0 cmp bl,'Y' jz

8、next0 mov ah,9 lea dx,msg_error int 21h jmp a1next0:lea dx,msg_inputnam mov ah,9 int 21h ;要求輸入名字 call input_name ;調(diào)用input_name輸入人名 call stor_name ;調(diào)用stor_name存儲(chǔ)人名 call input_phone ;調(diào)用input_phone輸入電話 call name_sort ;排序 jmp a1 ;是否繼續(xù)輸入? a2: lea dx,msg_inquire mov ah,9 int 21h ;顯示是否查找電話號(hào)碼 mov ah,1 int 2

9、1h mov bl,al call crlf cmp bl,'n' jz a3 cmp bl,'N' jz a3 cmp bl,'y' jz next1 cmp bl,'Y' jz next1 mov ah,9 lea dx,msg_error int 21h jmp a2next1:lea dx,msg_sname mov ah,9 int 21h ;顯示要查詢電話的姓名 call input_name ;輸入姓名 call name_search jmp a2 a3: lea dx,msg_allphone ;顯示所有電話號(hào)碼

10、 mov ah,9 int 21h mov ah,1 int 21h mov bl,al call crlf ;回車換行 cmp bl,'n' jz exit cmp bl,'N' jz exit cmp bl,'y' jz next2 cmp bl,'Y' jz next2 mov ah,9 lea dx,msg_error int 21h jmp a3next2: call printline ;調(diào)用子程序打印出所有的電話號(hào)碼exit: ret main endp ;- input_name proc near ;子程序 接受

11、輸入字符 lea dx,nameitem mov ah,0ah int 21h call crlf ;回車換行 mov bh,0 mov bl,ncurlen mov cx,21 sub cx,bx repeat1:mov namefldbx,20h inc bx loop repeat1 ;輸入的名字為20字節(jié),不足的用空格補(bǔ)足 ret input_name endp ;-stor_name proc near ;子程序傳送名字的每個(gè)字母到si inc namcount cld lea si,namefld mov cx,20 rep movsb ret stor_name endp ;-i

12、nput_phone proc near ;子程序(輸入電話號(hào)碼) lea dx,msg_inputnum mov ah,9 int 21h ;顯示要求輸入電話號(hào)碼 lea dx,phoneitem mov ah,10 int 21h mov bh,0 mov bl,pcurlen mov cx,9 sub cx,bx repeat2:mov phonefldbx,20h inc bx loop repeat2 call crlf cld lea si,phonefld mov cx,8 rep movsb ;把輸入的號(hào)碼存入namtab表中 ret input_phone endp ;-na

13、me_sort proc near ;子程序 push di push ax push bx cmp namcount,1 jz exit4 ;比較名字個(gè)數(shù)是否為一個(gè)s1: mov swap,0 sub di,56 mov addend,di lea si,tel_tab s2: mov cx,20 mov di,si add di,28 mov ax,di mov bx,si repe cmpsb jbe s3 call exchange s3: mov si,ax cmp si,addend jbe s2 cmp swap,0 ;如果有交換,繼續(xù)下一趟 jnz s1 exit4: pop

14、bx pop ax pop di ret name_sort endp ;-exchange proc near ;交換tel_tab中di,si所指表項(xiàng)的內(nèi)容 mov cx,28 lea di,namtemp mov si,bx rep movsb mov cx,28 mov di,bx rep movsb mov cx,28 lea si,namtemp rep movsb mov swap,1 ret exchange endp ;-name_search proc near ;查找輸入的名字 lea di,tel_tab push di mov bx,namcount loop1: l

15、ea si,namefld mov cx,20 repe cmpsb ;連續(xù)查找匹配名字 je found ;找到跳轉(zhuǎn)found pop di ;沒找到di出棧 add di,28 push di dec bx jnz loop1 lea dx,msg_nomatch mov ah,9 int 21h ;沒有找到輸出信息 found: pop di lea dx,msg_outtitle mov ah,9 int 21h mov si,di lea di,namtemp mov cx,28 rep movsb lea dx,namtemp mov ah,9 int 21h ;顯示查到的姓名和電

16、話號(hào)碼 ret name_search endp ;-printline proc near ;輸出排序結(jié)果 push di push namcount call crlf ;回車換行 lea dx,msg_result mov ah,9 int 21h ;顯示升序輸出姓名、電話 lea si,tel_tab loop2: lea di,namtemp mov cx,28 rep movsb lea dx,namtemp mov ah,9 int 21h ;顯示姓名、電話 dec namcount jnz loop2 ;循環(huán)輸出 pop namcount pop di ret printline endp ;-crlf proc near ;回車換行 mov dl,0dh mov ah,2 int 21h mov dl,0ah mov ah,2 int 21h ret crlf endp;-code_seg ends ;*end main 五、實(shí)驗(yàn)總

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論