版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 匯編語言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書匯編語言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書計(jì)算機(jī)系 宋勤 2013-5匯編語言實(shí)驗(yàn)學(xué)時(shí)分配表序號(hào)實(shí)驗(yàn)項(xiàng)目名稱實(shí)驗(yàn)學(xué)時(shí)實(shí)驗(yàn)報(bào)告或作業(yè)課內(nèi)課外1匯編語言程序上機(jī)過程以及調(diào)試2212順序程序設(shè)計(jì)2213循環(huán)程序設(shè)計(jì)2214分支程序設(shè)計(jì)2215子程序設(shè)計(jì)2216I/O程序設(shè)計(jì)2217實(shí)驗(yàn)七 綜合程序設(shè)計(jì)程序設(shè)計(jì)221合計(jì)14147實(shí)驗(yàn)一匯編語言程序上機(jī)過程以及調(diào)試一、預(yù)習(xí)內(nèi)容1.工具軟件MASM、LINK的使用2.常用DEBUG命令的使用: G,D,R,T,U,Q3.完整程序設(shè)計(jì)方法的格式。二、目的要求1.掌握常用工具軟件MASM、LINK的使用2.掌握常用DEBUG命令: G,D,R,T
2、,U,Q 能靈活使用這些命令調(diào)試程序3.掌握完整程序設(shè)計(jì)方法的格式,能正確書寫數(shù)據(jù)段,代碼段等。三、實(shí)驗(yàn)內(nèi)容用兩種方法把字符串mess1復(fù)制到mess2串中去;(1) 從左到右的方向復(fù)制(2) 從右到左的方向復(fù)制data segment mess1 db my name is songqin $data endsEXTRA segment mess2 db 17 dup(?)EXTRA ends;*code segment assume cs:code, DS:DATA, ES:EXTRA start: mov ax,DATA MOV ds,ax mov ax,EXTRA MOV es,ax
3、leA si,mess1 leA di,mess2 mov cx,017 CLD rep movsB ret code ends end start 實(shí)驗(yàn)步驟:1)用文字編輯工具(記事本或EDIT)將源程序輸入完整后保存在D:masm50下,注意保存時(shí)將文件擴(kuò)展名改為.asm(如P77.asm)。2)打開桌面的“命令提示符” 程序進(jìn)入dos命令操作,先用cd masm50 命令改變路經(jīng),接著用 ”masm + 文件名” (如 masm P77,這里文件名可以不帶擴(kuò)展名) 對(duì)源文件進(jìn)行匯編,產(chǎn)生.obj文件和.LST文件。若匯編時(shí)提示有錯(cuò),用文字編輯工具修改源程序后重新匯編,直至通過。3)用 ”
4、link + 文件名” (如 link P77;) 將.obj文件連接成可執(zhí)行的.exe文件(P77.exe)。4)用debug調(diào)試程序,熟悉debug命令的使用:(1)打 debug P77.exe 進(jìn)入debug 控制,顯示提示符 - 。(2)用命令g執(zhí)行程序,可得與步驟4相同的結(jié)果,也可用T命令逐條運(yùn)行這些指令,每運(yùn)行一行檢查并記錄有關(guān)寄存器及IP的變化情況,并注意標(biāo)志位有無變化。(3)用命令u檢查鍵入的程序并記錄,特別注意左邊的機(jī)器碼和指令地址。如果一條u命令沒有顯示完全,可以再次輸入u命令,該命令會(huì)緊接著上一個(gè)命令的輸出繼續(xù)顯示。(4)用命令g+地址設(shè)置斷點(diǎn),如g06,表示將斷點(diǎn)設(shè)置
5、在代碼段的偏移地址為06h的指令前,并執(zhí)行到該斷點(diǎn)前。其中,命令中的地址項(xiàng)可以從上條命令u的運(yùn)行結(jié)果獲得。(5)用命令r查看各寄存器的情況。(6)用命令d0查看數(shù)據(jù)段的情況,0表示從偏移地址0開始,也可以指定其他偏移地址值。(7)用命令 e+地址的方式修改數(shù)據(jù)區(qū)的字符串,其中地址指需要修改的數(shù)據(jù)段內(nèi)存單元偏移地址,可根據(jù)上條d0命令獲得。如e 09 表示從偏移地址09h開始修改數(shù)據(jù)。(8)再次用命令g執(zhí)行程序,查看執(zhí)行結(jié)果。(9)用命令q退出debug,如果在上述步驟中碰到異常,可以先用q命令退出后再進(jìn)入調(diào)試。四、實(shí)驗(yàn)報(bào)告或作業(yè)1分析程序,畫出程序流程圖2匯編,連接及調(diào)試時(shí)產(chǎn)生的錯(cuò)誤,其原因及
6、解決辦法。3思考:1) 上述實(shí)驗(yàn)中用e修改數(shù)據(jù)段的內(nèi)容,是否改變?cè)募77.asm的內(nèi)容?2) 用單步執(zhí)行命令t運(yùn)行程序, 運(yùn)行到mov ax, 4c00h, int 21h指令后,cs和ip寄存器內(nèi)容前后有何變化,產(chǎn)生變化的原因是什么?附:DEBUG 使用:1打 DEBUG 進(jìn)入 DEBUG,顯示提示符 - 。2退出DEBUG命令:Q3顯示內(nèi)存命令:D 起始地址 結(jié)束地址4修改內(nèi)存命令:E 起始地址,連續(xù)修改打空格鍵。打回車鍵退出E命令。5檢查寄存器命令:R標(biāo)志位顯示10CFCYNCZFZRNZSFNGPLAFACNAOFOVNVPFPEPODFDNUPIFEIDI6修改寄存器命令:R 寄
7、存器名7小匯編命令:A 起始地址,不輸入指令打回車鍵退出A命令。8反匯編命令:U 起始地址 結(jié)束地址9文件命名命令:N 盤號(hào):文件名10讀文件命令:L 內(nèi)存地址11寫文件命令:W 內(nèi)存地址10讀扇區(qū)命令:L 內(nèi)存地址 盤號(hào)(0-A:,1-B:) 扇區(qū)號(hào) 扇區(qū)數(shù)11寫扇區(qū)命令:W 內(nèi)存地址 盤號(hào) 扇區(qū)號(hào) 扇區(qū)數(shù)12運(yùn)行命令:G=起始地址 結(jié)束(斷點(diǎn))地址13單步命令:T=起始地址 運(yùn)行指令數(shù),進(jìn)入子程序內(nèi)部。14單步命令:P=起始地址 運(yùn)行指令數(shù),不進(jìn)入子程序內(nèi)部。15內(nèi)存搬家命令:M 起始地址 結(jié)束地址 目的地址標(biāo)志位顯示10CFCYNCZFZRNZSFNGPLAFACNAOFOVNVPFPE
8、PODFDNUPIFEIDI6修改寄存器命令:R 寄存器名7小匯編命令:A 起始地址,不輸入指令打回車鍵退出A命令。8反匯編命令:U 起始地址 結(jié)束地址9文件命名命令:N 盤號(hào):文件名10讀文件命令:L 內(nèi)存地址11寫文件命令:W 內(nèi)存地址10讀扇區(qū)命令:L 內(nèi)存地址 盤號(hào)(0-A:,1-B:) 扇區(qū)號(hào) 扇區(qū)數(shù)11寫扇區(qū)命令:W 內(nèi)存地址 盤號(hào) 扇區(qū)號(hào) 扇區(qū)數(shù)12運(yùn)行命令:G=起始地址 結(jié)束(斷點(diǎn))地址13單步命令:T=起始地址 運(yùn)行指令數(shù),進(jìn)入子程序內(nèi)部。14單步命令:P=起始地址 運(yùn)行指令數(shù),不進(jìn)入子程序內(nèi)部。15內(nèi)存搬家命令:M 起始地址 結(jié)束地址 目的地址實(shí)驗(yàn)二 順序程序設(shè)計(jì)一、預(yù)習(xí)內(nèi)
9、容1常用工具軟件MASM、LINK和DEBUG的使用2完整程序設(shè)計(jì)方法的格式3匯編語言順序結(jié)構(gòu)程序的設(shè)計(jì)方法二、目的要求1繼續(xù)熟悉常用工具軟件MASM、LINK和DEBUG的使用2繼續(xù)熟悉完整程序設(shè)計(jì)方法的格式3學(xué)習(xí)與掌握匯編語言順序結(jié)構(gòu)程序的設(shè)計(jì)方法三、實(shí)驗(yàn)內(nèi)容編程實(shí)現(xiàn)datax雙字除以字datay(用div),并且把商存入quotient字單元,把余數(shù)存入remainder字單元(具體數(shù)值可自行確定)。并且用debug查看程序的運(yùn)行結(jié)果,檢查程序運(yùn)行結(jié)果的正確性。DSEG SEGMENT datax dd 956123h datay dw 123hquotient dw ?remainde
10、r dw ?DSEG ENDSCSEG SEGMENT assume cs:CSEG, ds:DSEG start:mov ax, dseg mov ds, axmov ax,dataxmov dx,datax2div dataymov quotient,axmov remainder,dxmov ax, 4c00h int 21h CSEG ENDSend start實(shí)驗(yàn)步驟:1用文字編輯工具(記事本或EDIT)將源程序輸入完整后保存在D:masm50下,注意保存時(shí)將文件擴(kuò)展名改為.asm(如lab2.asm)。2用masm對(duì)源文件進(jìn)行匯編,產(chǎn)生.obj(如lab2.obj)文件和.LST文
11、件。若匯編時(shí)提示有錯(cuò),用文字編輯工具修改源程序后重新匯編,直至通過。3用 link將.obj文件連接成可執(zhí)行的.exe文件(lab2.exe)。4直接運(yùn)行l(wèi)ink產(chǎn)生的.exe文件。5用debug調(diào)試程序,單步執(zhí)行程序,并記錄黑體部分單步執(zhí)行后ax,dx,cs,ip寄存器以及標(biāo)志寄存器的值.6在debug狀態(tài)下,用“a+偏移地址”的方式將程序的div 改為idiv再單步執(zhí)行黑體部分,對(duì)比步驟5的結(jié)果,查看有何變化,并記錄。7修改源程序?qū)崿F(xiàn)雙字datax 與字datay的無符號(hào)乘法。四、實(shí)驗(yàn)報(bào)告或作業(yè)1分析程序,畫出程序流程圖。2匯編,連接及調(diào)試時(shí)產(chǎn)生的錯(cuò)誤,其原因及解決辦法。3步驟5的結(jié)果記錄
12、。4步驟6的結(jié)果記錄,并分析發(fā)生變化的原因。5思考:1) 指令mov dx,datax2 改寫成 mov dx,datax+2 經(jīng)過匯編后,二者是否相同,為什么?2) 如何實(shí)現(xiàn)雙字datax 與字datay的乘法,寫出完整的源程序。實(shí)驗(yàn)三 循環(huán)程序設(shè)計(jì)A-A實(shí)驗(yàn)A (必做)一、 實(shí)驗(yàn)?zāi)康模? 掌握循環(huán)程序的設(shè)計(jì)方法2 進(jìn)一步熟悉利用DEBUG程序修改參數(shù)的方法,并檢查和驗(yàn)證結(jié)果的正確性。3 學(xué)會(huì)針對(duì)不同的問題,選用不同的組織循環(huán)的方法。二、 實(shí)驗(yàn)內(nèi)容1 編寫一個(gè)程序,用二進(jìn)制顯示從鍵盤輸入一個(gè)字符的ASCII碼。2 編寫一個(gè)程序,記錄某個(gè)字存儲(chǔ)單元數(shù)據(jù)中1的個(gè)數(shù),以十進(jìn)制形式顯示結(jié)果。 三、
13、實(shí)驗(yàn)準(zhǔn)備1 編寫實(shí)驗(yàn)內(nèi)容要求的兩個(gè)程序。2 寫出調(diào)試以上程序,即修改程序參數(shù),檢查結(jié)果的操作方法。3 熟悉源程序匯編、連接命令的使用方法即要回答的內(nèi)容。四、 實(shí)驗(yàn)步驟1 用EDIT或其它編輯軟件,編寫.ASM源程序,例如Binary.ASM及Statistic.ASM。2 對(duì)其進(jìn)行匯編及連接,產(chǎn)生.EXE文件。3 對(duì).EXE文件進(jìn)行調(diào)試運(yùn)行。a. 用DEBUG調(diào)試運(yùn)行,學(xué)會(huì)修改AL內(nèi)容的方法。b. 對(duì)DSPKEY.EXE鍵入不同的字符,分別進(jìn)行調(diào)試。c. 在MS-DOS下運(yùn)行這兩個(gè).EXE文件。五、 實(shí)驗(yàn)報(bào)告要求 畫出兩個(gè)程序的流程圖,若要獨(dú)立編寫程序,應(yīng)列出相應(yīng)的程序清單。六、 參考程序段清
14、單:;Binary.asmmov cx,8;CX8(循環(huán)次數(shù))again:shl bl,1;左移進(jìn)CF,從高位開始顯示mov dl,0;MOV指令不改變CFadc dl,30h;DL030HCF;CF若是0,則DL 0 ;CF若是1,則DL 1 mov ah,2int 21h;顯示loop again;CX減1,如果CX未減至0,則循環(huán);Statistic.ASM;數(shù)據(jù)段numberdw 1110111111100100B;代碼段mov bx,numberxor dl,dl;循環(huán)初值:DL0again:test bx,0ffffh;也可以用cmp bx,0jz done;全部是0就可以退出循環(huán)
15、,減少循環(huán)次數(shù)shl bx,1;用指令shr bx,1也可以adc dl,0;利用ADC指令加CF的特點(diǎn)進(jìn)行計(jì)數(shù)jmp againdone:cmp dl,10;判斷1的個(gè)數(shù)是否小于10jb digit;1的個(gè)數(shù)小于10,轉(zhuǎn)移push dxmov dl,1;1的個(gè)數(shù)大于或等于10mov ah,2;則要先顯示一個(gè)1int 21hpop dxsub dl,10digit:add dl,0;顯示個(gè)數(shù)mov ah,2int 21hA-ABB實(shí)驗(yàn) B一、預(yù)習(xí)內(nèi)容1多重循環(huán)程序和排序程序設(shè)計(jì)方法。2帶符號(hào)數(shù)的比較轉(zhuǎn)移指令:JL,JLE,JG,JGE二、目的要求1掌握多重循環(huán)程序和排序程序設(shè)計(jì)方法。2掌握帶符
16、號(hào)數(shù)的比較轉(zhuǎn)移指令:JL,JLE,JG,JGE三、實(shí)驗(yàn)內(nèi)容建立學(xué)生名次表,以grade為首地址的數(shù)組中保存了學(xué)生的成績,其中 grade+i 保存學(xué)號(hào)為i+1的學(xué)生的成績。要求建立一個(gè)10個(gè)字的rank數(shù)組,并根據(jù)grade中的學(xué)生成績將學(xué)生名次填入rank數(shù)組中,其中rank+i的內(nèi)容是學(xué)號(hào)為i+1學(xué)生的名次(提示:一個(gè)學(xué)生的名次等于成績高于該學(xué)生的人數(shù)加1)DSEG SEGMENT grade dw 88,75,95,63,98,78,87,78,90,60 rank dw 10 dup(?)DSEG ENDSCSEG SEGMENT assume cs:CSEG, ds:DSEG sta
17、rt:mov ax, dseg mov ds, axmov di,10mov bx,0loop: mov dx,1mov cx,10 next:cmp ax,sijge no_countinc dxno_count:add si,2loop next add bx,2 jne loopmov ax, 4c00h int 21h CSEG ENDSend start實(shí)驗(yàn)步驟:1輸入,匯編并連接此程序。2在DEBUG下運(yùn)行此程序,記錄運(yùn)行結(jié)果。3將轉(zhuǎn)移指令JGE改為JG,JL,JLE分別運(yùn)行記錄排序結(jié)果,察看結(jié)果是否正確不對(duì),并分析原因。四、實(shí)驗(yàn)報(bào)告或作業(yè)1分析程序,畫出程序流程圖2匯編,連接及調(diào)
18、試時(shí)產(chǎn)生的錯(cuò)誤,其原因及解決辦法。3記錄JGE情況下的排序結(jié)果,同時(shí)比較將轉(zhuǎn)移指令JGE改為JG,JL,JLE 時(shí)的排序結(jié)果,并分析結(jié)果正確與否,如果不正確,寫出原因和解決辦法。4思考:如果想外循環(huán)也用loop實(shí)現(xiàn),應(yīng)該怎樣修改程序?BB實(shí)驗(yàn)四 分支程序設(shè)計(jì)A-A實(shí)驗(yàn)A (必做)一、 實(shí)驗(yàn)?zāi)康模? 掌握分支程序的設(shè)計(jì)方法2 掌握利用DEBUG修改參數(shù)、檢查結(jié)果的方法。3 掌握匯編語言源程序的編輯、匯編、連接及調(diào)試過程。二、 實(shí)驗(yàn)內(nèi)容1 編寫一個(gè)程序,顯示AL寄存器中的兩位十六進(jìn)制數(shù)2 編寫一個(gè)程序,判別鍵盤上輸入的字符;若是1-9字符,則顯示之;若為A-Z或a-z字符,均顯示“c”;若是回車字
19、符(其ASCII碼為0DH),則結(jié)束程序,若為其它字符則不顯示,繼續(xù)等待新的字符輸入。三、 實(shí)驗(yàn)準(zhǔn)備1 編寫實(shí)驗(yàn)內(nèi)容要求的兩個(gè)程序。2 寫出調(diào)試以上程序,即修改程序參數(shù),檢查結(jié)果的操作方法。3 熟悉源程序匯編、連接命令的使用方法即要回答的內(nèi)容。四、 實(shí)驗(yàn)步驟1 用EDIT或其它編輯軟件,編寫.ASM源程序,例如HEXASC.ASM及DSPKEY.ASM。2 對(duì)其進(jìn)行匯編及連接,產(chǎn)生.EXE文件。3 對(duì).EXE文件進(jìn)行調(diào)試運(yùn)行。a. 用DEBUG調(diào)試運(yùn)行,學(xué)會(huì)修改AL內(nèi)容的方法。b. 對(duì)DSPKEY.EXE鍵入不同的字符,分別進(jìn)行調(diào)試。c. 在MS-DOS下運(yùn)行這兩個(gè).EXE文件。五、 實(shí)驗(yàn)報(bào)告
20、要求 畫出兩個(gè)程序的流程圖,若要獨(dú)立編寫程序,應(yīng)列出相應(yīng)的程序清單。六、 參考程序清單 (1) 顯示AL中兩位十六進(jìn)制數(shù)程序:;DISPHEX.ASMCODE SEGMENT ASSUME CS:CODESTART: MOV AL,3EH MOV BL,AL MOV DL,AL MOV CL,4 SHR DL,CL CMP DL,9 JBE NEXT1 ADD DL,7NEXT1: ADD DL,30H MOV AH,2 INT 21H ;顯示高位ASCII碼 MOV DL,BL AND DL,0FH CMP DL,9 JBE NEXT2 ADD DL,7NEXT2: ADD DL,30H M
21、OV AH,2V AH,2 INT 21H ;顯示低位ASCII碼 MOV AH,4CH INT 21HCODE ENDS ;返回DOS END START(2) 顯示鍵入字符程序;DISPKEY.ASMCODE SEGEMENT ASSUME CS:CODESTART: MOV AH,1 INT 21H ;等待鍵入字符,送AL CMP AL,0DH ;是否是回車符? JZ DONE ;是則轉(zhuǎn)DONE退出程序 CMP AL,0 JB NEXT CMP AL,9 JA CHARUP MOV DL,AL MOV AH,2 INT 21H JMP STARTCHARUP: CMP AL,41H JB
22、 NEXT CMP AL,5AH JA CHRDNDISPC: MOV DL,C MOV AH,2 INT 21HNEXT: JMP STARTCHRDN: CMP AL,61H JB NEXT CMP AL,7AH JA NEXT JMP DISPCDONE: MOV AH,4CH INT 21HCODE: ENDS END STARTA-ABB實(shí)驗(yàn)B (選做)一、預(yù)習(xí)內(nèi)容1分支程序設(shè)計(jì)方法。2利用轉(zhuǎn)移指令jl、jmp實(shí)現(xiàn)多岔分支的方法。二、目的要求1掌握分支程序設(shè)計(jì)方法。2掌握利用轉(zhuǎn)移指令jl、jmp實(shí)現(xiàn)多岔分支的方法。三、實(shí)驗(yàn)內(nèi)容統(tǒng)計(jì)學(xué)生成績r(jià)esult。設(shè)有10個(gè)學(xué)生的成績分別為56、
23、69、84、82、73、88、99、63、100和80分。試編制程序分別統(tǒng)計(jì)低于60分、6069分、7079分、8089分、9099分及100分的人數(shù),并分別存放到s5、s6、s7、s8、s9及s10單元中DSEG SEGMENT grade dw 56,69,84,82,73,88,99,63,100,80s5 dw 0s6 dw 0s7 dw 0s8 dw 0s9 dw 0s10 dw 0DSEG ENDSCSEG SEGMENT assume cs:CSEG, ds:DSEG start:mov ax, dseg mov ds, axmov cx,10mov bx,offset grad
24、ecompare:mov ax, bxcmp ax,60jl fivecmp ax,70jl sixcmp ax,80jl sevencmp ax,90jl eightcmp ax,100jne nine nine:inc s9jmp short change_addreight:inc s8jmp short change_addrseven:inc s7jmp short change_addrsix:inc s6jmp short change_addrfive:inc s5change_addr: mov ax, 4c00h int 21h CSEG ENDSend start實(shí)驗(yàn)步驟
25、:1閱讀程序,將程序補(bǔ)充完整。2輸入,匯編并連接此程序。3在DEBUG下運(yùn)行此程序,記錄運(yùn)行結(jié)果。4單步運(yùn)行程序,記錄前五次執(zhí)行轉(zhuǎn)移指令后寄存器cs ip的值。四、實(shí)驗(yàn)報(bào)告或作業(yè)1分析程序,畫出程序流程圖。2匯編,連接及調(diào)試時(shí)產(chǎn)生的錯(cuò)誤,其原因及解決辦法。3每次執(zhí)行轉(zhuǎn)移指令時(shí)寄存器cs ip的值。4、最終運(yùn)行結(jié)果,即s5、s6、s7、s8、s9及s10的值。5、思考:如何修改程序使源程序先統(tǒng)計(jì)s10,然后依次統(tǒng)計(jì)s9,s8,s7,s6,s5?BB實(shí)驗(yàn)五 子程序設(shè)計(jì)A-A實(shí)驗(yàn)A(必做)本實(shí)驗(yàn)的目的在于讓讀者掌握同一模塊調(diào)用的方法。一、 實(shí)驗(yàn)?zāi)康? 掌握主程序與子程序之間的調(diào)用關(guān)系及調(diào)用方法。2
26、掌握子程序調(diào)用過程中近程調(diào)用與遠(yuǎn)程調(diào)用的區(qū)別。3 掌握通過堆棧轉(zhuǎn)送參數(shù)的方法。二、 實(shí)驗(yàn)內(nèi)容1 將BUF開始的10個(gè)單元中的二進(jìn)制數(shù)轉(zhuǎn)換成兩位十六進(jìn)制數(shù)的ASCII碼,在屏幕上顯示出來。要求碼型轉(zhuǎn)換通過子程序HEXAC實(shí)現(xiàn),在轉(zhuǎn)換過程中,通過子程序DISP實(shí)現(xiàn)顯示.2 編寫一個(gè)主程序,從鍵盤接收若干個(gè)字符,然后用遠(yuǎn)調(diào)用的方法,調(diào)用子程序統(tǒng)計(jì)字符串中字符b的個(gè)數(shù).子程序的參數(shù)是字符串的首地址TABLE,字符串長度N及字符”b”.子程序返回字符b”的個(gè)數(shù).參數(shù)傳送采用堆棧實(shí)現(xiàn).主程序在子程序返回后,顯示字符”b”及其個(gè)數(shù)(設(shè)為一位十六進(jìn)制數(shù)).三、 實(shí)驗(yàn)說明1 第一個(gè)實(shí)驗(yàn)程序用子程序的近程調(diào)用實(shí)現(xiàn)
27、。由于在調(diào)用HEXASC子程序時(shí),子程序又調(diào)用了DISP子程序,這叫子程序的嵌套調(diào)用。實(shí)驗(yàn)過程中可以從堆棧的內(nèi)容看到兩個(gè)子程序的返回地址值。由于是近調(diào)用,地址值只包括返回地址的段內(nèi)偏移量。在每個(gè)子程序的執(zhí)行中,檢查CS值是不變的。2 第二個(gè)程序是利用遠(yuǎn)調(diào)用的方法調(diào)用子程序的。在遠(yuǎn)調(diào)用情況下,主程序與子程序處在不同的邏輯代碼段中,可在子程序執(zhí)行中查看CS值,它與主程序中的CS值是不同的。子程序調(diào)用后,堆棧中保留了返回地址的段地址及段內(nèi)偏移量。3 第二個(gè)程序中,主程序與子程序之間參數(shù)的傳送是由堆棧實(shí)現(xiàn)的。一段是將參數(shù)(此處是串首址TABLE,串的長度N及待統(tǒng)計(jì)的字符“b”)順序壓如堆棧,在子程序調(diào)
28、用后,通過BP指針對(duì)堆棧中的參數(shù)訪問,并將統(tǒng)計(jì)的結(jié)果通過堆棧返回。有關(guān)該方法的原理此處不再介紹。四、 實(shí)驗(yàn)準(zhǔn)備1 預(yù)習(xí)子程序設(shè)計(jì)的基本方法,根據(jù)實(shí)驗(yàn)內(nèi)容要求,畫出子程序及主程序的流程圖。2 熟悉鍵盤鍵入字符串及用堆棧傳送參數(shù)的程序段編制方法。五、 實(shí)驗(yàn)步驟1 編輯、匯編兩個(gè)源程序,生成相應(yīng)的可執(zhí)行文件(。EXE)2 用DEBUG的R 命令,T 命令或G命令和D命令檢查遠(yuǎn)程調(diào)用及近程調(diào)用時(shí)堆棧的變化。特別是通過堆棧傳送的參數(shù)和子程序取出的參數(shù)是返回參數(shù)的詳細(xì)過程。3 檢查程序執(zhí)行的結(jié)果是否正確。六、 實(shí)驗(yàn)報(bào)告要求 1 分析遠(yuǎn)程調(diào)用與近程調(diào)用的區(qū)別,在用DEBUG有關(guān)命令觀察時(shí),執(zhí)行過程有何不同。
29、2 說明用堆棧傳送參數(shù)的過程及其具體方法。3 分析實(shí)驗(yàn)結(jié)果及所遇到問題,并說明解決的方法。七、參考程序清單 (1) 碼型轉(zhuǎn)換程序清單:;CONV.ASNDATA SEGMENTBUF DB 0ABH,0CDH,0DEH,01H,02H,03HDB 3AH,4BH,5CH,6FHDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV CX,10 LEA BX,BUFAGAIN: MOV AL, BX CALL HEXASC INC BX LOOP AGAIN MOV AH,4CH INT 21HHE
30、XASC PROC NEARMOV DL,ALPUSH CXMOV CL,4SHR DL,CLPOP CXCALL DISP ;顯示高位HEX數(shù)MOV DL,ALAND DL,0FHCALL DISPRETHEXASC ENDPDISP PROP CMP DL,9 JBE NEXT ADD DL,7NEXT: ADD DL,30H MOV AH,2 INT 21H ;顯示 RET DISP ENDPCODE ENDS END START(2)統(tǒng)計(jì)并顯示某鍵入字符的個(gè)數(shù)的程序: :COUNTER.ASMDATA SEGMENTCHAR DB bBUF DB 50H, ? 50H DUP(?)DA
31、TA ENDS MCODE SEGMENT ASSUME CS: MCODE, DS: DATASTART: MOV AX,DATA MOV DS,AX LEA DX,BUF MOV AH,9 INT 21H LEA SI BUF MOV CL, SI+1 MOV CH, 0 ;CX中為字符串長度 INC SI INC SI ;SI指向串首址TABLE MOV AL,CHAR MOV AH,0 ;AX中為待查字符 PUSH SI PUSH CX PUSH AX ; 參數(shù)送堆棧CALL CHECKPOP AX :統(tǒng)計(jì)個(gè)數(shù)在AL中 MOV DL,CHAR MOV AH,2 INT 21H MOV
32、DL,AL AND DL, 0FH CMP DL,9 JBE NEXT ADD DL,7NEXT: ADD DL,30H MOV AH,2 INT 21H ;顯示統(tǒng)計(jì)個(gè)數(shù) MOV AH,4CH INT 21HM CODE ENDSSCODE SEGMENT ASSUME CS:SCODECHECK PROC FAR PUSH BP MOV BP,SP MOV SI,BP+10 MOV CX, BP+8 MOV AX, BP+6 XOR AH, AHAGAIN: CMP AL.SI JNE NEXT1 INC AHNEXT1: INC SI LOOP AGAIN MOV AL, AH MOV B
33、P+10,AX POP BP RET 4CHECK ENDP END STARTA-ABB實(shí)驗(yàn)B 子程序設(shè)計(jì)一、預(yù)習(xí)內(nèi)容1子程序調(diào)用方法和參數(shù)傳遞方式。2過程調(diào)用偽指令: PROC,ENDP和NEAR。3子程序調(diào)用中堆棧的用法。4簡化格式程序設(shè)計(jì)方法。二、目的要求1掌握子程序調(diào)用方法和參數(shù)傳遞方式。2掌握過程調(diào)用偽指令: PROC,ENDP和NEAR。3理解子程序調(diào)用中堆棧的用法。4熟悉簡化格式程序設(shè)計(jì)方法。三、實(shí)驗(yàn)內(nèi)容顯示學(xué)生名次表rank。要求接收從鍵盤輸入的一個(gè)班的學(xué)生成績,并存放于10字的grade數(shù)組中,其中g(shù)rade+i保存學(xué)號(hào)為i+1的學(xué)生的成績。然后根據(jù)grade中的學(xué)生成績,
34、把學(xué)生名次填入10字的rank數(shù)組中,其中rank+i的內(nèi)容是學(xué)號(hào)為i+1學(xué)生的名次。再按學(xué)號(hào)把名次從終端顯示出來。源程序如下,模塊層次如圖所示,源程序已經(jīng)完成了mian, input, rankp, output, bindec和dec_div模塊的編寫,模塊decbin和crlf需要自己完成。.model small.stack.data grade dw 10 dup(?)rank dw 10 dup(?)count dw ?mess1 db Grade?,$mess2 db 13,10,Iput Error!,13,10,$mess3 db Rank:,$.codemain proc
35、far start : mov ax, data mov ds, ax call input call rankp call output mov ax, 4c00h int 21hmain endpinput proc near mov dx,offset mess1 mov ah,09 int 21h mov si,0 mov count,0 enter: call decibin inc count cmp dl, je store cmp dl,13 ;is it return? je exit2 jne error store: mov gradesi,bx add si,2 jmp
36、 enter error: lea dx,mess2 mov ah,09 int 21h exit2: mov gradesi,bx call crlf ret input endprankp proc near mov di,count mov bx,0 loop1: mov ax,gradebx mov word ptr rankbx,0 mov cx,count lea si,grade next: cmp ax,si jg no_count inc word ptr rankbx no_count: add si,2 loop next add bx,2 dec di jne loop
37、1 ret rankp endpoutput proc near lea dx,mess3 mov ah,09 int 21h mov si,0 mov di,countnext1: mov bx,ranksi call binidec mov dl, mov ah,02 int 21h add si,2 dec di jnz next1 call crlf ret output endpdecibin proc near dec_div proc near mov ax,bx mov dx,0 div cx mov bx,dx mov dl,al add dl,30h mov ah,02h
38、int 21h retdec_div endpcrlf proc near。crlf endpend main decibin endpbinidec proc near push bx ; push cx ; push si ; push di ; mov cx,100d call dec_div mov cx,10d call dec_div mov cx,1 call dec_div pop di ; pop si ; pop cx ; pop bx ; retbinidec endp 四、實(shí)驗(yàn)步驟1認(rèn)真閱讀程序,自己編寫十進(jìn)制到二進(jìn)制轉(zhuǎn)換子程序decibin和輸出回車換行子程序crlf
39、,將程序補(bǔ)充完整,然后匯編、鏈接、生成可執(zhí)行文件。2用DEBUG的斷點(diǎn)命令和T命令運(yùn)行此程序,觀察并記錄每次過程調(diào)用和進(jìn)出棧指令前后(帶;的語句)的SP和堆棧內(nèi)容,如記錄執(zhí)行call input,call rankp,call output三條指令后sp,bp以及sp的值。3記錄數(shù)據(jù)段各變量的最后結(jié)果。五、實(shí)驗(yàn)報(bào)告或作業(yè)1畫出input,output和rankp模塊的流程圖。2匯編,連接及調(diào)試時(shí)產(chǎn)生的錯(cuò)誤,其原因及解決辦法。3記錄執(zhí)行call input ,call rankp,call output三條指令后sp,bp以及sp的值,并指出sp指向哪條指令。4畫出堆棧滿時(shí)堆棧存儲(chǔ)區(qū)域的示意圖。
40、5記錄最后的輸出結(jié)果。6思考: 如果想用堆棧傳遞參數(shù),源程序應(yīng)做何修改?BB實(shí)驗(yàn)六 I/O程序設(shè)計(jì)A-A實(shí)驗(yàn)A 一、預(yù)習(xí)內(nèi)容1程序直接控制I/O方式。2I/O程序設(shè)計(jì)方法。3子程序設(shè)計(jì)方法二、目的要求1掌握程序直接控制I/O方式。2熟悉I/O程序設(shè)計(jì)方法。3繼續(xù)熟悉子程序設(shè)計(jì)方法。三、實(shí)驗(yàn)內(nèi)容用位觸發(fā)方式(也即程序直接控制輸出控制寄存器(I/O端口為61hhh )的第一位,使該位按所需要的頻率進(jìn)行1和0的交替變化,從而控制開關(guān)電路產(chǎn)生一串脈沖波形,這些脈沖經(jīng)放大后驅(qū)動(dòng)揚(yáng)聲器發(fā)聲音)模擬槍響程序。程序如下,但其中有些語句錯(cuò)誤,需要修改后才能正確運(yùn)行。code segmentmain proc f
41、arassume cs:codestart: mov cx,50d new_short: push cx call shoot mov cx,0f000h silent: loop silent pop cx loop new_short mov al,48h out 61h,al mov ax,4c00h int 21hmain endp shoot proc near mov dx,140h mov bx,20h in al,61h and al,11111100b sound: xor al,2 out 61h,al add dx,9248h mov cl,3 ror dx,cl mov
42、 cx,dx and cx,1ffh or cx,1000hdelay: push cxwait: loop wait pop cx loop delay dec bx jnz sound and al,11111100b out 61h,al retshoot endpcode endsend start實(shí)驗(yàn)步驟1認(rèn)真閱讀程序,將源程序中的錯(cuò)誤找出后修改。2編譯,鏈接,生成可執(zhí)行文件,記錄編譯過程中的錯(cuò)誤,并分析原因。3執(zhí)行程序,調(diào)式程序,直到可以清楚聽到槍響的聲音。四、實(shí)驗(yàn)報(bào)告或作業(yè)1分析程序,畫出程序流程圖。2匯編,連接及調(diào)試時(shí)產(chǎn)生的錯(cuò)誤,其原因及解決辦法。3思考:試將程序中的黑體部分修改為 wait: loop wait,再編譯運(yùn)行程序,是否能聽到槍聲,為什么?A-ABB實(shí)驗(yàn)B (選做)一、實(shí)驗(yàn)?zāi)康?1掌握輸入輸出程序設(shè)計(jì)的概念和方法。 2了解PC機(jī)外圍芯片8255、8259的功能。 3學(xué)習(xí)如何在PC機(jī)上編寫具有輸入輸出功能的程序,包括8255、8259芯片的使用方法二、實(shí)驗(yàn)說明 本實(shí)驗(yàn)要求自行編寫一個(gè)鍵盤輸入處理程序,它可以完成鍵盤字符的讀入并進(jìn)行屏幕顯示,本實(shí)驗(yàn)要利用IBMPC系統(tǒng)的
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐飲場(chǎng)所裝修安全協(xié)議
- 文化創(chuàng)意產(chǎn)業(yè)貸款居間合同
- 2025年農(nóng)村黨支部書記文化建設(shè)述職報(bào)告范文
- 環(huán)保型建筑材料的應(yīng)用措施
- 項(xiàng)目機(jī)械設(shè)備管理制度
- 辭職與離職管理制度
- 兒童醫(yī)院用藥管理制度
- 餐飲服務(wù)單位管理制度
- 電力行業(yè)環(huán)境保護(hù)管理制度研究
- 超市跨境電商業(yè)務(wù)流程
- 冬春季呼吸道傳染病防控
- 【物 理】2024-2025學(xué)年八年級(jí)上冊(cè)物理寒假作業(yè)人教版
- 2024年計(jì)算機(jī)二級(jí)WPS考試題庫380題(含答案)
- 中醫(yī)藥膳學(xué)課件
- 教科版二年級(jí)下冊(cè)科學(xué)第一單元測(cè)試卷(含答案)
- 春節(jié)值班安排通知
- 下腔靜脈濾器置入術(shù)共27張課件
- 人教小學(xué)四年級(jí)上冊(cè)數(shù)學(xué)知識(shí)點(diǎn)歸納
- 2022年上海健康醫(yī)學(xué)院職業(yè)適應(yīng)性測(cè)試題庫及答案解析
- 安徽省血液凈化??谱o(hù)士臨床培訓(xùn)基地條件
- 腦橋解剖ppt課件
評(píng)論
0/150
提交評(píng)論