版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、匯編語復(fù)習(xí)實驗三實驗三 匯編語程序調(diào)試運1.實驗請安裝并使MASM5匯編器。(1)將下的數(shù)據(jù)段輸,取名為1.asm, 保存在MASM件夾下,成.lst件,不必連接運,查看1.lst件,試回答:DA1,DA2 的偏移量分別為多少?COUNT的值為多少?data segment org 20hnum1=8 num2=num1+10h da1 db 'IBM PC'da2 db 0ah,0dh count equ $-da1data endsendDA1的偏移量為20H。DA2的偏移量為26H。COUNT值為8。不對程序進(jìn)連接和調(diào)試,也可以查看程序中內(nèi)容的狀態(tài),具體實現(xiàn)法如下:如圖,
2、這是編譯過程中的部分,都1.asm件進(jìn)masm,中間會有步問詢是否需要成.lst件,這個.lst件就是我們需要的, 為它隨便賦予個件名,我們就可以在1.asm件夾中找到.lst件,打開.lst件,就能查看程序中的各種狀態(tài)。打開.lst件,內(nèi)容是這樣的:$此處是使notepad+打開的,當(dāng)然也可以記事本打開。2.(2)輸下列指令,改正可能的錯誤(調(diào)試不要運程序):data segmentvar1 db 0, 25, 0dh,300 var2 db 12h,a4h,6bh var3 db 'ABCDEF' var4 dw 1234h, 5678h var5 dw 10h dup(?
3、) data endscode segmentassume cs:code, ds:data begin mov ax, datamov ds, ax lea si, var5mov bx, offset var2mov si, 0abh ;沒有指定移動數(shù)據(jù)類型mov ax, var1+2mov bx, si ;需要使寄存器中轉(zhuǎn)mov var5+4, var4mov ah, 4ch int 21hcode endsend start總之,調(diào)試到?jīng)]有warning和error即可:;修正后的代碼:assume cs:code, ds:data data segmentvar1 dw 0, 25,
4、 0dh,300 var2 db 12h,0a4h,6bh var3 db 'ABCDEF'var4 dw 1234h, 5678h var5 dw 10h dup(?) data endscode segment start: mov ax,datamov ds, ax lea si,var5mov bx, offset var2 mov ax, 0abhmov si,axmov ax,var1+2 mov ax,simov bx,axmov var5+4,offset var4 mov ah, 4chint 21h code endsend start3. 將完整程序放在代
5、碼段C_SEG 中,編寫程序把數(shù)據(jù)段D_SEG中的AGUEND和附加段E_SEG中的ADDEND相加,并把結(jié)果存放在D_SEG 中的SUM中。其中AUGEND,ADDEND,SUM均為dw類型,AUGEND賦值為9251,ADDEND賦值為-5962。實驗報告中要求寫出源 程序,簡單敘述上機步驟,調(diào)試法。;程序源代碼:assume cs:C_SEG,ds:D_SEG,es:E_SEG D_SEG segmentAGUEND dw 9251SUM dw 0 D_SEG ends E_SEG segmentADDEND dw -5962E_SEG ends C_SEG segmentstart:
6、mov AX,D_SEGmov DS,AX ;將段地址移動帶地址段寄存器mov AX,E_SEGmov ES,AX ;將段地址移動到附加段寄存器mov BX,offset AGUEND;得到AGUEND的地址mov AX,DS:BXmov BX,offset ADDEND;得到ADDEND的地址add AX,ES:BXmov BX,2mov DS:BX,AXmov ah, 4chint 21h ;實驗1中有提及,int 21h和ah = 4ch的組合,實現(xiàn)了調(diào)return進(jìn)程。C_SEG endsend start注意offset指令,如果不加offset,得到的是AGUMEND這個數(shù)本,但是
7、加上offset,得到的就是它的地址。4. 數(shù)組中是組符號數(shù),將最數(shù)放在M單元中,經(jīng)過匯編后,形成.EXE件,先G=0命令執(zhí)程序,-D命令查看M單元的內(nèi)容, 會發(fā)現(xiàn)結(jié)果不正確。單步執(zhí)命令T查找程序中的邏輯錯誤。DSEG SEGMENTMSG DB 13, 15, 7, 25, 24 M DB ?DSEG ENDS CSEG SEGMENTASSUME CS: CSEG, DS: DSEG START: MOV AX, DSEGMOV DS, AX MOV CX, 4MOV AL, MSGMOV SI, OFFSET MSG+1 L1:CMP AL, SI;INC SIJB NEXT ;CMP
8、A,B若A<B則轉(zhuǎn)移MOV AL, SI ;A>B 則SI中的內(nèi)容,存ALNEXT: INC SI;在此處執(zhí)增,因為如果得到了較值,需要將較值移;AL,移動的時候SI的位置是不能改變的LOOP L1 MOV M, AL MOV AX, 4C00H INT 21HCSEG ENDSEND START本處考察的是各種跳轉(zhuǎn)指令的應(yīng),詳細(xì)可以參考這篇博:。5. 試編制個匯編語程序,求出地址為DATA的10個符號字?jǐn)?shù)組中的最偶數(shù),把它存放在AX中。畫出程序框圖,寫出源程序清單和執(zhí)結(jié)果。Data word 0141H, 0AE00H, 07B4H, 0A508H, 0691H,word 087
9、0H, 7542H, 0081H, 0916H, 0017H程序框圖:;源程序:assume ds:Dseg,cs:Code Dseg segmentdata dw 0141H, 0AE00H, 07B4H, 0A508H, 0691H,0870H, 7542H, 0081H, 0916H, 0017HDseg ends Code segmentstart: mov AX,dseg mov DS,AXmov CX,9 mov AX,datamov SI,offset data+2L1: test AX,01H ;判斷AX中最后位是否為1,為1則為奇數(shù),是奇數(shù)換值jnz L2 ;jnz:jump
10、 if not zerotest word ptr SI,01H ;判斷要和當(dāng)前數(shù)較的數(shù)是否為奇數(shù)jnz NEXT ;不是奇數(shù),跳轉(zhuǎn)執(zhí)cmp AX,SI ;較jb NEXT ;AX中的值于SI,跳轉(zhuǎn)L2: mov AX,SI ;這段代碼兩個功能:;如果開始AX中放的不是偶數(shù),反復(fù)執(zhí)這代碼,使它變成偶數(shù);如果找到AX中更的偶數(shù),那么更換AX中的值為值NEXT: add SI,2loop L1MOV AX, 4C00H INT 21HCode endsend start注意此處判斷奇偶的法: 使的是實驗中講到的TEST指令,即將兩個操作數(shù)進(jìn)邏輯與操作,得到的結(jié)果于改變標(biāo)志位不進(jìn)保存。進(jìn)制中判斷奇偶
11、的法很簡單,如果最低位為1,就是奇數(shù),否則就是偶數(shù),因此判斷8位寄存器中的數(shù)據(jù)是奇是偶,只需 和01H進(jìn)TEST即可,如果ZF = 1(Zero Flag,為1表剛才得到的運算結(jié)果為0),則說明是偶數(shù),否則是奇數(shù)。其次考察的同樣是跳轉(zhuǎn)指令。je代表的是相等則跳轉(zhuǎn),上通常使cmp指令來改變標(biāo)志位。jne則為不相等即跳轉(zhuǎn)。jg(jump if greater)和jl(jump if less)為有符號的較,jg為如果于則跳轉(zhuǎn),jl為如果于則跳轉(zhuǎn),上通常使cmp來改變標(biāo)志位,于和于指的是第個數(shù)于第個數(shù)和第個數(shù)于第個數(shù)。jge和jle即于等于和于等于。ja(jump if over)和jb(jump
12、if below) 為符號的較跳轉(zhuǎn)。6. 有10個數(shù),統(tǒng)計正數(shù)的個數(shù),存放在變量M中。經(jīng)過匯編后,形成.EXE件,先G=0命令執(zhí)程序,-D命令查看M單元的內(nèi)容,會 發(fā)現(xiàn)結(jié)果不正確。單步執(zhí)命令T查找程序中的邏輯錯誤,注意每次循環(huán)中AL寄存器中的值變化是否正確(AL寄存器中存放正數(shù)的個數(shù))。;未修正的代碼:DSEG SEGMENTMSG DB 4, -2, -6, 0, 5, 67, 8, -3, 5, 6 M DB ?DSEG ENDS CSEG SEGMENTASSUME CS: CSEG, DS: DSEG START: MOV AX, DSEGMOV DS, AX MOV CX, 10MO
13、V AL, 0 LEA SI, MSGL1: MOV BL, SI CMP BL, 0JBE NEXT ;這是錯誤的,JBE是符號較,應(yīng)該改為JLE。符號較不能對負(fù)數(shù)進(jìn)較,所以;不能區(qū)分正數(shù)和負(fù)數(shù)。;這統(tǒng)計的是正數(shù)的個數(shù),所以遇到于等于0的數(shù)則跳轉(zhuǎn)。INC AL NEXT: INC SILOOP L1 MOV M, ALMOV AX, 4C00H INT 21HCSEG ENDSEND START;正確代碼:DSEG SEGMENTMSG DB 4, -2, -6, 0, 5, 67, 8, -3, 5, 6 M DB ?DSEG ENDS CSEG SEGMENTASSUME CS: CSE
14、G, DS: DSEG START: MOV AX, DSEGMOV DS, AX MOV CX, 10MOV AL, 0 LEA SI, MSGL1: MOV BL, SI CMP BL, 0JLE NEXT;JBE使符號較,因此不能較出正數(shù)。;如果0算正數(shù)的話,JLE改為JLINC AL NEXT: INC SILOOP L1 MOV M, ALMOV AX, 4C00H INT 21HCSEG ENDSEND STARTLEA指令:通過LEA指令,可以將第操作數(shù)的 地址 賦予第操作數(shù)。如, LEA SI,ARRAY ,就是將ARRAY的元素地址賦予SI。 MOV SI,ARRAY 等同于
15、 MOV SI,ARRAY ,是將ARRAY地址下第個元素的值賦予SI。注意, LEA SI,ARRAY 等價于 MOV SI,OFFSET ARRAY 。7. 假設(shè)有組數(shù)據(jù):5,-4,0,3,100,-51請編程序,判斷:每個數(shù)于0,等于0,還是于0;并將最終結(jié)果存于以result為存儲 的字節(jié)單元中,(Result DB 6 dup(?))即:編程提:1. 先將原始數(shù)據(jù)裝起始地址為XX的字節(jié)存儲單元中。2. 其中判斷部分可采CMP指令,得到個分結(jié)構(gòu),分別輸出“y=0”, “y=1”, “y=-1”。將結(jié)果存result的相應(yīng)單元3. 程序中存在個循環(huán)結(jié)構(gòu),循環(huán)6次,調(diào)6次分結(jié)構(gòu)后結(jié)束。;程
16、序源代碼:assume ds:Dseg,cs:Cseg Dseg segmentdata db 5,-4,0,3,100,-51result db 6 dup(?) Dseg endsCseg segment start:mov ax,Dseg ;取得數(shù)據(jù)段的地址mov ds,ax ;將數(shù)據(jù)段的地址放在數(shù)據(jù)段寄存器中mov cx,6mov si,offset data mov bx,offset result L1: cmp byte ptr si,0jg L2 ;的操作數(shù)于原操作數(shù),跳轉(zhuǎn)jl L3 ;于,跳轉(zhuǎn)jle L4 ;于等于,跳轉(zhuǎn),因已經(jīng)判斷過是否于,則默認(rèn)為等于跳轉(zhuǎn)L2: mov b
17、yte ptr bx,1 jmp NEXTL3: mov byte ptr bx,-1 jmp NEXTL4: mov byte ptr bx,0 NEXT: inc bxinc si loop l1mov ax,4c00H int 21Cseg endsend start這道題沒有什么可說的,按照題意做即可,注意跳轉(zhuǎn)指令的應(yīng)。 mov byte ptr bx,1 此處需要使 byte ptr 指定數(shù)據(jù)類型,因為 bx 是塊內(nèi)存,不知道需要多的內(nèi)存來容納移的即數(shù),因此需要 byte ptr 指定為字節(jié)型。8. 數(shù)據(jù)段中的三個字符,調(diào)程序?qū)⑵渲饌€顯出來。程序的功能是顯個字符。單步執(zhí),觀察SP、I
18、P的變化,并D命令查看棧 頂?shù)膬?nèi)容。DATA SEGMENT MAG DB 'ABC' DATA ENDSSTACK_SEG SEGMENT DB 100 DUP(?)TOS LABEL WORD STACK_SEG ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS: STACK_SEG START:MOV AX, STACK_SEG MOV SS, AXMOV SP, OFFSET TOS MOV AX, DATAMOV DS, AX MOV SI, 0MOV CX, 3LL: MOV DL, MAGSI CALL MADDINC SI
19、LOOP LLMOV Ax, 4C00H INT 21HMADD PROC MOV AH, 02H INT 21HRETMADD ENDP CODE ENDS END START此處使proc和endp指定了匯編程序的個進(jìn)程,我們可以把它看作個程序,在其他程序運的進(jìn)程中,可以通過call指令來調(diào)這個此程序,程序的返回使ret指令。具體的實現(xiàn)原理:1)call指令:格式為 call 標(biāo)號先將當(dāng)前的IP或CS和IP壓棧中,再跳轉(zhuǎn)標(biāo)號處,跳轉(zhuǎn)類似于jmp。call指令不能執(zhí)短跳轉(zhuǎn),但可以進(jìn)近跳轉(zhuǎn)和遠(yuǎn)跳轉(zhuǎn)。2)ret和retf指令:格式為 ret 。ret指令棧中的數(shù)據(jù),修改IP的內(nèi)容,從實現(xiàn)近轉(zhuǎn)移。
20、retf指令棧中的數(shù)據(jù),修改CS和IP的內(nèi)容,從實現(xiàn)遠(yuǎn)轉(zhuǎn)移。9. 將個給定的進(jìn)制數(shù)按位轉(zhuǎn)換成相應(yīng)的ASCII碼字符串,送到指定的存儲單元,如進(jìn)制數(shù)10010011轉(zhuǎn)換成字符串為10010011。要求將轉(zhuǎn)換過程寫成程序,且程序應(yīng)具有較好的通性,必須能實現(xiàn)對8位和16位進(jìn)制數(shù)的轉(zhuǎn)換。(寄存 器或變量實現(xiàn)參數(shù)傳遞)測試數(shù)據(jù):Var8bit byte 10010011BVar16bit word 1010001111000100B 顯單元:Show8bit byte 8 dup (?) Show16bit byte 16 dup (?);程序源代碼:assume ds:Dseg,cs:Cseg Dse
21、g segmentVar8bit db 10010011BVar16bit dw 1010001111000100BShow8bit db 8 dup(?) Show16bit dw 16 dup(?) Dseg endsCseg segment main procstart: mov ax,Dseg mov ds,axmov dl,Var8bit;使dx的低位dl;直接將Var8bit這個值賦給dl。mov cx,8;8位,循環(huán)8次lea si,Show8bit;將show8bit的地址傳給si;此處要取得的是地址,因為要在Show8bit這個數(shù)組中存儲結(jié)果。call solve;調(diào)進(jìn)程,進(jìn)
22、進(jìn)制->字符串的處理mov si,byte ptr 0dh;回車,添加在字符串尾mov si+1,byte ptr 0ah;換mov si+2,byte ptr '$'結(jié)束符;上三句直接加上即可。lea dx,Show8bit;打印ds:dx位置的內(nèi)容mov ah,9h;打印字符串int 21hmov dx,Var16bit mov cx,16lea si,Show16bit call solvemov si,byte ptr 0dh;回車mov si+1,byte ptr 0ah;換mov si+2,byte ptr '$'結(jié)束符lea dx,Show1
23、6bit;打印ds:dx位置的內(nèi)容mov ah,9h;打印字符串int 21hmov ax,4c00h int 21hmain endp solve proccmp cx,8 ;判斷要處理的數(shù)據(jù)是8位還是16位jne L1mov dh,dl;如果不是16位,將dl復(fù)制給dh L1: mov al,0;將al置0,即每次只處理位rol dx,1;循環(huán)左移1位,將最位放CFrcl al,1;帶進(jìn)位的循環(huán)左移,位,即將剛才取到的位數(shù)放在al中add al,30h;因為0的ASCII碼為48,即30H,加上30H將數(shù)字變成字符mov si,al;這個字節(jié)處理完了,存到si中inc si loop L1
24、 retsolve endp Cseg ends end start這段程序?qū)嶋H上沒有“主函數(shù)”,是將“main”也做成了個proc程序,我們可以為地把它當(dāng)成主函數(shù),在主函數(shù)中調(diào)solve函數(shù),完成需要解決的問題。細(xì)節(jié)詳見注釋。solve程序?qū)崿F(xiàn)的實際上是:將存儲數(shù)據(jù)的dx循環(huán)左移,將移出的數(shù)據(jù)循環(huán)左移到al中,即al的最低位即為剛才移的數(shù)據(jù)。加上30H后變成字符,處理完成,放si中。10. 將個給定的進(jìn)制數(shù)按位轉(zhuǎn)換成相應(yīng)的ASCII碼字符串,送到指定的存儲單元,如進(jìn)制數(shù)10010011轉(zhuǎn)換成字符串為10010011。要求將轉(zhuǎn)換過程寫成程序,且程序應(yīng)具有較好的通性,必須能實現(xiàn)對8位和16位進(jìn)制
25、數(shù)的轉(zhuǎn)換。(堆棧 實現(xiàn)傳參:可以選擇過程來平衡堆棧,也可以調(diào)過程來實現(xiàn)平衡堆棧,程序功能說明中要指出)測試數(shù)據(jù):Var8bit byte 10010011BVar16bit word 1010001111000100B 顯單元:Show 8bit byte 8 dup (?) Show 16bit byte 16 dup (?);程序源代碼:assume ds:data,cs:code,ss:stack data segmentVar8bit db 10010011BVar16bit dw 1010001111000100BShow8bit db 8 dup(?) Show16bit dw 16 dup(?) data endsstack segmentdw 24 dup(?);開辟20位的空間,即5個字節(jié)tos label word;設(shè)置棧底地址stack ends code segment main procstart: mov ax,stack mov ss,axmov sp,offse
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 4000噸年無機碘化物生產(chǎn)項目可行性研究報告寫作模板-申批備案
- 2025年全球及中國3-氨基苯磺酸行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球噪聲緩解系統(tǒng)行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國膀胱沖洗器行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球多層雙向穿梭車行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球斗提機畚斗行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球汽車雙面膠帶行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球單立柱電動堆垛機行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球柔印機網(wǎng)紋輥行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球3-溴-4-氟苯甲酸行業(yè)調(diào)研及趨勢分析報告
- Unit 7 第3課時 Section A (Grammar Focus -4c)(導(dǎo)學(xué)案)-【上好課】2022-2023學(xué)年八年級英語下冊同步備課系列(人教新目標(biāo)Go For It!)
- 2025年上半年長沙市公安局招考警務(wù)輔助人員(500名)易考易錯模擬試題(共500題)試卷后附參考答案
- 2025河北邯鄲世紀(jì)建設(shè)投資集團(tuán)招聘專業(yè)技術(shù)人才30人高頻重點提升(共500題)附帶答案詳解
- 慈溪高一期末數(shù)學(xué)試卷
- 《基于新課程標(biāo)準(zhǔn)的初中數(shù)學(xué)課堂教學(xué)評價研究》
- 貴州省黔東南州2024年七年級上學(xué)期數(shù)學(xué)期末考試試卷【附答案】
- 醫(yī)院廉潔自律承諾書
- 胚胎移植術(shù)前術(shù)后護(hù)理
- 企業(yè)招聘技巧培訓(xùn)
- 學(xué)校校本課程《英文電影鑒賞》文本
- 華為HCSA-Presales-IT售前認(rèn)證備考試題及答案
評論
0/150
提交評論