




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
南昌大學實驗報告學生姓名:學號:專業(yè)班級:實驗類型:□驗證√綜合□設計□創(chuàng)新實驗日期:12.15實驗成績:實驗5子程序實驗一.實驗目的1.掌握主程序與子程序之間的調用關系及調用方法;2.掌握子程序調用過程中近程調用與遠程調用的區(qū)別;3.掌握通過堆棧轉送參數的方法。4.掌握多模塊程序設計方法二.實驗內容1.將BUF開始的10個單元中的二進制數轉換成兩位十六進制數的ASCII碼,在屏幕上顯示出來。要求碼型轉換通過子程序HEXAC實現(xiàn),在轉換過程中,通過子程序DISP實現(xiàn)顯示。程序代碼:publicmaindatasegmentbufdw12,68,56,57,34,1,46,7,45,54countdb1,2,3,4,5,6,7,8,9,10waitdb',$'dataendscodesegmentassumecs:code,ds:datamain:movax,datamovds,axmovdx,0movcx,0movsi,0movdi,0again:movbx,buf[si]addsi,2callhexacleadx,waitcalldispmovdl,count[di];將count首地址單元內容給dl來記數incdicmpdi,10;顯示所有數后dx為10跳出jeexitjmpagainexit:movah,4chint21hhexacprocnear;二進制轉換為十六進制輸出子程序movch,4rotate:movcl,4rolbx,clmoval,blandal,0fhaddal,30hcmpal,3ahjlprintitaddal,7hprintit:movdl,alcalldisp;近調用dispdecchjnzrotateret;返回doshexacendpdispprocnear;輸出單個字符子程序movah,02hint21hretdispendpcodeendsendmain運行結果:流程圖:2.編寫一個主程序,從鍵盤接收若干個字符,然后用遠調用的方法,調用子程序統(tǒng)計字符串中字符’b’的個數.子程序的參數是字符串的首地址TABLE,字符串長度N及字符”b”.子程序返回字符"b”的個數.參數傳送采用堆棧實現(xiàn).主程序在子程序返回后,顯示字符”b”及其個數(設為一位十六進制數)。程序代碼:publicmain_1dotasegmentmess1db'pleaseinputyourstring,overedbypressenter:$',0ah,0dhmess2db0ah,0dh,'timesofthe"b"appearedis:$'mess7db0ah,0dh,'sorry,thecountsofthe"b"havemorethan15,pleasetryagain$'tabledb50,?,100dup(?),'$'dotaendscodesegmentassumecs:code,ds:datamain_2:movax,datamovds,axleadx,mess1;顯示mess1,提醒輸入字符movah,09hint21hleadx,tablemovah,0ah;輸入字符串int21hleasi,table;si指向串首址tablemovcl,[si+1]movch,0;cx中為字符串長度incsiincsimoval,'b'movah,0pushsipushcxpushax;si,cx,ax依次入棧callcomparepopax;ax出棧,統(tǒng)計個數在al中movcl,alcmpcl,10hjlerrorleadx,mess2;顯示mess2,輸出統(tǒng)計個數movah,09h;將個數轉換為十六進制int21hmovdl,clanddl,0fh adddl,30hcmpdl,39hjlecountsadddl,07herror:leadx,mess3movah,09hint21hcounts:movah,02hint21h;顯示統(tǒng)計個數exit:movah,4chint21hcodeendscode_1segment;比較子程序assumecs:code_1compareprocfarpushbp;bp進棧movbp,sp;棧頂地址給bpmovsi,[bp+10];字符串的第一個字符地址給simovcx,[bp+8];將堆棧中字符串長度給cxmovax,[bp+6];將“b"給axxorah,ahagain:cmpal,[si]jnenext incah;統(tǒng)計b個數next:incsiloopagainmoval,ahmov[bp+10],axpopbp;bp出棧ret4compareendpcode_1endsendmain_2運行結果:流程圖:3.請編寫一個程序來實現(xiàn)簡單的程序菜單顯示。(采用多模塊程序設計方法)顯示一個菜單要求用戶從下表中選擇:(1) HEXACGAME(對應-->程序1)(2) CHARSTATISTICSPROGRAM(對應-->程序2)(3) PRESS“ESC”TOQUIT用戶作出選擇1~3時,顯示輸出要執(zhí)行操作的名字,如“Yourselectionis1,theprogramwillexecuteHEXACNUMBERGAME!”然后轉向相應的程序去執(zhí)行,執(zhí)行結束前進行退出的判斷,顯示一個提示信息“willyoucontinueprogramreally?(Y:N)”要求用戶從鍵盤鍵入字符,若是“Y”鍵,則繼續(xù)程序的執(zhí)行,若是“N”鍵,則返回到菜單。若用戶選擇3,要求程序顯示提示信息“PleasepressESCkeytoexit!”,并能按要求正確退出。程序代碼:dsegsegmentbufdw53,56,78,45,89,65,32,14,12,75countdb1,2,3,4,5,6,7,8,9,10spacedb',$'tabledb50,?,50dup(?),'$'mess0db0dh,0ah,'error!pleaseinputagain!',0dh,0ah,'$'mess1db'pleaseinputyourstring,overedbypressenter:$',$',0ah,0dh,'$'mess2db0ah,0dh,'timesofthe"b"appearedis:$'mess7db0ah,0dh,'sorry,thecountsofthe"b"havemorethan15,pleasetryagain$'mess3db0dh,0ah,'yourselectionis1,theprogramwillexecutehexacnumber.$',0dh,0ah,'$'mess4db0dh,0ah,'yourselectionis2,theprogramwillexecutecharstatisticsprogram$',0dh,0ah,'$'mess5db0dh,0ah,'pleasepressesckeytoexit!$',0dh,0ahmess6db0dh,0ah,'willyoucontinueprogramreally:(y:n)$',0dh,0ahmenusdb0dh,0ah,'menus:',0dh,0ahdb'(1)hexacgames',0dh,0ah db'(2)charstatisticsprogram',0dh,0ah db'(3)press"esc"toquit',0dh,0ah db'pleaseinput1~3:','$'dsegendscsegsegmentassumecs:cseg,ds:dsegstart:movax,dsegmovds,axleadx,menuscalldisp2movax,0movbx,0movcx,0movdx,0movsi,0movdi,0main:subax,axmovah,01hint21hcmpal,33hjzthreecmpal,32hjztwocmpal,31hjzonejmperrone:leadx,mess3calldisp2again:movbx,buf[si]addsi,2callhexacleadx,spacecalldisp2movdl,count[di];將count首地址單元內容給dl來記數incdicmpdl,10;顯示所有數后dx為10跳出jesureexitjmpagaintwo:leadx,mess4calldisp2leadx,mess1;顯示mess1,提醒輸入字符calldisp2leadx,tablemovah,0ah;輸入字符串int21hleasi,table;si指向串首址tablemovcl,[si+1]movch,0;cx中為字符串長度incsiincsimoval,'b'movah,0pushsipushcxpushax;參數送堆棧callcomparepopax;統(tǒng)計個數在al中movcl,alleadx,mess2;顯示mess2,輸出統(tǒng)計個數calldisp2;將個數轉換為十六進制movdl,clanddl,0fh adddl,30hcmpdl,39hjlebelowadddl,07hbelow:movah,02hint21h ;顯示統(tǒng)計個數jmpsureexitsureexit:leadx,mess6calldisp2movah,01hint21hcmpal,'n'jeexitcmpal,'y'jestartjmperrthree:leadx,mess5calldisp2movah,01hint21hcmpal,27jeexitjmperrerr:leadx,mess0calldisp2jmpstartexit:movah,4chint21hcseg1segment;比較子程序assumecs:cseg1compareprocfarpushbpmovbp,spmovsi,[bp+10];字符串的第一個字符地址給simovcx,[bp+8];將堆棧中字符串長度給cxmovax,[bp+6];將“b"給axxorah,ahloop1:cmpal,[si]jnenext incah;統(tǒng)計b個數next:incsilooploop1moval,ahmov[bp+10],axpopbpret4compareendpcseg1endshexacprocnear;二進制轉換為十六進制輸出子程序movch,4rotate:movcl,4rolbx,clmoval,blandal,0fhaddal,30hcmpal,3ahjlprintitaddal,7hprintit:movdl,alcalldisp1;近調用disp1decchjnzrotateret;返回doshexacendpdisp1procnear;輸出單個字符子程序movah,02hint21hretdisp1endpdisp2procnearmovah,09hint21hretdisp2endpcsegendsendstart運行結果:流程圖:三.實驗要求1.第一個實驗程序用子程序的近程調用實現(xiàn)。由于在調用HEXASC子程序時,子程序又調用了DISP子程序,這叫子程序的嵌套調用。實驗過程中可以從堆棧的內容看到兩個子程序的返回地址值。由于是近調用,地址值只包括返回地址的段內偏移量。在每個子程序的執(zhí)行中,檢查CS值是不變的。2.第二個程序是利用遠調用的方法調用子程序的。在遠調用情況下,主程序與子程序處在不同的邏輯代碼段中,可在子程序執(zhí)行中查看CS值,它與主程序中的CS值是不同的。子程序調用后,堆棧中保留了返回地址的段地址及段內偏移量。3.第二個程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年蘭考三農職業(yè)學院單招職業(yè)傾向性測試題庫審定版
- 2025年黃河交通學院單招職業(yè)適應性測試題庫及參考答案
- 2025年重慶市樂山市單招職業(yè)適應性測試題庫帶答案
- 2025年大慶醫(yī)學高等??茖W校單招職業(yè)適應性測試題庫參考答案
- 2025年哈爾濱傳媒職業(yè)學院單招職業(yè)技能測試題庫新版
- 5 g k h 教學設計-2024-2025學年語文一年級上冊統(tǒng)編版
- 環(huán)境科學與工程環(huán)境保護法規(guī)及案例分析試卷解析
- 10 我們當地的風俗 第一課時 教學設計-2023-2024學年道德與法治四年級下冊統(tǒng)編版
- 通信行業(yè)網絡架構優(yōu)化與安全保障方案
- 農業(yè)科技人才培養(yǎng)作業(yè)指導書
- 創(chuàng)業(yè)指導(第二版)技工院校PPT完整全套教學課件
- 月光奏鳴曲全面版
- 2022年湖北省中小學教師高級職稱專業(yè)水平能力測試模擬題
- 住房公積金補償協(xié)議書
- 社會救助綜合信息管理平臺
- 中小學校傳染病預防控制工作管理規(guī)范及常見傳染病預課件
- 住宅項目實體樣板展示工藝策劃圖文并茂
- 數控車床操作培訓課件
- 設備安裝工程監(jiān)理方案
- 工程經濟學-邵穎紅-第五版-課后作業(yè)
- 碩士研究生專業(yè)研究方向證明(模板)
評論
0/150
提交評論