版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、匯編語言程序設(shè)計(jì)實(shí)驗(yàn)教案 目 錄實(shí)驗(yàn)一、匯編語言上機(jī)過程和Debug常用調(diào)試命令.3實(shí)驗(yàn)二、循環(huán)程序設(shè)計(jì)1.5實(shí)驗(yàn)三、循環(huán)程序設(shè)計(jì)2.7實(shí)驗(yàn)四、分支程序設(shè)計(jì). . 10實(shí)驗(yàn)五、子程序設(shè)計(jì). 12實(shí)驗(yàn)一 匯編語言上機(jī)過程和Debug常用調(diào)試命令一 實(shí)驗(yàn)?zāi)康模簩W(xué)習(xí)程序設(shè)計(jì)的基本方法和技能,熟練掌握用匯編語言設(shè)計(jì)、編寫、調(diào)試和運(yùn)行程序的方法。二 實(shí)驗(yàn)題目: 熟悉與實(shí)驗(yàn)有關(guān)的系統(tǒng)軟件(如編輯程序、匯編程序、連接程序和調(diào)試程序等)的使用方法。在調(diào)試過程中,學(xué)習(xí)及掌握debug程序的各種操作命令。三 問題描述: 試編寫一程序:比較兩個(gè)字符串string1和string2所含的字符是否相同,若相同則顯示ma
2、tch; 否則,顯示no match。四 方法說明:a) 使用ws、tc或EDIT編輯程序來建立源文件,然后存盤,使系統(tǒng)返回DOS。b) 用匯編程序masm(或asm)對源文件匯編產(chǎn)生目標(biāo)文件obj如:匯編指示出錯(cuò)則需重新調(diào)用編輯程序修改錯(cuò)誤,直至匯編通過為止。c) 用連接程序link 產(chǎn)生執(zhí)行文件EXE.d) 執(zhí)行程序,可直接從DOS執(zhí)行程序。e) 使用debug程序調(diào)試程序的方法。五 實(shí)驗(yàn)步驟:1 調(diào)用字處理程序EDIT 建立 文件d:edit文件名。Asmdatarea segment string1 db move the cursor backward.string2 db move
3、 the cursor backward.mess1 db Match.,13,10,$mess2 db No match!.,13,10,$datarea endsprognam segmentmain proc farassume cs:prognam,ds:datarea,es:datarea start:push dssub ax,axpush axmov ax,datareamov ds,axmov es,axlea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short disp mat
4、ch: lea dx, mess1disp: mov ah,09 int 21h ret main endpprognam ends end start 2 對源文件匯編產(chǎn)生目標(biāo)文件objD:masm 文件名。Asm3用連接程序link產(chǎn)生執(zhí)行文件exeD:link文件名。Obj4執(zhí)行程序D: 文件名5. 使用debug程序調(diào)試程序的方法。d>debug 文件名.exe_1. 用G命令運(yùn)行程序2. 用U命令顯示程序3. 學(xué)會設(shè)置斷點(diǎn)。4. 學(xué)會查看數(shù)據(jù)段的內(nèi)容情況5. 用E命令修改數(shù)據(jù)區(qū)的字符串。6. 用A 命令把數(shù)據(jù)區(qū)的內(nèi)容恢復(fù)原狀7. T命令逐條跟蹤程序的執(zhí)行。8. 學(xué)會使用F命令、
5、R命令、Q命令等等。六、選作題目:將以buf1為起始地址的字節(jié)存儲區(qū)中的內(nèi)容傳送到以buf2為起始地址的字節(jié)存儲區(qū)中七、 重點(diǎn)和難點(diǎn):(1) 用匯編語言設(shè)計(jì)、編寫、調(diào)試和運(yùn)行程序的方法,熟練掌握與實(shí)驗(yàn)有關(guān)的系統(tǒng)軟件(如編輯程序、匯編程序、連接程序和調(diào)試程序等)的使用方法。 (2) 程序的理解,系統(tǒng)功能的調(diào)用。八、 注意事項(xiàng):i. 編輯源程序時(shí),擴(kuò)展名(asm)一定要寫上。ii. 匯編源程序時(shí),源程序一定要是匯編程序,用連接程序link連接的是目標(biāo)程序(obj),連接成功后,產(chǎn)生可執(zhí)行文件。iii. 學(xué)會找數(shù)據(jù)段地址。iv. 如果用U命令時(shí),代碼段地址不斷增加,如要從頭顯示,可用U 00(00為
6、偏移地址)。v. E 29 29為偏移地址vi. F 29 l 9 forward.20 29為偏移地址. L 為要修改的長度。20是空格的asc|碼。實(shí)驗(yàn)二 循環(huán)程序設(shè)計(jì)1一.實(shí)驗(yàn)?zāi)康模簩W(xué)會用循環(huán)結(jié)構(gòu)進(jìn)行程序編程。二.實(shí)驗(yàn)題目:用表格形式顯示ASC|字符SMASC|三.實(shí)驗(yàn)要求: 按15行*16列的表格形式顯示ASC|碼為10H-100H的所有字符,即以行為主的順序及ASC|碼遞增的次序依次顯示對應(yīng)的字符。每16個(gè)字符為一行,每行中的相鄰兩個(gè)字符之間用空白符(ASC|為0)隔開。四方法說明:(1) 顯示每個(gè)字符可使用功能號為02的顯示輸出功能調(diào)用,使用方法如下:mov ah,02hmov d
7、l,0ahint 21h 本題中可把dl 初始化為10H, 然后不斷使其加1(用INC指令) 以取得下一個(gè)字符的ASC|碼。(2) 顯示空白符時(shí),用其ASC|碼0置入dl 寄存器,每行結(jié)束時(shí),用顯示回車(ASC|為0dh)和換行符(ASC|為oah)來結(jié)束本行并開始下一行。(3) 由于逐個(gè)顯示相繼的ASC|字符時(shí),需要保存并不斷修改dl寄存器的內(nèi)容,而顯示空白、回車、換行符時(shí)也需要使用dl寄存器,為此可使用堆棧來保存相繼的ASC|字符。具體用法是:在顯示空白或回車,換行符前用指令 push dx 把dl 的內(nèi)容保存到堆棧中去。在顯示空白或回車,換行符后用指令 pop dx 恢復(fù)dl寄存器的原始
8、內(nèi)容。五.選作題目:設(shè)有50個(gè)從1開始連續(xù)的數(shù),編程序統(tǒng)計(jì)它們的偶數(shù)和,最后將結(jié)果放在名字為sum的字存儲單中。 六、重點(diǎn)和難點(diǎn): 1. 程序編程用到雙重循環(huán),顯示一行字符是內(nèi)循環(huán);最后結(jié)果顯示15行,顯示15行用到外循環(huán)。 2顯示回車(asc|為0dh )和換行符(asc|為0ah),最好先回車(asc|為0dh )再換行符(asc|為0ah)不然在顯示第二個(gè)字符串時(shí)可能會把第一個(gè)字符串覆蓋。七程序清單:code segmentmain proc far assume cs:codestart: push ds;壓棧 sub ax,ax;清零 push ax mov bl,00h;空白符 m
9、ov cx,100 mov dl,10h;初始輸出10hdisp: mov ah,02h int 21h;顯示輸出第一個(gè) inc bl;空白 inc dl;設(shè)置下一個(gè)元素 push dx;推入堆棧 mov dl,20h mov ah,02h int 21h;顯示輸出 pop dx cmp bl,10h;比較確定是否已經(jīng)輸出15行元素 je line;若還未完成輸出,則跳轉(zhuǎn)至line,繼續(xù)進(jìn)行下一行元素的輸出 loop disp jmp short exit line: push dx mov bl,00h;空白 mov dl,0dh;回車 mov ah,02h int 21h mov dl,0
10、ah;換行 mov ah,02h int 21h pop dx jmp short dispexit:retmain endpcode ends end start 八注意:1 系統(tǒng)功能的調(diào)用2空白符的顯示,每行結(jié)束時(shí), 顯示回車(ASC|為0dh)和換行符(ASC|為oah)來結(jié)束本行并開始下一行。實(shí)驗(yàn)三 循環(huán)程序設(shè)計(jì)2一.實(shí)驗(yàn)?zāi)康模簩W(xué)會用循環(huán)程序設(shè)計(jì)進(jìn)行程序編程。二.實(shí)驗(yàn)題目:查找匹配字符串SEARCH三.問題要求: 程序接收用戶鍵入的一個(gè)關(guān)鍵字以及一個(gè)句子。如果句子中不包含關(guān)鍵字則顯示no match;如果句子中包含關(guān)鍵字則顯示match,且把該字在句子中的位置用十六進(jìn)制數(shù)顯示出來,要求
11、程序的執(zhí)行過程如下: enter keyword :abc enter sentence :we are studying abc match at location :11H of the sentence enter sentence: xyz ,ok? no match enter sentence :c四. 方法說明:程序可由三部分組成:(1 ) 輸入關(guān)鍵字和一個(gè)句子,分別存入相應(yīng)的緩沖區(qū)中,可用功能調(diào)用0AH。(2) 在句子中查找關(guān)鍵字。1 關(guān)鍵字和一個(gè)句子中相應(yīng)字段的比較可使用串比較指令,為此必須定義附加段,但附加段和數(shù)據(jù)段可以定義為同一段,以便于串指令的使用,這樣,相應(yīng)的寄存器內(nèi)
12、容也有了確定的含義,如下:SI 寄存器為關(guān)鍵字的指針DI 寄存器為句子中正相比較的字段的指針CX寄存器存放關(guān)鍵字的字母個(gè)數(shù)(長度)2 整個(gè)句子和關(guān)鍵字的比較過程可以用一個(gè)循環(huán)結(jié)構(gòu)來完成。循環(huán)次數(shù)為:(句子長度-關(guān)鍵字長度)+1在計(jì)算循環(huán)次數(shù)時(shí),如遇到句子長度小于關(guān)鍵字長度的情況則應(yīng)轉(zhuǎn)向顯示“no match”,循環(huán)中還需要用到BX寄存器,它用來保存句子中當(dāng)前正在比較字段的首地址。(3) 輸出信息:用功能調(diào)用09h分“找到”或“找不到”兩種情況分別顯示不同的信息。在“找到”時(shí),還要求顯示出匹配字符串在句子中的位置,在“找到”時(shí)BX寄存器的內(nèi)容為匹配字符串的首地址,將此值減到句子的首地址,再將差值
13、加1 即是所要的匹配字符串在句子中的位置,可將位置轉(zhuǎn)換為十六進(jìn)制數(shù)從屏幕上顯示出來。00010001 00000001五. 選作題目: 已知在數(shù)據(jù)區(qū)中DATA1和DATA2開始分別存放N個(gè)字節(jié)數(shù)據(jù),請編寫一個(gè)程序檢查兩數(shù)據(jù)塊中的數(shù)據(jù)是否相同,若完全一致,則將標(biāo)志單元EAG置FFH,否則置0.六 重點(diǎn)和難點(diǎn):(1)輸入關(guān)鍵字和一個(gè)句子,分別存入相應(yīng)的緩沖區(qū)中(2)在句子中查找關(guān)鍵字的位置(3)該關(guān)鍵字在句子中的位置用十六進(jìn)制數(shù)顯示出來七. 程序清單:data segmentstr1 db 80,?,80 dup(?) str2 db 80,?,80 dup(?) hlo1 db 13,10,
14、39;enter ketword:$'hlo2 db 13,10,'enter sentence:$'mes1 db 13,10,'match at location:$'mes2 db 13,10,'no match!$'mes3 db 'h of the sentence,$'tab db '0123456789abcdef'data endsprog segmentmain proc far assume cs:prog,ds:data,es:datastart:push ds mov ax,0 pu
15、sh ax mov ax,data mov ds,ax mov es,axnext:lea dx,hlo1 mov ah,9 int 21h lea dx,str1 mov ah,10 ; 803abc= int 21h lea dx,hlo2 mov ah,9 int 21h lea dx,str2 mov ah,10 ; 806we are int 21h mov al,str2+1 sub al,str1+1 inc al mov bl,al mov bh,1 lea si,str2+2 mov dx,si cld mov ah,1find:mov si,dx lea di,str1+2
16、 mov cl,str1+1 repz cmpsb jz math inc dx inc bh dec bl jnz findnmth:lea dx,mes2 mov ah,9 int 21h jmp next retmath:lea dx,mes1 mov ah,9 int 21h mov al,bh and al,0f0h mov cl,4 shr al,cl mov ah,0 mov si,ax mov dl,tabsi mov ah,2 int 21h mov al,bh and al,0fh mov ah,0 mov si,ax mov dl,tabsi mov ah,2 int 2
17、1h lea dx,mes3 mov ah,9 int 21h jmp next retmain endpprog ends end start八注意:1 功能調(diào)用0AH的使用。2 整個(gè)句子和關(guān)鍵字的比較過程可以用一個(gè)循環(huán)結(jié)構(gòu)來完成。循環(huán)次數(shù)為:(句子長度-關(guān)鍵字長度)+1 3 在“找到”時(shí)BX寄存器的內(nèi)容為匹配字符串的首地址,將此值減到句子的首地址,再將差值加1 即是所要的匹配字符串在句子中的位置,實(shí)驗(yàn)四 分支程序設(shè)計(jì) 在實(shí)際應(yīng)用的程序中,通常遇到根據(jù)某一條件是否成立來進(jìn)行邏輯判斷,以便確定程序的下一步執(zhí)行,這就形成了分支結(jié)構(gòu)程序, 在匯編語言程序設(shè)計(jì)中,分支結(jié)構(gòu)程序設(shè)計(jì)是一種很重要的程序設(shè)
18、計(jì)方法.一.實(shí)驗(yàn)?zāi)康模簩W(xué)會用分支程序設(shè)計(jì)進(jìn)行程序編程。二.實(shí)驗(yàn)題目:分類統(tǒng)計(jì)字符個(gè)數(shù)三.實(shí)驗(yàn)要求: 程序接收用戶鍵入的一行字符(字符個(gè)數(shù)不超過80個(gè),該字符串用回車符結(jié)束),并按字母、數(shù)字及其它字符分類計(jì)數(shù),然后將結(jié)果存入以letter、digit和other為名的存儲單元中。四.方法說明:程序可采用0AH功能調(diào)用把鍵入字符直接送到緩沖區(qū)中,然后再逐個(gè)取出分類計(jì)數(shù),也可采用01H功能調(diào)用在接收字符后先分類計(jì)數(shù)然后再存入緩沖區(qū)中。程序需進(jìn)入debug 運(yùn)行并查看計(jì)數(shù)結(jié)果。五.選作題目:設(shè)在變量ADR為起始地址的字節(jié)存儲單元中存放一組有符號數(shù)據(jù),編寫程序分別統(tǒng)計(jì)1. 正數(shù)的個(gè)數(shù)2. 負(fù)數(shù)的個(gè)數(shù)3.
19、 0的個(gè)數(shù)六 重點(diǎn)和難點(diǎn):(1)按字母、數(shù)字及其它字符分類計(jì)數(shù)(2)將結(jié)果存入以letter、digit和other為名的存儲單元中七. 程序清單:data segment letter db 0 digit db 0 other db 0data endscode segmentmain proc far assume cs:code,ds:datastart: mov letter,0 mov digit,0 mov other,0input :mov ah,01h int 21h cmp al,0dh jz exit cmp al,'a' jb ok cmp al,
20、9;z' ja oth dkh:inc letter jmp input ok:cmp al,'A' jb hello cmp al,'Z' jb dkh ja oth hello:cmp al,'0' jb oth cmp al,'9' ja oth inc digit jmp input oth:inc other jmp input exit:mov ah,4ch int 21h main endp code ends end start八注意:1 程序如采用0AH功能調(diào)用把鍵入字符直接送到緩沖區(qū)中,應(yīng)逐個(gè)取出分類計(jì)
21、數(shù)2 如采用01H功能調(diào)用,在接收字符后先分類計(jì)數(shù)然后再存入緩沖區(qū)中3 如程序沒有輸出,需進(jìn)入debug 運(yùn)行并查看計(jì)數(shù)結(jié)果實(shí)驗(yàn)五 子程序設(shè)計(jì)子程序(過程)是程序設(shè)計(jì)中常用的方法. 子程序結(jié)構(gòu)是模塊化程序設(shè)計(jì)的重要工具。設(shè)計(jì)子程序主要考慮參數(shù)傳遞的方法,參數(shù)傳遞是主程序和子程序之間的接口。一 實(shí)驗(yàn)?zāi)康模簩W(xué)會用子程序設(shè)計(jì)進(jìn)行程序編程。二 實(shí)驗(yàn)題目:查找電話號碼phone三 實(shí)驗(yàn)要求:i. 要求程序建立一個(gè)可存放50項(xiàng)的電話號碼表,每項(xiàng)包括人名(20個(gè)字符)及電話號碼(8個(gè)字符)兩部分;ii. 程序可接收輸入人名及相應(yīng)的電話號碼,并把它們加入電話號碼表中;iii. 凡有新的輸入后,程序應(yīng)按人名對電
22、話號碼表重新排序;iv. 程序可接收需要查找電話號碼的人名,并從電話號碼表中查出其電話號碼,再在屏幕上以如下格式顯示出來。 name tel * *四 實(shí)驗(yàn)提示:程序采用子程序結(jié)構(gòu),主程序的主要部分如下: . 顯示提示符input name:; . 調(diào)用子程序input_name接收人名; . 調(diào)用子程序stor_name把人名存入電話號碼表tel_tab中;. 顯示提示符input a telephone number:; . 調(diào)用子程序inphone接收電話號碼,并把它存入電話號碼表tel_tab中;. 如輸入已結(jié)束則調(diào)用name_sort子程序?qū)﹄娫捥柎a表按人名排序; . 顯示提示符DO
23、 you want a telephone number?(y/n); . 回答N則退出程序; . 回答Y則再顯示提示符 name?; . 調(diào)用子程序input_name接收人名; . 調(diào)用子程序name_search在電話號碼表中查找所要的電話號碼; . 調(diào)用子程序printline按要求格式顯示人名及電話號碼; . 重復(fù)查號提示符直至用戶不再要求查號為止。五選作題目:編制一程序,要求接收從鍵盤輸入的一個(gè)班的學(xué)生成績,并存放于50字的grade數(shù)組中,其中g(shù)rade+i保存學(xué)號為i+1的學(xué)生的成績.然后根據(jù)grade中的學(xué)生成績,把學(xué)生名次填入50字的rank數(shù)組中,其中rank+I的內(nèi)容是
24、學(xué)號為I+1學(xué)生的名次,再按學(xué)號順序把名次從終端上顯示出來.六 重點(diǎn)和難點(diǎn):(1) 程序可建立一個(gè)存放50項(xiàng)的電話號碼表,每項(xiàng)包括人名(20個(gè)字符)及電話號碼(8個(gè)字符)兩部分;(2) 程序可接收輸入人名及相應(yīng)的電話號碼,并把它們加入電話號碼表中;(3) 凡有新的輸入后,程序應(yīng)按人名對電話號碼表重新排序;(4) 程序可接收需要查找電話號碼的人名,并從電話號碼表中查出其電話號碼,再在屏幕上顯示出來。七. 程序清單:data segment bufname db 40,?,38 dup(0),13,10,'$' buftab db 20,?,20 dup(0) hello1 db
25、13,10,'please input name:$' hello2 db 13,10,'please input a tlephone number:$' hello3 db 13,10,'(i.input data)(f.findtel.)(e.exit)','$' helld db 13,10,'name telphone',13,10,'$' tbover db 13,10,'table already over','$' tbtop db ? tbnum d
26、b ? table db 50 dup(20 dup(0),8 dup(0)data endsprog segmentmain proc far assume cs:prog,ds:data,es:datastart: push ds mov ax,0 push ax mov ax,data mov ds,ax mov es,ax mov tbtop,0begin: lea dx,hello3 mov ah,09h int 21h mov ah,01h int 21h cmp al,'i' jnz dispinput: mov al,tbtop cmp al,50 jnc ta
27、bov call inname call intele call store jmp short begin disp: cmp al,'f' jnz next call inname call find jmp short beginnext: cmp al,'e' jz exit jmp short beginexit: rettabov: lea dx,tbover mov ah,09h int 21h jmp short beginmain endpinname proc near push dx lea dx,hello1 mov ah,9 int 21h lea dx,bufname mov ah,10 int 21h pop dx ret
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國彈性墻面涂料行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國無塑餐盒封口紙行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 山東省日照市莒縣高三上學(xué)期期末考試(語文)試卷(含答案)
- 吊車租賃合同范本參考
- 2025加盟合同書樣式
- 貨車包月合同范本
- 范文環(huán)保驗(yàn)收合同范本
- 裝修管理服務(wù)合同范本
- 搭棚施工承包合同
- 2025技術(shù)許可合同
- 五年級上冊口算練習(xí)1000題及答案
- 五年級數(shù)學(xué)(小數(shù)四則混合運(yùn)算)計(jì)算題及答案匯編
- 數(shù)學(xué)六年級上冊《弧長》課件
- 體檢科運(yùn)營可行性報(bào)告
- 廣東省廣州市黃埔區(qū)2023-2024學(xué)年八年級上學(xué)期期末生物試卷+
- 北京市豐臺區(qū)市級名校2024屆數(shù)學(xué)高一第二學(xué)期期末檢測模擬試題含解析
- 設(shè)立項(xiàng)目管理公司組建方案
- 薪酬戰(zhàn)略與實(shí)踐
- 答案之書(解答之書)-電子版精選答案
- 中國古代文學(xué)史 馬工程課件(上)01總緒論
- 上海中心大廈-介紹 課件
評論
0/150
提交評論