




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、微型計算機(jī)原理與接口技術(shù)實驗報告【實驗名稱】 匯編語言程序的編輯與調(diào)試【實驗?zāi)康摹繉W(xué)習(xí)匯編源程序的編輯、編譯、鏈接、執(zhí)行全過程。學(xué)習(xí)編輯文件、TASM、TLINK的使用方法以及匯編語言的語法規(guī)則。學(xué)習(xí)使用TD對程序進(jìn)行調(diào)試的方法?!緦嶒灢襟E】1、將程序1輸入并存儲為hello.asm文件2、編譯與鏈接首先對源代碼進(jìn)行編譯,指令為:C:TASM HELLO / zi 生成HELLO.OBJ編譯如果報錯,需要回到編輯窗口修改源代碼,存盤后重新編譯編譯成功后,鏈接生成可執(zhí)行文件C:TLINK HELLO / v / 3 生成HELLO.EXE3、 啟動調(diào)試工具TD (Turbo Debugger)鍵
2、入:C:TD HELLO成功啟動TD之后,TD進(jìn)入MODULE顯示模式,屏幕上顯示HELLO-ASM源程序,一個三角形符號指示出了標(biāo)號為BEG的那條指令是啟動指令。4、 動態(tài)調(diào)試(按照以下的步驟學(xué)習(xí)掌握TD的用法)(1) 連續(xù)執(zhí)行程序按F9鍵(即Run | Run),即可從BEG開始連續(xù)執(zhí)行程序。(2) 查看執(zhí)行結(jié)果按Alt+F5鍵(即Window | User screen),臨時切換到DOS屏幕,可查看程序的執(zhí)行結(jié)果,即5行HELLO。注意:Alt鍵要多按一會兒,直到快捷鍵提示區(qū)更換提示內(nèi)容之后再按F5鍵。按任意鍵可以恢復(fù)MODULE窗口內(nèi)容。(3) 使光標(biāo)重新指向啟動指令當(dāng)程序運(yùn)行結(jié)束(
3、三角形光標(biāo)消失),按Ctr1+F2(Run|Program rest)可以重新裝入程序并使光標(biāo)指向啟動指令。(4) 程序的單步執(zhí)行單步操作一次僅執(zhí)行了一條指令,有3個單步操作命令,它們的區(qū)別僅在于跟蹤的情況不同。 F8 (Run | Step over) 單步操作。執(zhí)行CALL和INT n指令的時候,不跟蹤相關(guān)的子程序。不眼蹤的含義是指在進(jìn)入相關(guān)子程序后,自動地連續(xù)執(zhí)行子程序指令直到返回。所以,宏觀上看不到跟蹤的效果。 F7 (Run | Trace into) 單步操作。執(zhí)行CALL指令能夠跟蹤子程序,隨即暫停,等待用戶的下一步操作。但是在遇到INT n指令時與F8一樣,進(jìn)入服務(wù)程序后立即自
4、動地連續(xù)執(zhí)行服務(wù)程序直到返回。 Alt+F7 (Run | Instruction trace)單步操作。真正意義上的單步操作,執(zhí)行CALL和INT n指令進(jìn)入相關(guān)子程序之后立即停止,等待用戶的下一步操作。實踐證明:用Alt+F7跟進(jìn)服務(wù)程序以后,如果再執(zhí)行單步操作,很容易使系統(tǒng)癱瘓。因此,請讀者慎用。編者認(rèn)為:Alt+F7的用途在于跟進(jìn)中斷服務(wù)程序以后,可以了解服務(wù)程序的結(jié)構(gòu),如果服務(wù)程序是系統(tǒng)設(shè)計的 (如INT 21H,INT 10H等),應(yīng)當(dāng)用F8操作。(5) 斷點的設(shè)置和取消按、鍵,使光標(biāo)指向欲設(shè)置斷點的指令,再按F2鍵 (Breakpoints | Toggle),則紅色光條覆蓋光標(biāo)
5、處的指令,表示斷點設(shè)置成功,重復(fù)上述操作,可以設(shè)置多個斷點。將光標(biāo)移到紅色光條覆蓋的指令,再次按下F2鍵,紅色光條消失,表明此處斷點撤銷。設(shè)置斷點的目的是使程序執(zhí)行到斷點指令時暫停,以便檢查執(zhí)行結(jié)果。(6) 檢查單步執(zhí)行結(jié)果指令執(zhí)行后一定會使目標(biāo)寄存器和狀態(tài)標(biāo)志發(fā)生變化,欲查看執(zhí)行效果,怎么辦? 在CPU窗口調(diào)試時因為窗口中有寄存器、標(biāo)志寄存器顯示窗口,所以,當(dāng)前指令執(zhí)行后,可以從相關(guān)的顯示窗口中看到結(jié)果。 在MODULE窗口調(diào)試時選中View |Registers可彈出寄存器和標(biāo)志寄存器顯示窗口,就可以查看執(zhí)行結(jié)果。(7) 檢查內(nèi)存數(shù)據(jù)區(qū)的內(nèi)容如果被調(diào)試程序要對數(shù)據(jù)段或附加段進(jìn)行操作,怎樣檢
6、查結(jié)果?關(guān)鍵問題是要找出用戶程序的數(shù)據(jù)段或附加段。以例題1為例,說明這一操作的實現(xiàn)過程。 如果調(diào)試是在MODULE窗口進(jìn)行首先選擇View | Dump ,彈出內(nèi)存數(shù)據(jù)顯示窗口,接著再按Ctrl+S彈出一個對話框,用戶鍵入HELLO-用單引號括起來的這一字符串是例1用戶數(shù)據(jù)段中設(shè)置的內(nèi)容,TD根據(jù)用戶的提示立即找出并顯示用戶程序數(shù)據(jù)區(qū)。做好以上準(zhǔn)備工作之后,按F8鍵單步執(zhí)行指令,就可以看到用戶數(shù)據(jù)段內(nèi)容的變化。例1中的語句 就是為此項調(diào)試而設(shè)置的。 如果調(diào)試是在CPU窗口進(jìn)行首先按Tab鍵,使內(nèi)存數(shù)據(jù)顯示區(qū)成為活動區(qū),接下來的工作則與在MODULE窗口的調(diào)試是相同的。5、程序修改下面的程序采用
7、比較法,將一個8位二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)顯示,其設(shè)計方法拙劣,語法錯誤很多,希望以它為藍(lán)本,練習(xí)源程序的編輯、編譯、鏈接和調(diào)試。同學(xué)應(yīng)照原樣編輯源程序,匯編之后,必定給出若干錯誤信息,再根據(jù)錯誤提示,修改源程序,直到匯編后沒有錯誤時為止,然后進(jìn)行鏈接、執(zhí)行。正確的執(zhí)行結(jié)果是在屏幕上顯示:100 + 9 = 109【程序流程圖】1,程序一開始初始設(shè)置:定義數(shù)組、循環(huán)次數(shù)CX=59號功能調(diào)用,顯示一次”hello “CX=CX-1CX =0結(jié)束否是 2,程序二開始初始設(shè)置:定義數(shù)組求和100+9將和由二進(jìn)制轉(zhuǎn)為十進(jìn)制結(jié)束顯示結(jié)果【源程序】1,程序一DATASEGMENT MESGDBHELLODB
8、0 , 0 , 0; DATAENDSCODESEGMENTUSE16ASSUMECS: CODE , DS: DATABEG:MOVAX , DATAMOVDS , AXMOVES , AX; MOVCX , 5LL1:MOVMESG+5 , 0DH; MOVMESG+6 , 0AH; MOVMESG+7 , $ ; CALLDISPMOVMESG+5 , 0; MOVMESG+6 , 0; MOVMESG+7 , 0; LOOPLL1MOVAH , 4CHINT21HDISPPROCMOVAH , 9MOVDX , OFFSET MESGINT21HRETDISPENDPCODEENDSE
9、NDBEG2,程序二DATASEGMENT N1DW0809H , AB ; 此處應(yīng)為N1 DB 9N2DB100SUNDB? ; 輸入錯誤,SUN與后段代碼SUM不一致MESGDB100+9=DB30H , 30H , 30H ; 應(yīng)加上$以提示信息結(jié)束DATAENDSCODESEGMENT ASSUMECS: CODE , DS: DATABEG: MOV DS , DATA;MOV指令不允許將立即數(shù)直接送給段寄存器MOVBX , OFFSETSUMMOVAH , N1MOVAL , N2ADDAH , ALMOVBX , AH;AH為八位,BX為十六位寄存器,寄存位置不明CALLN2_1
10、0MOVAH , 9MOVDX , OFFSET MESGINT21HMOVAH , 4CHINT21HN2_10PROCLAST:CMPBX , 100 ;錯誤同上JCNEXT1SUBBX , 100; 錯誤同上INCBX+7; 錯誤同上JMPLAST NEXT1:CMPBX , 10; 錯誤同上JCNEXT2; 錯誤同上SUBBX , 10; 錯誤同上INCBX+8; 錯誤同上JMPNEXT1NEXT2:ADDBX+9 , SUM;源操作數(shù)和目的操作數(shù)不能同時為存儲器RETN2_10:ENDP ; 此處無需冒號 CODEENDSENDBEG【實驗結(jié)果與分析】程序二中錯誤代碼出現(xiàn)在第2、4、
11、6、10、15、23、25、26、28、30、31、33、35行。錯誤原因已附在各行末尾,修改后的代碼如下:DATASEGMENT N1DB9N2DB100SUM DB? MESGDB100+9=DB30H , 30H , 30H,$DATAENDSCODESEGMENT ASSUMECS: CODE , DS: DATABEG:MOVAX , DATA MOV DS , AX ;MOVBX , OFFSETSUMMOVAH , N1MOVAL , N2ADDAH , ALMOVBYTE PTR BX , AHCALLN2_10MOVAH , 9MOVDX , OFFSET MESGINT21
12、HMOVAH , 4CHINT21HN2_10PROCLAST:CMPBYTE PTR BX , 100JCNEXT1SUBBYTE PTR BX , 100INCBYTE PTR BX+7JMPLAST NEXT1:CMPBYTE PTR BX , 10JCNEXT2SUBBYTE PTR BX , 10INCBYTE PTR BX+8JMPNEXT1NEXT2:MOV AL , SUMADDBYTE PTR BX+9 , ALRETN2_10ENDPCODEENDSENDBEG【實驗名稱】 順序程序設(shè)計【實驗?zāi)康摹繉W(xué)習(xí)匯編語言基本操作指令和偽指令的應(yīng)用;了解編程的基本方法。【實驗內(nèi)容】 【
13、實驗1】編寫程序,計算(a + b) 2 * (a AND b),結(jié)果送入S單元。S單元的內(nèi)容在TD里面觀察,在實驗報告附上運(yùn)行完畢后所有通用寄存器及段寄存器的值。 【實驗2】 定義一個雙字變量VOLUME,從鍵盤輸入長方體的長(a),寬(b)和高(h),計算它的體積,a,b,c均為單字節(jié)變量,結(jié)果保存在VOLUME中(注意判斷溢出)。要求:上述實驗中的各變量單元要在數(shù)據(jù)區(qū)定義; 用 TD(或debug)調(diào)試,運(yùn)行并修改各變量的值,觀察結(jié)果存放單元?!境绦蚩驁D】 【實驗1】 【實驗2】開始初始設(shè)置定義數(shù)據(jù)組計算(a + b) 2 * (a AND b)將結(jié)果存入S結(jié)束開始初始設(shè)置定義數(shù)據(jù)組鍵入
14、a、b、c計算a*b*c將結(jié)果存入VOLUME結(jié)束【程序代碼】【實驗1】DATA SEGMENT A DB 40 B DB 50 S DB ? DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATABEG: MOV AX, DATA MOV DS, AX MOV BL, A ADD BL, B MOV BH, 0 ADC BH, 0 MOV AL, A AND AL, B MOV CL, 2 MUL CL SUB BX, AX MOV S, BXMOV AH, 4CHINT 21HCODE ENDS END BEG【實驗2】DATA SEGMENT A DB
15、 ? B DB ? C DB ? VOLUME DD ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATABEG: MOV AX, DATA MOV DS, AX MOV AH, 1 INT 21H SUB AL,30H MOV A, AL MOV AH,1 INT 21H SUB AL,30H MOV B,AL MOV AH,1 INT 21H SUB AL,30H MOV C,AL MOV BL,B MUL BL MOV BL,A MOV BH,0 MUL BX MOV WORD PTR VOLUME,AX MOV WORD PTR VOLUME+2,
16、DX MOV AH,4CH INT 21H CODE ENDS END BEG【實驗結(jié)果】【實驗1】:程序運(yùn)行后,運(yùn)行結(jié)果S=26H,與預(yù)期相符。所有通用寄存器即段寄存器的值如下: AX=1B6F BX=000F CX=0206 DX=3002 DS=04BA CS=0000【實驗2】:程序運(yùn)行時,取a=4,b=5,c=6,運(yùn)行后,VOLUME=120,與預(yù)期相符所有通用寄存器即段寄存器的值如下: AX=1B6F BX=000F CX=0206 DX=3002 DS=04BA CS=0000【實驗名稱】 循環(huán)實驗的設(shè)計【實驗?zāi)康摹?學(xué)習(xí)并掌握循環(huán)程序的設(shè)計方法。【實驗內(nèi)容】 【實驗1】用表格形
17、式顯示ASCII字符。實驗要求:按15行16列的表格形式顯示ASCII碼為10H 100H的所有字符,即以行為主的順序及ASCII碼遞增的次序依次顯示對應(yīng)的字符。每16個字符為一行,每行中的相鄰兩個字符之間用空白符(ASCII為0)隔開。提示:(1) 顯示每個字符可使用功能號為02的顯示輸出功能調(diào)用,使用方法如下:mov ah , 02hmov dl , 輸出字符的ASCII碼int 21h本題中可把DI初始化為10H,然后不斷使其加1(用INC指令) 以取得下一個字符時ASCII碼。(2) 顯示空白符時,用其ASCII碼0置入DI寄存器。每行結(jié)束時,用顯示回車(ASCII為0dh)和換行符(
18、ASCII為0ah)來結(jié)束本行并開始下一行。(3) 由于逐個顯示相繼的ASCII字符時,需要保存并不斷修改dl寄存器的內(nèi)容,而顯示空白、回車、換行符時也需要使用DI寄存器,為此可使用堆找來保存相繼的ASCII字符。具體用法是:在顯示空白或回車、換行符前用指令push dx把DI的內(nèi)容保存到堆棧中去。在顯示空白或回車、換行符后用指令pop dx恢復(fù)DI寄存器的原始內(nèi)容?!緦嶒?】編程計算:S=1+2+3+N 100的最大項數(shù)N以及對應(yīng)的和S。實驗要求: 將最大項數(shù)與和數(shù)分別存入N和SUM單元,用TD調(diào)試,運(yùn)行程序并檢查結(jié)果; 將結(jié)果在屏幕上以16進(jìn)制數(shù)顯示。顯示格式:MAX N = H SUM
19、= H?!境绦蚩驁D】 【實驗1】 【實驗2】開始初始設(shè)置:定義數(shù)組;N=0,S=0N=N+1S=S+NS100是S=S-NN=N-1將S與N轉(zhuǎn)換為16進(jìn)制數(shù)顯示結(jié)果結(jié)束否開始初始設(shè)置:行數(shù)i=15,顯示一個元素設(shè)置下一個元素k=k-1K=0列數(shù)k=16換行i=i-1i=0結(jié)束否是否是【程序代碼】【實驗1】CODE SEGMENTMAIN PROC FAR ASSUME CS:CODEBEG: MOV AH,02H MOV DL,10H ;設(shè)置初始輸出為ASCII的10h MOV BL,15 ;輸出顯示為15行E: MOV CX,16 ;設(shè)置循環(huán)次數(shù),16,表示輸出顯示為16列l(wèi): INT 21
20、H ;顯示輸出 PUSH DX ;推入堆棧 MOV AH,02H MOV DL,0 INT 21H MOV AH,02H MOV DL,0 INT 21H ;顯示空白符 POP DX ; 將棧頂元素推出 INC DL ; 設(shè)置下一個元素 LOOP l ; 循環(huán)輸出每行的16個ASCII元素 PUSH DX ; 將下一行的首元素推入堆棧 MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H ; 輸出換行 POP DX ; 將棧頂元素推出 DEC BL CMP BL,0 ;比較確定是否已經(jīng)輸出15行元素 JNE E ; 若還未完成輸
21、出,則跳轉(zhuǎn)至e,繼續(xù)進(jìn)行下一行元素的輸出 JE EXIT ; 否則退出程序EXIT: MOV AX,4C00H INT 21HMAIN ENDPCODE ENDS END BEG 【實驗2】DATA SEGMENTN DB ? ;開辟一個字節(jié)單元 SUM DB ? MESG1 DB MAX N=,$ MESG2 DB SUM =,$ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA ;段分配 BEG: MOV AX,DATA ;段基址DS MOV DS,AX MOV BL,0H ;給BL和AL賦初始值0 MOV AL,0H L1: INC BL ADD
22、 AL,BL CMP AL,64H JBE L1 ;無符號數(shù)=跳轉(zhuǎn) SUB AL,BL ;所得AL大于100,故要減去BL MOV N,BL ;最大項數(shù)N單元 MOV SUM,AL ;和數(shù)SUM單元 MOV AH,9 ;9號功能調(diào)用,輸出字符串 MOV DX,OFFSET MESG1 INT 21H MOV AL,N ;2號功能調(diào)用,輸出兩個空格 AND AL,0F0H ;屏蔽低四位 ROR AL,4 ;右移4位 CMP AL,10 ;與10比較 JL NEXT ;小于跳轉(zhuǎn)NEXT ADD AL,7 ;否則加7NEXT: ADD AL,30H MOV AH,02H MOV DL,AL INT
23、21H MOV AL,N AND AL,0FH ;屏蔽高4位 CMP AL,10 JL NEXT1 ADD AL,7 NEXT1: ADD AL,30H OV AH,02H MOV DL,AL INT 21H MOV DL,H ;顯示出H INT 21H MOV AH,02H MOV DL,0DH INT 21H ;回車 MOV AH,02H MOV DL,0AH INT 21H ;換行 MOV AH,9 ;9號功能調(diào)用,輸出字符串 MOV DX,OFFSET MESG2 INT 21H AND AL,0F0H ;屏蔽低四位 ROR AL,4 ;右移4位 CMP AL,10 ;與10比較 JL
24、 NEXT2 ;小于跳轉(zhuǎn)NEXT ADD AL,7 ;否則加7 NEXT2: ADD AL,30H MOV AH,02H MOV DL,AL INT 21H MOV AL,SUM AND AL,0FH ;屏蔽高4位 JL NEXT3 ADD AL,7 NEXT3: ADD AL,30H MOV AH,02H MOV DL,AL INT 21H MOV DL,H ;顯示出H INT 21H MOV AH,4CH ;返回DOS操作系統(tǒng) INT 21H CODE ENDS END BEG【調(diào)試結(jié)果】【實驗1】實驗一運(yùn)行后顯示結(jié)果為與預(yù)期相符【實驗2】實驗二運(yùn)行后結(jié)果為“MAX =0DH SUM =5
25、BH”,與預(yù)期相符?!緦嶒灻Q】 分支程序設(shè)計【實驗?zāi)康摹繉W(xué)習(xí)分支程序的結(jié)構(gòu),掌握具有分支結(jié)構(gòu)程序的設(shè)計方法?!緦嶒瀮?nèi)容】 【實驗1】分類統(tǒng)計字符個數(shù)COUNT_CHAR。 【實驗2】顯示月份名direct。試編寫一程序,根據(jù)用戶鍵入的月份數(shù)在屏上顯示該月份的英文縮寫名【程序代碼及框圖】【實驗1】DATA SEGMENTSTRING LABEL BYTEMAX DB 80ACT DB ?STOKN DB 80 DUP(?)DIGIT DB 0LETTER DB 0OTHER DB 0MESS1 DB PLEASE INPUT CHARS:,0DH,0AH,$MESS2 DB 0DH,0AH,$
26、MESS3 DB DIGIT:,0H,$MESS4 DB LETTER:,0H,$MESS5 DB OTHER:,0H,$MESS6 DB H,0DH,0AH,$N DB 3DATA ENDSCODE SEGMENT開始初始設(shè)置:DIGIT=0LETTER=0,OTHER=0輸入字符串字符串長度送CX,偏移地址送BX取一字符送AL字符是數(shù)字字符是字母DIGIT+1LETTER+1OTHER+1轉(zhuǎn)16進(jìn)制顯示結(jié)束修改BX及CX-1CX=0YYYNNN ASSUME CS:CODE,DS:DATACOUNT_CHAR PROC FAR PUSH DS SUB AX,AX PUSH AX MOV A
27、X,DATA MOV DS,AX LEA DX,MESS1 MOV AH,09 INT 21H LEA DX,STRING MOV AH,0AH INT 21H LEA DX,MESS2 MOV AH,09H INT 21H LEA SI,STOKN SUB CH,CH MOV CL,ACTAGAIN: MOV AL,SI CMP AL,30H JL OTHER1 CMP AL,3AH JL DIGIT1 CMP AL,41H JL OTHER1 CMP AL,5BH JL LETTER1 CMP AL,61H JL OTHER1 CMP AL,7BH JL LETTER1OTHER1: IN
28、C OTHER INC SI LOOP AGAIN JMP PRINTDIGIT1: INC DIGIT INC SI LOOP AGAIN JMP PRINTLETTER1: INC LETTER INC SI LOOP AGAINPRINT: MOV CH,2 MOV BL,DIGIT LEA DX,MESS3 MOV AH,09 INT 21HROTATE: MOV CL,4 ROL BL,CL MOV AL,BL AND AL,0FH ADD AL,30H CMP AL,3AH JL PRINT1 ADD AL,7HPRINT1: MOV DL,AL MOV AH,2 INT 21H
29、DEC CH JNZ ROTATE LEA DX,MESS6 MOV AH,09 INT 21H DEC N CMP N,2 JZ LETTER2 CMP N,1 JZ OTHER2 JMP EXITLETTER2: LEA DX,MESS4 MOV AH,09 INT 21H MOV CH,2 MOV BL,LETTER JMP ROTATEOTHER2: LEA DX,MESS5 MOV AH,09 INT 21H MOV CH,2 MOV BL,OTHER JMP ROTATEEXIT: RETCOUNT_CHAR ENDPCODE ENDS END COUNT_CHAR【實驗2】DAT
30、A SEGMENTMESG1 DB PLEASE INPUT THE NUMBER FOR MONTH,0DH,0AH,$MESG2 DB ERROR!,0DH,0AH,$NUM DB 3 COUNT DB ? STORE DB 2 DUP(?) MONTAB DB JAN , FEB , MAR , APR , MAY , JUN DBJUL , AUG , SEP , OCT , NOV , DEC開始初始設(shè)置:定義數(shù)組,建立月份縮寫表輸入月份NN=0或N12顯示“ERROR”找到相應(yīng)月份簡寫,顯示結(jié)果結(jié)束YNMONTH DB 3 DUP(?),0DH,0AH,$ DATA ENDSCOD
31、E SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV ES,AX MOV DX,OFFSET MESG1 MOV AH,09H INT 21H MOV DX,OFFSET NUM MOV AH,0AH INT 21H CMP COUNT,0 JZ EXIT CMP COUNT,2 JZ NEXT MOV AL,STORE XOR AL,30H MOV AH,0 JMP GOONNEXT: MOV AH,STORE MOV AL,STORE+1 XOR AX,3030H CMP AH,0 JZ GOON CMP AH,1
32、 JNZ LAST SUB AH,AH ADD AL,10 GOON: CMP AL,0 JZ LAST CMP AL,12 JA LAST DEC AL MOV BL,3 MUL BL LEA SI,MONTAB ADD SI,AX LEA DI,MONTH MOV CX,3 CLD REP MOVSB DISP: MOV DX,OFFSET MONTH MOV AH,09H INT 21H JMP START LAST: MOV DX,OFFSET MESG2 MOV AH,09H INT 21H JMP STARTEXIT: MOV AH,4CH INT 21HCODE ENDS END
33、 START【實驗結(jié)果】【實驗1】:程序運(yùn)行后,運(yùn)行結(jié)果如下可見程序運(yùn)行正確。 【實驗2】:運(yùn)行程序,并輸入不同月份,結(jié)果如下可見程序運(yùn)行正確?!緦嶒灻Q】 子程序結(jié)構(gòu)的設(shè)計方法【實驗?zāi)康摹繉W(xué)習(xí)子程序結(jié)構(gòu),了解子程序的調(diào)用、返回的過程,掌握其編程的方法?!緦嶒瀮?nèi)容】【實驗1】二進(jìn)制數(shù)十進(jìn)制數(shù)顯示 從鍵盤輸入16位二進(jìn)制數(shù),然后轉(zhuǎn)換成等值的十進(jìn)制數(shù)顯示?!緦嶒?】編程計算N!,從鍵盤上接受10以內(nèi)的數(shù),計算出其階乘后在屏幕顯示結(jié)果,要求用子程序編寫計算N!的代碼以及結(jié)果顯示代碼?!境绦虼a及框圖】【實驗1】DATA SEGMENT N DB 4 STRING DB Please input 16
34、 binary numbers,0AH,0DH,$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATABEG: MOV AX,DATA MOV DS,AX MOV DX,OFFSET STRING MOV AH,09H INT 21H CALL BINHEX CALL HEXDEC SUB AL,AL MOV AH,4CH INT 21H BINHEX PROC MOV CL,16 SUB BX,BX NEXT: SUB AX,AX MOV AH,07H INT 21H CMP AL,30H 開始初始化設(shè)置顯示提示信息調(diào)用子程序BINHEX從鍵盤取得二進(jìn)制數(shù)
35、轉(zhuǎn)換為16進(jìn)制數(shù)調(diào)用子程序HEXDEC將16進(jìn)制轉(zhuǎn)換為10進(jìn)制顯示結(jié)果結(jié)束 JB A1 CMP AL,31H JA A1 SUB AH,AH SUB AL,30H SHL BX,1 OR BX,AX ADD AL,30H MOV DL,AL MOV AH,02H INT 21H DEC CL CMP CL,0 JE A2 JMP NEXTA1: MOV AL,07H MOV DL,AL MOV AH,02H INT 21H JMP NEXTA2: MOV DL,3DH MOV AH,02H INT 21H RETBINHEX ENDP HEXDEC PROC MOV AX,BX MOV CX,10000 NEXT2: SUB DX,DX
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國家飾布藝品數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國低溫雙門食具消毒柜數(shù)據(jù)監(jiān)測研究報告
- 內(nèi)科三基培訓(xùn)試題及答案
- 江蘇省南京師范大學(xué)附屬中學(xué)2024-2025學(xué)年高一上學(xué)期期末考試化學(xué)試卷(含答案)
- 河北省部分學(xué)校2024-2025學(xué)年高三下學(xué)期3月聯(lián)考思想政治試題(含答案)
- 施工類承包商部門級環(huán)境培訓(xùn)試題
- 2025年消防設(shè)施操作員之消防設(shè)備高級技能能力提升試卷A卷附答案
- 2024廣東省中考英語真題【原卷版】
- 采購與項目執(zhí)行分包合同(2篇)
- 鋼管腳手架分包合同
- 醫(yī)院設(shè)施日常巡查管理制度
- 人教版四年級下冊數(shù)學(xué)第二單元觀察物體(二) 單元測試
- 建筑工程公司績效考核制度范本
- 汽車總線系統(tǒng)檢修課件 模塊一 汽車單片機(jī)在車載網(wǎng)絡(luò)中的應(yīng)用
- 保育員與教師協(xié)作配合的技巧與案例
- 2024-2030年中國實驗室家具行業(yè)發(fā)展規(guī)劃及投資前景預(yù)測報告版
- 綠色金融案例分析
- 【MOOC】運(yùn)動安全與健康-浙江大學(xué) 中國大學(xué)慕課MOOC答案
- 《T CMADI 096-2022增材制造植入物設(shè)計輸入要求》
- 2025屆東北師大附屬中學(xué)高考數(shù)學(xué)倒計時模擬卷含解析
- 智能交通監(jiān)控系統(tǒng)運(yùn)維服務(wù)方案(純方案-)
評論
0/150
提交評論