華北電力大學(xué)匯編實(shí)驗(yàn)報(bào)告_第1頁
華北電力大學(xué)匯編實(shí)驗(yàn)報(bào)告_第2頁
華北電力大學(xué)匯編實(shí)驗(yàn)報(bào)告_第3頁
華北電力大學(xué)匯編實(shí)驗(yàn)報(bào)告_第4頁
華北電力大學(xué)匯編實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、綜合實(shí)驗(yàn)報(bào)告( 2012 - 2013年度第 一 學(xué)期) 名 稱: 匯編語言程序設(shè)計(jì)綜合實(shí)驗(yàn) 實(shí)驗(yàn)2.1用表格形式顯示字符 實(shí)驗(yàn)2.2查找匹配字符串 實(shí)驗(yàn)2.3分類統(tǒng)計(jì)字符個(gè)數(shù) 實(shí)驗(yàn)2.4查找電話號(hào)碼 班 級(jí): 學(xué) 號(hào): 學(xué)生姓名: 指導(dǎo)教師: 王保義 設(shè)計(jì)周數(shù): 一周 成 績: 日期: 2013 年 1 月 6 日2實(shí)驗(yàn)2.1用表格形式顯示字符1、 實(shí)驗(yàn)?zāi)康暮鸵螅簩?shí)驗(yàn)?zāi)康模簩W(xué)習(xí)用匯編語言設(shè)計(jì)與編寫循環(huán)程序,掌握運(yùn)用ASCII碼輸出字符的方法,以及格式輸出的設(shè)計(jì)。 實(shí)驗(yàn)要求:按15行X16列的表格形式顯示ASCII碼為10H一100H的所有字符,即以行為主的順序及ASCII碼遞增的次序依次顯

2、示對(duì)應(yīng)的字符。每16個(gè)字符為一行,每行中的相鄰兩個(gè)字符之間用空白符(ASCII為0)隔開。二、實(shí)驗(yàn)提示:1) 顯示每個(gè)字符可使用功能號(hào)為 02 的顯示輸出功能調(diào)用,使用方法如下:MOV AH,02H MOV DL,輸出字符的 ASCII 碼 INT 21H2) 顯示空白符時(shí),用其 ASCII 碼 0 置入 DL 寄存器。每行結(jié)束時(shí),用顯示回車(ASCII為 0dh)和換行符(ASCII為 0ah)來結(jié)束本行并開始下一行。3) 由于逐個(gè)顯示相繼的 ASCII 字符時(shí),需要保存并不斷修改DL 寄存器的內(nèi)容,而顯示空白、回車、換行符時(shí)也需要使用DL寄存器,為此可使用堆棧來保存相繼的ASCII字符。具

3、體用法是:在顯示空包或回車、換行符前用指令:PUSH DX把 DL的內(nèi)容保存到堆棧中去;在顯示空白或回車、換行符后用指令POP DX恢復(fù)DL 寄存器的原始內(nèi)容。4) TEST DL,0FH來進(jìn)行是否應(yīng)該換行的判斷,ZF=1則轉(zhuǎn)至下一行。3、 實(shí)驗(yàn)結(jié)果: 程序代碼:DATAS SEGMENT ;此處輸入數(shù)據(jù)段代碼 DATAS ENDSSTACKS SEGMENT ;此處輸入堆棧段代碼STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX mov dl,10h;設(shè)置初始輸出為A

4、SCII的10h mov cx,15;輸出顯示為15行 next1: push cx mov cx,16;設(shè)置循環(huán)次數(shù),16,表示輸出顯示為16列 next: mov ah,02h int 21h;顯示輸出 inc dl;設(shè)置下一個(gè)元素 push dx;推入堆棧 mov dl,20h mov ah,02h;顯示空白符 int 21h pop dx;將棧頂元素推出 loop next push dx mov dl,0dh mov ah,02h int 21h mov dl,0ah;輸出換行 mov ah,02h int 21h pop dx;將棧頂元素推出 pop cx loop next1 M

5、OV AH,4CH INT 21HCODES ENDS end start實(shí)驗(yàn)運(yùn)行結(jié)果:四、實(shí)驗(yàn)心得: 本實(shí)驗(yàn)達(dá)到了預(yù)期的實(shí)驗(yàn)要求,輸出了正確的字符表。作為第一個(gè)匯編實(shí)驗(yàn),本程序比較簡單,很好的讓我們熟悉了匯編環(huán)境。這樣的小小成功給了自己很大信心,相信自己會(huì)做好后面的實(shí)驗(yàn)。本實(shí)驗(yàn)做得比較成功實(shí)驗(yàn)得到了15X16的表格形式顯示的結(jié)果。實(shí)驗(yàn)設(shè)計(jì)思想比較簡單,只要注意dx的壓棧和出棧的操作,程序?qū)崿F(xiàn)比較簡單。但也想到了一些問題,程序要求輸出的是10h-100h的所有ASCII碼,我開始寫出程序發(fā)現(xiàn)只輸出了240個(gè)字符,后經(jīng)仔細(xì)思考100h并不是字符的ASCII碼,問題得以解決,雖然此次實(shí)驗(yàn)不是很難,

6、但也收獲了一定的知識(shí),并學(xué)會(huì)了分析和解決問題的方法,相信這對(duì)以后的實(shí)驗(yàn)進(jìn)行會(huì)起到一定的作用。實(shí)驗(yàn)2.2查找匹配字符1、 實(shí)驗(yàn)要求:(一) 實(shí)驗(yàn)?zāi)康模壕毩?xí)字符串的匹配程序設(shè)計(jì)。 (二) 實(shí)驗(yàn)要求:程序接收用戶鍵入的一個(gè)關(guān)鍵字以及一個(gè)句子。如果句子中不包含關(guān)鍵字則顯示NO match!;如果句子中包含關(guān)鍵字則顯示MATCH,且把該字在句子中的位置用十六進(jìn)制數(shù)顯示出來。2、 實(shí)驗(yàn)說明:1) 采用0AH功能調(diào)用將關(guān)鍵字和一個(gè)句子分別存入相應(yīng)的緩沖區(qū)。2) 關(guān)鍵字的查找。關(guān)鍵字和句子中相應(yīng)字段的比較可使用串比較指令,因此定義附加段,附加段和數(shù)據(jù)段定義為同一段;相應(yīng)寄存器內(nèi)容如下:SI寄存器:關(guān)鍵字首指針

7、;DI寄存器:句子中正相比較的字符指針;CX寄存器(數(shù)據(jù)段的COUNT變量):關(guān)鍵字的字母個(gè)數(shù)。3) 關(guān)鍵字在句子中位置的判斷。DI-COUNT即為關(guān)鍵字在句子中的地址,LEA DX SENTENCE;SUB DI,DX;DEC DI;此時(shí)DI中存放關(guān)鍵字的位置。4) 十六進(jìn)制顯示,采用循環(huán)移位,每次輸出四個(gè)二進(jìn)制位對(duì)應(yīng)的十六進(jìn)制字符。三、實(shí)驗(yàn)結(jié)果程序代碼 datarea segmentkeyadr label bytekeymax db 20keyact db ?keystring db 20 dup(?)senadr label bytesenmax db 50senact db ?sec

8、string db 50 dup(?)messkey db 'Enter keyword:','$'messsen db 0dh,0ah,'Enter Sentence:','$'nomatch db 0dh,0ah,'No match.','$'match db 0dh,0ah,'Match at location:','$'rest db 'H of the sentence.','$'datarea ends;*prognam s

9、egment小于或等于開始初置段地址輸入關(guān)鍵字初置SI,DIAl=句子長度CL=關(guān)鍵字長度BX=句子比較末地址不匹配匹配調(diào)用DISPLAY串比較ZF=1?CMP DI,BX輸入句子小于大于或等于CMP AL,CLY;-main proc farassume cs:prognam,ds:datarea,es:datareastart: push ds xor ax,ax push ax mov ax,datarea mov ds,ax mov es,ax lea dx,messkey; mov ah,09h int 21h lea dx,keyadr mov ah,0ah;輸入關(guān)鍵字 int 2

10、1h lea dx,messsen mov ah,09h int 21h d: lea dx,senadr mov ah,0ah;輸入一個(gè)句子 int 21h mov al,senact sub al,keyact;比較句子與關(guān)鍵字的長度 jl nmatch call search mov dl,0dh mov ah,02h int 21h mov dl,0ah;輸出換行 mov ah,02h int 21h jmp d jmp short e0nmatch: lea dx,nomatch mov ah,09h;不匹配 int 21he0: ret main endp ;-search pro

11、c near xor cx,cx;markoff counter mov dx,offset senadr add dl,senact inc dl mov cl,keyact cld;使DF=1,告訴程序si,di向前移動(dòng) lea di,secstring;di指向句子 r0: lea si,keystring;si指向關(guān)鍵字 repz cmpsb mov al,byte ptr si-1 cmp al,byte ptr di-1 jnz next sub si,offset keystring mov ax,si cmp al,keyact je showp next: mov cl,ke

12、yact cmp di,dx jnz r0shown: lea dx,nomatch mov ah,09h int 21h jmp short e1showp: lea dx,match mov ah,09h int 21h dec di mov bx,di xor ax,ax mov al,keyact sub bx,ax mov ax,offset senadr sub bx,ax call binihex lea dx,rest mov ah,09h int 21he1: retsearch endpbinihex proc near mov ch,4r1: mov cl,4 rol b

13、x,cl mov dl,bl and dl,0fh add dl,30h cmp dl,39h jle disp add dl,07hdisp: mov ah,02h int 21h dec ch jnz r1 ret binihex endp;-prognam ends;* end main實(shí)驗(yàn)運(yùn)行結(jié)果4、 實(shí)驗(yàn)總結(jié): 本實(shí)驗(yàn)達(dá)到了實(shí)驗(yàn)要求。根據(jù)實(shí)驗(yàn)書上的實(shí)驗(yàn)提示,通過使用串比較指令,比較好實(shí)現(xiàn)了實(shí)驗(yàn)要求的功能。這個(gè)程序中出現(xiàn)了子程序的編程,在實(shí)驗(yàn)過程中由于開始時(shí)疏忽了串比較之后SI和DI會(huì)自動(dòng)改變而使錯(cuò)誤迭出,還有CX中關(guān)鍵字個(gè)數(shù)的存放,作為比較的計(jì)數(shù)寄存器,如何每次比較前都能使CX中為正

14、確的數(shù)值,自己做了不少嘗試。這一番周折會(huì)很好的提醒我以后編程一定一定要認(rèn)真。與第一次實(shí)驗(yàn)相比這次用到了數(shù)據(jù)段,應(yīng)該注意數(shù)據(jù)段的定義和使用。此外應(yīng)該注意單個(gè)字符時(shí)的“邊緣”情況因?yàn)椋@是指針的移動(dòng)和關(guān)鍵字的長度是一致的,但是這并不意味著,兩個(gè)字符串匹配。輸出結(jié)果采用十六進(jìn)制輸出在IBM PC匯編語言程序設(shè)計(jì)一書中例6.3decihex中的子過程binihex,這里也提醒我要注意積累一些知識(shí),只有這樣才能把匯編語言學(xué)好。實(shí)驗(yàn)2.3分類統(tǒng)計(jì)字符個(gè)數(shù)1、 實(shí)驗(yàn)要求:程序接收用戶鍵入的一行字符(用回車符結(jié)束),并按字母,數(shù)字及其他字符分類計(jì)數(shù),然后將結(jié)果存入以letter,digit和other為名的存

15、儲(chǔ)單元中。二、實(shí)驗(yàn)說明:1) 程序采用0AH功能調(diào)用把鍵入字符直接送到緩沖區(qū),然后再逐個(gè)取出,比較字符的ASC碼,分類計(jì)數(shù)。2) 程序需進(jìn)入debug運(yùn)行并查看計(jì)數(shù)結(jié)果。3) 十進(jìn)制顯示輸出,數(shù)值存放在AL中,運(yùn)用MOV BL,10;DIV BL;分別將十位和個(gè)位輸出。3、 實(shí)驗(yàn)結(jié)果:程序代碼 datarea segmenttou db 'enter word ',13,10,'$'letter db 'letter:','$'number db 'number:','$'other db '

16、;other:','$'datarea ends;*STACKS SEGMENT ;此處輸入堆棧段代碼STACKS ENDSprognam segment ;-main proc farassume cs:prognam,ds:datarea,es:datareastart: push dssub ax,axpush axmov ax,datareamov ds,ax mov bx,0 mov cx,0 mov di,0 lea dx,tou mov ah,09h int 21h input: mov ah,1 int 21h cmp al,0dh 小于小于小于或等于大

17、于小于或等于小于開始字符送緩沖區(qū)DI=首地址CL=字符個(gè)數(shù)數(shù)字digital+1di+1字符letter+1di+1其他other+1di+1回車?CMP AL,30HCMP AL,39HCMP AL,41HCMP AL,5AHCMP AL,61HCMP AL,7AH調(diào)用display退出Y je disp cmp al,30h jae n1 o: inc di jmp short inputn1: cmp al,39h ja n2 inc cx jmp short inputn2: cmp al,41h jae n3 jmp on3: cmp al,5ah ja n4 inc bx jmp

18、short input n4: cmp al,61h jae n5 jmp short on5: cmp al,7ah ja short o inc bx jmp short input disp: push ax mov dl,0dh mov ah,09h int 21h mov dl,0ah mov ah,09h int 21h pop ax lea dx,letter ; 輸出字母個(gè)數(shù) push ax mov ah,09h int 21h pop ax call binihex push ax mov dl,0dh mov ah,09h int 21h mov dl,0ah mov ah

19、,09h int 21h pop ax lea dx,number;輸出數(shù)字個(gè)數(shù) push ax mov ah,09h int 21h pop ax mov bx,cx call binihex push ax mov dl,0dh mov ah,09h int 21h mov dl,0ah mov ah,09h int 21h pop ax lea dx,other;輸出其他個(gè)數(shù) mov ah,09h int 21h mov bx,di call binihex push ax mov dl,0dh mov ah,09h int 21h mov dl,0ah mov ah,09h int 2

20、1h pop axretmain endp ;-binihex proc near push cx push ax push dx mov ch,4rotate: mov cl,4 rol bx,cl mov dl,bl and dl,0fh add dl,30h cmp dl,3ah jl printin add dl,07hprintin: mov ah,02h int 21h dec ch jnz rotate pop dx pop ax pop cx retbinihex endp;-prognam ends;* end main實(shí)驗(yàn)運(yùn)行結(jié)果:4、 實(shí)驗(yàn)總結(jié): 本實(shí)驗(yàn)達(dá)到了實(shí)驗(yàn)要求,很

21、好的在debug中看到了各個(gè)寄存器的情況和數(shù)據(jù)段數(shù)據(jù)的存放。這次實(shí)驗(yàn)流程很清晰明了,關(guān)于寄存器的使用相對(duì)比較簡單。不過開始時(shí)編譯沒有通過,原因是標(biāo)號(hào)和變量使用了同樣的單詞符號(hào),我原以為標(biāo)號(hào)為代碼段符號(hào)地址,變量為數(shù)據(jù)段符號(hào)地址 ,匯編程序可以自動(dòng)識(shí)別。這次,對(duì)于匯編的符號(hào)概念又有了新的認(rèn)識(shí)。實(shí)驗(yàn)2.4查找電話號(hào)碼1、 實(shí)驗(yàn)要求: (一)實(shí)驗(yàn)?zāi)康模簩W(xué)習(xí)用匯編語言設(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)碼表中

22、; (3) 凡有新的輸入后,程序應(yīng)按人名對(duì)電話號(hào)碼表重新排序; (4) 程序可接收需要查找電話號(hào)碼的人名,并從電話號(hào)碼表中查出其電話號(hào)碼,再在屏幕上以如下格式顯示出來。 name tel X X X X X X X X2、 實(shí)驗(yàn)說明:1) 實(shí)驗(yàn)提示l 顯示提示符 “Input name:”; l 調(diào)用子程序 input_name 接收人名; l 調(diào)用子程序 stor_name 把人名存入電話號(hào)碼表 tel_tab 中:l 顯示提示符 “Input a telephone number:”;l 調(diào)用子程序 inphone 接收電話號(hào)碼,并把它存入電話號(hào)碼表tel_tab中;l 如輸入已結(jié)束則調(diào)用

23、 name_sort 子程序?qū)﹄娫捥?hào)碼表接人名排序; l 顯示提示符 “Do you want a telephone number ?(Y/N)”;l 回答N收退出程序; l 回答Y則再顯示提示符 “name ?”;l 調(diào)用子程序 input_name接收人名;l 調(diào)用子程序 name_search 在電話號(hào)碼表中查找所要的電話號(hào)碼; l 調(diào)用子程序 printline 按要求格式顯示人名及電話號(hào)碼; l 重復(fù)查號(hào)提示符直至用戶不要求查號(hào)為止。2) 流程圖3) 模塊層次圖主函數(shù)main接收人名函數(shù)Input_name保存人名函數(shù)Stor_ name接收并且保存電話號(hào)碼函數(shù)inphone電話號(hào)

24、碼表排序函數(shù)Name_ sort查找電話號(hào)碼函數(shù)Name_ search輸出電話號(hào)碼表函數(shù)printall輸出電話號(hào)碼條目函數(shù)printline對(duì)調(diào)條目位置函數(shù)exchange4) 模塊說明l 主程序main:用來顯示用戶操作提示,調(diào)用子模塊,使程序完成查找電話號(hào)碼的過程l 子程序input_name:輸入人名,將此人名保存至緩沖區(qū),并用空格補(bǔ)足l 子程序stor_name:將人名從緩沖區(qū)中取出,保存在電話號(hào)碼表中的人名區(qū)中l(wèi) 子程序inphone:輸入電話號(hào)碼,將此電話號(hào)碼保存至緩沖區(qū),并用空格補(bǔ)足,然后,將電話號(hào)碼從緩沖區(qū)中取出,保存在電話號(hào)碼表中的電話號(hào)碼區(qū)中l(wèi) 子程序name_sort

25、:運(yùn)用冒泡法,對(duì)電話號(hào)碼表按人名排序l 子程序exchange:將不符合排序規(guī)律的條目的位置進(jìn)行調(diào)整l 子程序name_search:輸入人名,在電話號(hào)碼表中依次比較人名進(jìn)行查找l 子程序printline:查找到條目之后,將條目輸出l 子程序printall:將整個(gè)電話號(hào)碼表的所有條目依次輸出三、實(shí)驗(yàn)結(jié)果: 31 / 31程序代碼;*8data_seg segment namcount dw 0 ;the number count tel_tab db 50 dup(28 dup(' ') ;the telbook nameitem label byte ; store na

26、memax1 db 21 ncurlen db ? namefld db 21 dup(?) phoneitem label byte;store numer max2 db 9 pcurlen db ? phonefld db 9 dup(?) addend dw ? ;排序時(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,'$

27、' msg_error db 'Error!Please enter the requested.',13,10,'$' msg_inputnam db 'Input name:','$' msg_inputnum db 'Input a telephone number:','$' msg_inquire db 'Do you want a telephone number?(Y/N)','$' msg_sname db 'name?',13

28、,10,'$' msg_outtitle db 'name tel.',13,10,'$' msg_nomatch db 'NOt EXIT!',13,10,'$' msg_allphone db 'print all RECORD?(Y/N)',13,10,'$' msg_result db 'name tel.',13,10,'$' data_seg ends ;*stack_seg segment para stack 'stack

29、9; ;定義堆棧段 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: 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

30、,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 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ǔ)人名

31、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 21h 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

32、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)碼 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' j

33、z next2 mov ah,9 lea dx,msg_error int 21h jmp a3next2: call printline ;調(diào)用子程序打印出所有的電話號(hào)碼 jmp a3exit: ret main endp ;- input_name proc near ;子程序 接受輸入字符 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字

34、節(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 ;-input_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 c

35、x,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 ;-name_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 d

36、i,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 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

37、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: lea 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 ;沒有找

38、到輸出信息 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 ;顯示查到的姓名和電話號(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

39、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)運(yùn)行結(jié)果: 4、 實(shí)驗(yàn)心得: 本實(shí)驗(yàn)基本達(dá)到了實(shí)驗(yàn)要求。初步了解了子程序的設(shè)計(jì),是程序設(shè)計(jì)模塊化,這對(duì)于設(shè)計(jì)較復(fù)雜的程序是非常重要的。實(shí)驗(yàn)對(duì)字符串的處理,要求相對(duì)較高,涉及字符串的移動(dòng)和比較,此外還應(yīng)該注意在定義緩沖區(qū)長度時(shí),應(yīng)把回車的長度加入進(jìn)去,否則可能會(huì)造成覆蓋的錯(cuò)誤。實(shí)驗(yàn)過程中對(duì)于si和di的使用,由于沒有及時(shí)保存發(fā)生了,越界錯(cuò)誤,后經(jīng)仔細(xì)調(diào)試才發(fā)現(xiàn)問題,匯編程序設(shè)計(jì)中壓棧操作時(shí)十分重要的,在設(shè)計(jì)程

溫馨提示

  • 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)論