


版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、實驗報告實驗名稱 匯編語言程序設計|專業(yè)班級:信息安全學 號:姓 名:實驗一 匯編語言上機過程和 Debug 常用調(diào)試命令一實驗目的:學習程序設計的基本方法和技能,熟練掌握用匯編語言設計、編寫、調(diào)試和運行 程序的方法。二實驗題目:熟悉與實驗有關的系統(tǒng)軟件 (如編輯程序、匯編程序、連接程序和調(diào)試程序等 ) 的 使用方法。在調(diào)試過程中,學習及掌握 debug 程序的各種操作命令。三問題描述:試編寫一程序:比較兩個字符串 string1 和 string2 所含的字符是否相同,若相 同則顯示 match ' ; 否則,顯示 no match '。四方法說明:a)使用 ws 、tc 或
2、 EDIT 編輯程序來建立源文件,然后存盤,使系統(tǒng)返回 DOS 。b)用匯編程序 masm( 或 asm) 對源文件匯編產(chǎn)生目標文件 obj如:匯編指示出錯則需重新調(diào)用編輯程序修改錯誤,直至匯編通過為止。c) 用連接程序 link 產(chǎn)生執(zhí)行文件 EXE.d) 執(zhí)行程序,可直接從 DOS 執(zhí)行程序。e) 使用 debug 程序調(diào)試程序的方法。五實驗步驟:1 調(diào)用字處理程序 EDIT 建立以 sample.asm 文件datarea segmentstring1db move the cursorbackward. 'string2db move the cursorbackward. &
3、#39;mess1dbMatch. ',13,10, ' $'mess2dbNo match!. ' ,13,10, ' $'datarea endsprognam segmentmain proc farassume cs:prognam,ds:datarea,es:datareastart:push dssub ax,axpush axmov ax,datareamov ds,axmov es,axmatch:disp:mainprognamlea si,string1lea di,string2cldmov cx,25repz cmpsbj
4、z matchlea dx,mess2jmp short displeadx, mess1mov ah,09int 21hretendpendsend start2 對源文件匯編產(chǎn)生目標文件 objD:masm 文件名。 Asm3用連接程序 link 產(chǎn)生執(zhí)行文件 exeD:link 文件名。 Obj4執(zhí)行程序D: 文件名5. 使用 debug 程序調(diào)試程序的方法。d>debug 文件名 .exe1. 用 G 命令運行程序2. 用 U 命令顯示程序3. 學會設置斷點。4. 學會查看數(shù)據(jù)段的內(nèi)容情況D5. 用 E 命令修改數(shù)據(jù)區(qū)的字符串。6. 用 A 命令把數(shù)據(jù)區(qū)的內(nèi)容恢復原狀7. T 命
5、令逐條跟蹤程序的執(zhí)行8. 學會使用F命令、R命令、Q命令等等五、實驗總結第一次進行匯編實驗, 主要是學習程序設計的基本方法和技能, 熟練掌握用匯編語言設 計、編寫、 調(diào)試和運行程序的方法, 只有多上機練習,才能更好的掌握匯編語言程序設計的 思想。實驗二 循環(huán)程序設計 1循環(huán)結構是控制重復執(zhí)行某一程序段的基本程序結構 . 在匯編語言程序設計中 , 循環(huán)程序的地位也是極為重要 ,從本質上來看 , 循環(huán)程序結構是分支程序結構的一種手特殊形式 , 也是使用條件轉移指令來控制執(zhí)行循環(huán)的 .一. 實驗目的:學會用循環(huán)結構進行程序編程。二. 實驗題目:設計一個按表格形式顯示 ASC| 碼為 10H 100H
6、 的所有字符的程序。三. 實驗要求:按 15 行 *16 列的表格形式顯示 ASC| 碼為 10H100H 的所有字符,即以行為主的順序及 ASC| 碼遞增的次序依次顯示對應的字符。 每 16 個字符為一行 ,每行中的相鄰兩個字符之間用空白符 (ASC| 為 0) 隔開。四方法說明:(1) 顯示每個字符可使用功能號為 02 的顯示輸出功能調(diào)用,使用方法 如下:mov ah,02hmov dl,0AHint 21h本題中可把 dl 初始化為 10H, 然后不斷使其加 1( 用 INC 指令) 以取得下一個字符的 ASC| 碼。(2) 顯示空白符時,用其 ASC| 碼 0 置入 dl 寄存器,每行
7、結束時,用 顯示回車(ASC|為Odh)和換行符(ASC|為oah)來結束本行并開始下 一行。(3) 由于逐個顯示相繼的 ASC| 字符時,需要保存并不斷修改 dl 寄存 器的內(nèi)容,而顯示空白、回車、換行符時也需要使用 dl 寄存器,為此 可使用堆棧來保存相繼的 ASC| 字符。具體用法是:在顯示空白或回車, 換行符前用指令push dx 把 dl 的內(nèi)容保存到堆棧中去。在顯示空白或回車, 換行符后用指令pop dx 恢復 dl 寄存器的原始內(nèi)容。五、實驗代碼stack segmentdb 1OO dup (?)stackendscodesegmentassume cs:code,ss:sta
8、ckstart :movdl,10hmovcl,0fhloopc:movah,02hmoval,dlint21hincdlpushdxmovdl,0hmovah,02hmoval,dlint21hpopdxloopnz loopcpushdxmovdl,0dhmovah,02hmoval,dlint21hmovdl,0ahmovah,02hmoval,dlint21hpopdxmovcl,0fhcmpdl,0hjneloopcmovah,4chend startint 21hcodeends六、實驗結果«IXgVK4-w9 H w fUS 6)8GV e t ffl7 F u dsi
9、6ET c5 Ds bCRaBQ.UB_T A oHU!:l 丄-4in3»-m - s a-C.Anft 丿 T r90n1A.1 eM- M 1- o m 1i if - 0 ? JI _J 1 fl'e>M kVLjITr-T-u - IT r orQb ILr _rsi-七、實驗總結本次試驗學會用循環(huán)結構進行程序編程,學好循環(huán)程序是很重要的,在程序設計中,它的地位是極其重要的。實驗三 循環(huán)程序設計 2.實驗目的:學會用循環(huán)程序設計進行程序編程二.實驗題目:設計查找匹配字符串 SEARCH 的程序。三.問題要求:程序接收用戶鍵入的一個關鍵字以及一個句子。如果句子中
10、不包含 關鍵字則顯示' no match '如果句子中包含關鍵字則顯示 match ', 且把該字在句子中的位置用十六進制數(shù)顯示出來,要求程序的執(zhí)行過程 如下:enterkeyword :abcentersentence :we arestudyingabcmatchat location :11H ofthe sentenceentersentence: xyz ,ok?no matchentersentence :Ac四 . 方法說明:程序可由三部分組成:(1 ) 輸入關鍵字和一個句子,分別存入相應的緩沖區(qū)中,可用功能調(diào)用0AH 。(2) 在句子中查找關鍵字。1關鍵
11、字和一個句子中相應字段的比較可使用串比較指令, 為此必 須定義附加段,但附加段和數(shù)據(jù)段可以定義為同一段,以便于串指 令的使用,這樣,相應的寄存器內(nèi)容也有了確定的含義,如下:SI 寄存器為關鍵字的指針DI 寄存器為句子中正相比較的字段的指針CX 寄存器存放關鍵字的字母個數(shù) (長度 )2 整個句子和關鍵字的比較過程可以用一個循環(huán)結構來完成。 循環(huán) 次數(shù)為:(句子長度-關鍵字長度 )+1 在計算循環(huán)次數(shù)時, 如遇到句子長度小 于關鍵字長度的情況則應轉向顯示“ no match ”,循環(huán)中還需要用 到 BX 寄存器,它用來保存句子中當前正在比較字段的首地址。(3) 輸出信息:用功能調(diào)用 09h 分“找
12、到”或“找不到”兩種情況分別顯示不同的 信息。在“找到” 時,還要求顯示出匹配字符串在句子中的位置, 在“找到” 時 BX 寄存器的內(nèi)容為匹配字符串的首地址, 將此值減到句子的首地址, 再 將差值加 1 即是所要的匹配字符串在句子中的位置,可將位置轉換為十六 進制數(shù)從屏幕上顯示出來。五、實驗代碼sseg segment stack dw 256 dup (?) sseg endsdata segmentmsg1 db 'Enterkeyword:' ,24hmsg2 db 'EnterSentence:' ,24hcr db 13,10,24hkeyword d
13、b250, ?,250dup (?)Sentence db match db 'Match match1 db ' of nomatch db 'No data ends250, ?,250 at thedup (?) location:' ,24h sentence' ,13,10,24h match' ,13,10,24hcode segmentassume cs:code,ds:data,ss:sseg disp_hex proc near push ax push cx push dx push ax mov cl,4 ror al,cl
14、 and al,0fh add al,30h cmp al,39h jna d1 add al,7 d1:mov dl,al mov ah,2 int 21hpop ax and al,0fh add al,30h cmp al,39h jna d2 add al,7 d2: mov dl,al mov ah,2 int 21h mov dl, 'h' mov ah,2 int 21h pop dx pop cxpop axret disp_hex endp begin :movax,datamovds,axmoves,axmovdx, offsetmsg1movah,9int
15、21hmovdx, offsetkeywordmovah,0ahint21hcmpkeyword +jequitmovdx, offsetcrmovah,9int21hb1:movdx, offsetmsg2movah,9int21hmovdx, offsetSentencemovah,0ahint21hmovdx, offsetcrmovah,9int21hmovdl,Sentence+1cmpdl,0jequitmovdh,keyword+1movdi, offsetSentence + 2b2:cmpdh,dlja_nomatchmovsi,offsetkeyword + 2movcl,
16、dh1,0movch,0cldpushdirepecmpsbpopdije_matchincdidecdljmpb2_match:movax,disubax, offsetSentenceincaxpushaxmovdx, offsetmatchmovah,9int21hpopaxcalldisp_hexmovdx, offsetmatch1+ 2mov ah,9 int 21h jmp b1 _nomatch:movdx, offsetnomatchmovah,9int21hjmpb1quit:movah,4chint21hcodeendsendbegin六、實驗結果棄 £>
17、J MOFT lA/l3>r-ibinDl .'Te-TYip.exeEnter keyword:wogritgr"Sentenue;ni wo toMatchat location:04hof the sentenceEnter Sentence:haNo matchEnter Sentence:hei na j jNo match七、實驗總結本次試驗主要考察了串比較指令的用法,同時將串指令和REPE聯(lián)合起來用,使得指令變得簡單。實驗中還用到了一些數(shù)據(jù)結構,開始時需要定義空間以及緩沖區(qū)。另外程序需要運用有兩層循環(huán),內(nèi)循環(huán)由CX記錄關鍵字長度控制循環(huán)計數(shù),外循環(huán)是由ax
18、記錄外循環(huán)次數(shù)控制外循環(huán)計數(shù)。通過本次實驗,使我更加熟悉了課堂上知識,還培養(yǎng)了我將理論知識運用到實際編程中 去的能力。實驗四 分支程序設計一. 實驗目的: 學會用分支程序設計進行程序編程。二. 實驗題目:設計一個程序能分類統(tǒng)計字符個數(shù)三. 實驗要求:程序接收用戶鍵入的一行字符 (字符個數(shù)不超過 80 個,該字符串用回 車符結束 ) ,并按字母、數(shù)字及其它字符分類計數(shù),然后將結果存入以 letter 、digit 和 other 為名的存儲單元中。四. 方法說明:程序可采用 0AH 功能調(diào)用把鍵入字符直接送到緩沖區(qū)中,然后再逐 個取出分類計數(shù),也可采用 01H 功能調(diào)用在接收字符后先分類計數(shù)然后
19、再 存入緩沖區(qū)中。程序需進入 debug 運行并查看計數(shù)結果。五實驗代碼DATAS SEGMENTSTRING1 DB 'Input Your String: $' ; 輸入提示信息STRING2 DB 'Digit: $' ;各類字符提示信息STRING3 DB 'Letter: $'STRING5 DB 'Others: $'DIGIT DB 0 ;數(shù)字CHARS DB 0 ; 字母 OTHERS DB 0 ;其他DATAS ENDS CODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV
20、 AX,DATASMOV DS,AXLEA DX,STRING1 ;顯示輸入提示信息MOV AH,9INT 21HMOV CX,100 ;設置循環(huán)次數(shù)足夠大L1:MOV AH,1 ;中斷調(diào)用,單字符輸入INT 21HCMP AL,0DH ;若輸入回車符則結束JZ OVER2CMP AL,30HJB OTHER ;若30H(0) , OTHERS+CMP AL,39H ;若39H(9),跳轉進一步比較JA HIGHER1JMP DIGITAL ;DIGIT+HIGHER1: CMP AL,41H ;if<41H(A),OTHERS+JB OTHERCMP AL,5AH ;if>5AH
21、(Z), 跳轉繼續(xù)比較JA HIGHER2JMP CHAR ;ALPHAU+HIGHER2: CMP AL,61H ;if<61H(a),OTHERS+JB OTHERCMP AL,7AH ;if>7AH(z),OTHERS+JA OTHERJMP CHAR ;ALPHAL+JMP OVER ;比較結束OTHER: INC OTHERS ;OTHERS+JMP OVERDIGITAL: INC DIGIT ;DIGIT+JMP OVERCHAR: INC CHARS ;ALPHAL+JMP OVERJMP OVEROVER:NOPLOOP L1 ;循環(huán),輸入下一字符OVER2:CA
22、LL ENDLINE ;回車換行LEA DX,STRING2 ;輸出提示信息MOV AH,9INT 21HXOR AX,AXMOV AL,DIGIT ;將統(tǒng)計的數(shù)字送 AX ,為輸出做準備CALL DISPLAY ;調(diào)用輸出兩位數(shù)字的子程序CALL ENDLINE ;下同LEA DX,STRING3MOV AH,9INT 21HXOR AX,AXMOV AL,CHARSCALL DISPLAYCALL ENDLINELEA DX,STRING5MOV AH,9INT 21HXOR AX,AXMOV AL,OTHERSCALL DISPLAYMOV AH,4CHINT 21HENDLINE PR
23、OC NEAR ;控制輸出格式,輸出回車換行子程序 MOV AH,2MOV DL,0AHINT 21HMOV AH,2MOV DL,0DHINT 21HRETENDLINE ENDPDISPLAY PROC NEAR ;輸出兩位數(shù)字的子程序MOV BL,1O ;10 送 BLDIV BL ;AX/BL,AL=商,AH=余數(shù)PUSH AX ;保存AX中的信息MOV DL,ALADD DL,3OHMOV AH,2INT 21H ; 輸出十位數(shù)POP AX ;出棧送 AXMOV DL,AHADD DL,3OHMOV AH,2INT 21H ; 輸出個位數(shù)RETDISPLAY ENDPCODES EN
24、DSEND START六實驗總結本次實驗要求我們學會用分支程序設計進行程序編程, 其中運用到許多跳轉和比較指令,只要細心一點,理清思路就能很容易的將本程序編寫出來。實驗五 子程序設計實驗目的:學會用子程序設計進行程序編程。實驗題目:設計一個能查找電話號碼 phone 的程序i. 要求程序建立一個可存放 50 項的電話號碼表, 每項包括人名 (20 個 字符 )及電話號碼 (8 個字符 )兩部分;ii. 程序可接收輸入人名及相應的電話號碼,并把它們加入電話號碼表中;iii. 凡有新的輸入后,程序應按人名對電話號碼表重新排序;iv. 程序可接收需要查找電話號碼的人名,并從電話號碼表中查出其電話號碼
25、,再在屏幕上以如下格式顯示出來。name tel四 實驗提示:程序采用子程序結構,主程序的主要部分如下:. 顯示提示符 input name: ' ;. 調(diào)用子程序 input_name 接收人名;. 調(diào)用子程序 stor_name 把人名存入電話號碼表 tel_tab 中;. 顯示提示符 input a telephone number:' ;. 調(diào)用子程序 inphone 接收電話號碼,并把它存入電話號碼表 tel_tab 中;. 如輸入已結束則調(diào)用 name_sort 子程序對電話號碼表按人名排序;. 顯示提示符 DO you want a telephone numbe
26、r?(y/n) ' ;. 回答 N 則退出程序;. 回答 Y 則再顯示提示符 name ?' ;調(diào)用子程序 input_name 接收人名 ;. 調(diào)用子程序 name_search 在電話號碼表中查找所要的電話號碼;. 調(diào)用子程序 printline 按要求格式顯示人名及電話號碼;. 重復查號提示符直至用戶不再要求查號為止。code五、實驗代碼datasegmenttel_tabdb50 dup( 28 dup(' '); tel_tab 電話本空間tab_lendw0; 已存聯(lián)系人數(shù)目endaddrdw0; 最后一個聯(lián)系人的地址 +28tnamedb21,?,
27、20 dup(' '),?; 姓名緩沖區(qū)tphonedb9,?,8 dup(' '),?; 號碼緩沖區(qū)tempdb28 dup(?); 一個聯(lián)系人的臨時空間inamedb13,10,'Input name:',13,10,'$'iphonedb13,10,'Input a telephone number:',13,10,'$'go_ondb13,10,'Continueinsert? <Y/N>',13,10,'$'提示是否繼續(xù)插入聯(lián)系人snamedb1
28、3,10,'Name?',13,10,'$'name_edb13,10,13,10,'The name has been in the table! Please input again!',13,10,'$'text2db13,10,'Name Tel. ',13,10,'$'text3db13,10,'The name is not in the telephone table!',13,10,'$'text4db13,10,13,10,'Do you w
29、ant a telephone number? <Y/N>',13,10,'$'dataendssegment *1; 主程序mainstart:inname:proc assumefarcs:code ,ds:data,es:datapushds; 保存舊數(shù)據(jù)用于返回subax,axpushaxmovax,data; 數(shù)據(jù)段、附加段初始化movds,axmoves,axleadx,iname; 提示輸入姓名movah,09hint21hcallinput_name; 調(diào)用讀入姓名子程序callname_search; 調(diào)用查找子程序,cmpbx,-1; 如
30、表中不存在該聯(lián)系人jestor; 則跳轉到 storcallcrlf; 回車換行l(wèi)eadx,name_e; 否則提示該聯(lián)系人已在表中,提示重新輸入movah,09hint21hjmpinnamestor:callstor_name; 調(diào)用姓名轉存子程序,把姓名移動到表中l(wèi)eadx,iphone; 提示輸入電話號碼movah,09hint21hcallinphone; 調(diào)用讀入號碼子程序callname_sort; 排序callcrlfleadx,go_on; 提示是否繼續(xù)插入movah,09hint21hchoice1:movah,07; 讀取用戶選擇int21hcmpal,'y
31、9;jeinnamecmpal,'Y'jeinnamecmpal,'n'jeprint_all; 如選擇不插入,則顯示所有記錄cmpal,'N'jeprint_alljmpchoice1print_all:callprintall; 顯示所有記錄want_search:callcrlfleadx,text4; 提示是否查找號碼movah,09int21hcallcrlfchoice2:movah,07; 讀取用戶選擇int21hcmpal,'y'jesearch; 如果為 y 或 Y 則跳轉到查找 searchcmpal,'
32、;Y'jesearchcmpal,'n';為n或N則退出程序jeexit_mcmpal,'N'jeexit_mjmpchoice2search:leadx,sname; 提示用戶輸入要查找的姓名movah,09int21hcallinput_name; 讀入姓名callname_search; 查找callcrlfcallcrlfcmpbx,-1; 是否查找到?jenot_find; (bx)=1 則跳轉到未找到 not_findleadx,text2; 找到則輸出 'NameTel.movah,09int21hcallprintline; 顯示
33、查找到的聯(lián)系人jmpwant_search; 跳轉到提示查找not_find:; 未找到callcrlfleadx,text3;輸出 'The name is not in the telephone table!'movah,09hint21hjmpwant_searchexit_m:retprintallprocnear *;顯示所有電話。顯示電話表中的所有姓名和號碼,查看排序結果是否正確callcrlfcallcrlfleadx,text2; 輸出 'Namemovah,09int21hleabx,tel_tab; 號碼表基址rept1:callprintline
34、; 顯示聯(lián)系人addbx,28; 求 下一個聯(lián)系人首地址cmpbx,endaddr; 是否到達表尾?jbrept1; 未到達則繼續(xù)顯示retprintallendpTel.;輸入姓名子程序:讀入姓名到 tname 緩沖區(qū),并把不滿 20 位的部分;補上空格(方便查找時的比較)input_nameret endpinput_nameproc callnear crlfnoinputn:leadx,tname; 姓名緩沖區(qū)movah,0ah; 調(diào)用 dos 0ah 讀入字符串功能int21hcmptname1,0; 如果輸入為回車jenoinputn; 繼續(xù)等待輸入xorbx,bxmovbl,tn
35、ame1movcx,20subcx,bxset_blank: movtnamebx+2,20h ;把不滿 20 位的部分補空格incbxloopset_blankcallcrlf;stor_name ,該子程序把 tname 緩沖區(qū)的姓名轉存入號碼表中stor_name proc nearxor mov lea mov cld rep inc add retcx,cxcl,tname1;字符個數(shù)si,tname2di,endaddrmovsbtab_len;聯(lián)系人人數(shù)增 1endaddr,28;最后一個聯(lián)系人地址增 28 stor_name endp;獲取號碼子程序:讀入用戶輸入的號碼到tph
36、one 緩沖區(qū),然后;轉存入號碼表對應位置inphoneprocnearnoinputp:callcrlfleadx,tphonemovah,0ahint21h;調(diào)用 dos 0a 號功能輸入字符串cmptphone1,0;判斷輸入是否為回車jenoinputp;是,則繼續(xù)等待輸入xorcx,cxmovcl,tphone1leasi,tphone2movdi,endaddrsubdi,8;待插入位置cldrepmovsb;移動retinphoneendp;排序子程序(用直接插入排序) ,對號碼表進行按人名從小到大排序name_sort procnearcmptab_len,1;記錄數(shù) 1,不用排序jeexitnleadi,tel_tab;第一
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公寓安裝櫥柜合同范本
- 勞務合同范本版一
- 出租土地建設合同范本
- 加盟合同范本找
- 勞務外包個人合同范本
- 個人購買商鋪合同范本
- 代辦合同范本寫
- 住宅租賃居間合同范本
- 凱迪拉克訂購合同范本
- 2025年羧甲淀粉鈉合作協(xié)議書
- 家校共育之道
- 公司EHS知識競賽題庫附答案
- DeepSeek入門寶典培訓課件
- 社區(qū)健康促進工作計劃
- 《作文中間技巧》課件
- 2025年度移動端SEO服務及用戶體驗優(yōu)化合同
- 中小學《清明節(jié)活動方案》班會課件
- 廣東省2025年中考物理仿真模擬卷(深圳)附答案
- 新蘇教版一年級下冊數(shù)學第1單元第3課時《8、7加幾》作業(yè)
- 2024年山東電力高等??茖W校高職單招職業(yè)技能測驗歷年參考題庫(頻考版)含答案解析
- 特殊教育學校2024-2025學年度第二學期教學工作計劃
評論
0/150
提交評論