子程序與模塊化程序設(shè)計(jì)_第1頁
子程序與模塊化程序設(shè)計(jì)_第2頁
子程序與模塊化程序設(shè)計(jì)_第3頁
子程序與模塊化程序設(shè)計(jì)_第4頁
子程序與模塊化程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、課課 程程 實(shí)實(shí) 驗(yàn)驗(yàn) 報(bào)報(bào) 告告課程名稱:課程名稱: 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 實(shí)驗(yàn)名稱:實(shí)驗(yàn)名稱: 實(shí)驗(yàn)地點(diǎn):實(shí)驗(yàn)地點(diǎn): 南一樓南一樓 804804 室室 指導(dǎo)教師:指導(dǎo)教師: 李專李專 專業(yè)班級:學(xué)專業(yè)班級:學(xué) 號:號: 姓姓 名:名: 同組學(xué)生:同組學(xué)生: 報(bào)告日期:報(bào)告日期: 成績:成績: 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院目錄目錄1 實(shí)驗(yàn)?zāi)康呐c要求.12 實(shí)驗(yàn)內(nèi)容.13 實(shí)驗(yàn)過程.23.1 實(shí)驗(yàn)?zāi)康?23.1.1 設(shè)計(jì)思想.23.1.2 源程序代碼.23.2 實(shí)驗(yàn)?zāi)康?63.2.1 設(shè)計(jì)思想.63.2.2 源程序代碼.63.3 實(shí)驗(yàn)結(jié)果.124 實(shí)驗(yàn)體會(huì) .12匯匯

2、編編 語語 言言 程程 序序 設(shè)設(shè) 計(jì)計(jì) 實(shí)實(shí) 驗(yàn)驗(yàn) 報(bào)報(bào) 告告11實(shí)驗(yàn)?zāi)康呐c要求實(shí)驗(yàn)?zāi)康呐c要求(1) 掌握子程序參數(shù)傳遞的 3 種方式,特別是利用堆棧傳遞參數(shù)的方法;(2)掌握模塊化程序設(shè)計(jì)的方法;(3)進(jìn)一步熟悉 TD 的使用,并加深對常用 DOS 功能調(diào)用的理解;2 實(shí)驗(yàn)內(nèi)容實(shí)驗(yàn)內(nèi)容任務(wù):編寫程序?qū)崿F(xiàn)類似 C 語言函數(shù) scanf()和 printf()的功能:先從鍵盤輸入一個(gè)N1 進(jìn)制的有符號字符串,再以 N2 進(jìn)制的形式顯示出來,N1 和 N2 由鍵盤輸入。例如:Input N1: 16Input N2: 10Input string: -7FFF Output: -32767 (屏

3、幕顯示)提示:首先需要一個(gè)子程序?qū)?N1 進(jìn)制的字符串轉(zhuǎn)換為二進(jìn)制數(shù),然后還需要一個(gè)子程序?qū)⒍M(jìn)制數(shù)轉(zhuǎn)換為 N2 進(jìn)制的字符串。要求:(1) 用子程序 scanfAsm 實(shí)現(xiàn)將 N1 進(jìn)制的字符串轉(zhuǎn)換為二進(jìn)制的有符號數(shù):子程序參數(shù):子程序參數(shù): DS:SI 指向字符串的首地址 (可能有正負(fù)號,字符串以 0結(jié)尾)BASE = N1 (BASE 是由主程序在數(shù)據(jù)段中用 DB 定義的變量)(AX) = 轉(zhuǎn)換結(jié)果(2) 用子程序 printAsm 實(shí)現(xiàn)將二進(jìn)制有符號數(shù)轉(zhuǎn)換為 N2 進(jìn)制的字符串,調(diào)用printAsm 的方法如下:PUSH需要轉(zhuǎn)換的二進(jìn)制數(shù)PUSHN2;將二進(jìn)制數(shù)轉(zhuǎn)換為該數(shù)制的字符串PU

4、SH緩沖區(qū)段地址;轉(zhuǎn)換結(jié)果保存在該緩沖區(qū)中PUSH緩沖區(qū)偏移地址CALLFAR PTR printAsmADDSP, 8匯匯 編編 語語 言言 程程 序序 設(shè)設(shè) 計(jì)計(jì) 實(shí)實(shí) 驗(yàn)驗(yàn) 報(bào)報(bào) 告告2(3) 主程序、子程序 scanfAsm、子程序 printAsm 分別定義在模塊mainIO.asm、scanfAsm.asm、printAsm.asm 中;(4) 畫出 2 個(gè)子程序流程圖,給出寄存器、存儲(chǔ)單元的分配方法;(5) 對于每種數(shù)制,至少輸入正負(fù)數(shù)字符串各一個(gè)進(jìn)行測試。3實(shí)驗(yàn)過程實(shí)驗(yàn)過程3.1 實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)?zāi)康?用子程序 scanfAsm 實(shí)現(xiàn)將 N1 進(jìn)制的字符串轉(zhuǎn)換為二進(jìn)制的有符號數(shù)3.

5、1.1 設(shè)計(jì)思想設(shè)計(jì)思想用一個(gè) check 函數(shù)檢查輸入的字符串中是否存在非法的字符,如果全部通過,則通過一個(gè)循環(huán)將其轉(zhuǎn)換為二進(jìn)制的字符,保存在 ax 中。3.1.2 源程序代碼源程序代碼.386data segment use16tip1 db Input Error!rf db 0ah,0dh,$mark db ?base dw ?data endsstack segment use16 stackdb 20 dup(?)stack ends;check,寄存器傳參,判斷輸入字符是否符和進(jìn)制數(shù);cl 為進(jìn)制,ch 為字符,;正確時(shí),返回 ch 為實(shí)際數(shù),;錯(cuò)誤時(shí),輸出 tip1,并返回 d

6、oscode segment use16assume cs:code,ds:data,ss:stackcheck proc farsub ch,0cmp ch,10匯匯 編編 語語 言言 程程 序序 設(shè)設(shè) 計(jì)計(jì) 實(shí)實(shí) 驗(yàn)驗(yàn) 報(bào)報(bào) 告告3jge l1;不是數(shù)字字符跳轉(zhuǎn)l4: ;比較 ch 是否在 0-clcmp ch,0jge l2jmp exit2;輸入字符小于 0l2:cmp ch,cljge l3jmp exit1l3: ;輸入字符大于進(jìn)制數(shù)jmp exit2l1: ;輸入字符為字母時(shí)sub ch,A-0;判斷是否為字母cmp ch,0jge l6jmp exit2;不為字母l6:cmp

7、ch,26;26 個(gè)大寫字母jge l5;輸入字符不是大寫字母add ch,10;A代表 10jmp l4l5: ;判斷字符是否為小寫字母sub ch,a-Acmp ch,0jge l7jmp exit2l7:cmp ch,26jll8jmp exit2l8:add ch,10jmp l4exit1:;正確時(shí)調(diào)用ret匯匯 編編 語語 言言 程程 序序 設(shè)設(shè) 計(jì)計(jì) 實(shí)實(shí) 驗(yàn)驗(yàn) 報(bào)報(bào) 告告4exit2:;錯(cuò)誤時(shí)調(diào)用mov ax,datamov ds,axlea dx,tip1mov ah,9int 21hpop cx;清除棧 ipmov ah,4chint 21hcheck endppublic

8、 check;scanfAsm,堆棧傳參,入棧順序,ds,si,word ptr base;DS:si,指向字符串首地址,可有正負(fù)號,字符串以 0 結(jié)尾;Base=n1(db);輸出 ax 為轉(zhuǎn)換結(jié)果scanfAsm proc farpush bpmov bp,sppush sipush cxpush bxpush dspush esmov ax,datamov ds,ax;獲取參數(shù)mov cx,bp+6mov si,bp+8mov ax,bp+10mov es,axxor ax,axmov base,cxmov mark,0;用于判斷是否為負(fù)數(shù);獲取第一個(gè)字符,判斷是否為符號匯匯 編編 語語

9、 言言 程程 序序 設(shè)設(shè) 計(jì)計(jì) 實(shí)實(shí) 驗(yàn)驗(yàn) 報(bào)報(bào) 告告5;不是符號則繼續(xù),是符號則跳過mov ch,byte ptr es:sicmp ch,-jne sl1inc simov mark,1jmp sl3sl1:cmp ch,+jne sl3inc sisl3: ;循環(huán)轉(zhuǎn)換mov ch,byte ptr es:sicmp ch,0jne sl4jmp sl5sl4:call far ptr checkmovsx bx,chimul baseadd ax,bxinc sijmp sl3sl5:cmp mark,1jne sl2neg axsl2:pop espop dspop bxpop cxp

10、op sipop bpret scanfAsm endppublic scanfAsm匯匯 編編 語語 言言 程程 序序 設(shè)設(shè) 計(jì)計(jì) 實(shí)實(shí) 驗(yàn)驗(yàn) 報(bào)報(bào) 告告6code endsend3.2 實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)?zāi)康?用子程序 printAsm 實(shí)現(xiàn)將二進(jìn)制有符號數(shù)轉(zhuǎn)換為 N2 進(jìn)制的字符串3.2.1 設(shè)計(jì)思想設(shè)計(jì)思想 先通過一個(gè)一個(gè)循環(huán),將余數(shù)逆序保存在一個(gè)緩存區(qū)中,然后順序替換目標(biāo)緩存區(qū)的值。3.2.2 源程序代碼源程序代碼.386num equ 20data segment use16tab db 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZbuf db num dup

11、(?),$base dw ?data endsstack segment use16 stackdb 20 dup(?)stack endscode segment use16assume cs:code,ds:data,ss:stack;調(diào)用方法如下;PUSH 需要轉(zhuǎn)換的二進(jìn)制數(shù);PUSH N2;將二進(jìn)制數(shù)轉(zhuǎn)換為該數(shù)制的字符串;PUSH 緩沖區(qū)段地址;轉(zhuǎn)換結(jié)果保存在該緩沖區(qū)中;PUSH 緩沖區(qū)偏移地址;CALL FAR PTR printAsm;ADDSP, 8printAsm proc farpush bpmov bp,sppush axpush bxpush espush si匯匯 編編

12、 語語 言言 程程 序序 設(shè)設(shè) 計(jì)計(jì) 實(shí)實(shí) 驗(yàn)驗(yàn) 報(bào)報(bào) 告告7push dxpush dspush dimov ax,datamov ds,axmov si,bp+6mov ax,bp+8mov es,axmov bx,bp+10mov base,bxmov ax,bp+12xor dx,dxmov di,num-1;判斷是否為負(fù)數(shù),是時(shí)輸出一個(gè)負(fù)號cmp ax,0jge l1neg axmov byte ptr es:si,-inc sil1: ;循環(huán)輸出字符xor dx,dxdiv basemov bx,dxmov dl,tabbx;mov byte ptr es:si,dlmov buf

13、di,dldec dicmp ax,0je exitjmp l1exit:mov dl,bufdi+1mov byte ptr es:si,dlinc diinc sicmp dl,$匯匯 編編 語語 言言 程程 序序 設(shè)設(shè) 計(jì)計(jì) 實(shí)實(shí) 驗(yàn)驗(yàn) 報(bào)報(bào) 告告8jne exit;mov byte ptr es:si,$pop dipop dspop dxpop sipop espop bxpop axpop bpretprintAsm endppublic printAsmcode endsEndmainIO.asm 設(shè)計(jì)思想:通過堆棧調(diào)用函數(shù)的形式調(diào)用 scanfAsm 和printAsm 即可。

14、代碼如下:.386extrn check:farextrn scanfAsm:farextrn printAsm:fardata segment use16tip1 db Input N1:$tip2 db Input N2:$tip3 db Input String:$tip4 db Output:$rf db 0ah,0dh,$n1 db ?n2 db ?ten dw 10inString db 10 len db ? db 10 dup(?)outString db 20 dup(?)data endsstack segment use16 stack匯匯 編編 語語 言言 程程 序序

15、設(shè)設(shè) 計(jì)計(jì) 實(shí)實(shí) 驗(yàn)驗(yàn) 報(bào)報(bào) 告告9db 200 dup(?)stack endscode segment use16assume cs:code,ds:data,ss:stackstart:mov ax,datamov ds,axlea dx,tip1mov ah,09hint 21hlea dx,inStringmov ah,0ahint 21hlea dx,rfmov ah,09hint 21hcall stonmov n1,allea dx,tip2mov ah,09hint 21hlea dx,inStringmov ah,0ahint 21hlea dx,rfmov ah,09hi

16、nt 21hcall stonmov n2,allea dx,tip3mov ah,09hint 21h匯匯 編編 語語 言言 程程 序序 設(shè)設(shè) 計(jì)計(jì) 實(shí)實(shí) 驗(yàn)驗(yàn) 報(bào)報(bào) 告告10lea dx,inStringmov ah,0ahint 21hlea dx,rfmov ah,09hint 21hxor bx,bxmov bl,inString+1mov byte ptr inStringbx+2,0;調(diào)用 scanfAsmpush dslea dx,inString+2push dxmovsx cx,n1push cxcall far ptr scanfAsmadd sp,6;調(diào)用 printA

17、sm;mov ax,8001h;mov n2,10push axmovsx bx,n2push bxpush dslea bx,outStringpush bxcall far ptr printAsmadd sp,8;輸出字符串lea dx,tip4mov ah,9hint 21hlea dx,outStringint 21hmov ah,4chint 21h匯匯 編編 語語 言言 程程 序序 設(shè)設(shè) 計(jì)計(jì) 實(shí)實(shí) 驗(yàn)驗(yàn) 報(bào)報(bào) 告告11;將輸入字符串轉(zhuǎn)為數(shù)字,保存在 ax 中ston procmov cl,10 xor bx,bxxor dx,dxxor ax,axL1: cmp bl,lenjlconjmp exit1con:mov ch,inStringbx+2call far ptr checkimul tenmovsx dx,chadd ax,dxinc bxjmp L1exit1:retston endpcode endsend start匯匯 編編 語語 言言 程程 序序 設(shè)設(shè) 計(jì)計(jì) 實(shí)實(shí) 驗(yàn)驗(yàn) 報(bào)報(bào) 告告123.3 實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)結(jié)果4 實(shí)驗(yàn)體會(huì)實(shí)驗(yàn)體會(huì)通過此次試驗(yàn)使我對于匯編語言子程序的編寫和調(diào)用有了更加清晰的認(rèn)識,對子程序在內(nèi)存中物理過程更加清楚。根據(jù)在模塊化程序設(shè)計(jì)思想,我們在編

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論