匯編考試匯編語言程序設(shè)計_第1頁
匯編考試匯編語言程序設(shè)計_第2頁
匯編考試匯編語言程序設(shè)計_第3頁
匯編考試匯編語言程序設(shè)計_第4頁
匯編考試匯編語言程序設(shè)計_第5頁
已閱讀5頁,還剩134頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

匯編語言程序設(shè)計

匯編語言程序設(shè)計基本步驟順序程序的基本結(jié)構(gòu)和設(shè)計方法分支程序的基本結(jié)構(gòu)和設(shè)計方法循環(huán)程序的結(jié)構(gòu)形式和程序設(shè)計子程序設(shè)計的基本過程和設(shè)計方法匯編語言程序設(shè)計的一般步驟分析問題,抽象出描述問題的數(shù)學模型確定解決問題的算法或解題思想繪制流程圖和結(jié)構(gòu)圖分配存儲空間和工作單元編制程序程序靜態(tài)檢查上機調(diào)試結(jié)構(gòu)化程序的概念

指程序的設(shè)計、編寫和測試都采用一種規(guī)定的組織形式進行3種基本程序結(jié)構(gòu):順序結(jié)構(gòu)分支(條件選擇)結(jié)構(gòu)循環(huán)結(jié)構(gòu)每一個結(jié)構(gòu)只有一個入口和一個出口,3種結(jié)構(gòu)的任意組合和嵌套就構(gòu)成了結(jié)構(gòu)化的程序。順序結(jié)構(gòu)按照語句實現(xiàn)的先后次序執(zhí)行一系列的操作,沒有分支、循環(huán)和轉(zhuǎn)移分支結(jié)構(gòu)(條件選擇結(jié)構(gòu))根據(jù)不同情況做出判斷和選擇,以便執(zhí)行不同的程序段。分為雙分支結(jié)構(gòu)和多分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)重復(fù)執(zhí)行一系列操作,直到某個條件出現(xiàn)為止。按照條件判斷的位置,可以把循環(huán)分為“當型循環(huán)”和“直到型循環(huán)”。第一種情況是先作條件判斷,第二種情況是先執(zhí)行一次循環(huán),然后判斷是否繼續(xù)循環(huán)。分支結(jié)構(gòu)程序段1程序段2條件JZL1L1:………...L2:…...后繼程序L3:…...JMPL3TESTAX,1YN循環(huán)結(jié)構(gòu)先執(zhí)行、后判斷初始化部分循環(huán)體修改部分條件先判斷、后執(zhí)行初始化部分循環(huán)體修改部分條件后繼程序循環(huán)結(jié)構(gòu)試編寫一程序計算以下表達式的值。X*Y/Z式中X、Y、Z均為無符號的16進制數(shù)。設(shè)X、Y、Z的值存放在字變量X、Y、Z、中,X=1280H,Y=6582H,Z=119H運算的結(jié)果,余數(shù)存于MOD中,商存于RESULT中順序結(jié)構(gòu)NAMEMULT_DIV ;xyzerror.asm錯誤答案DATASEGMENTXDW1280HYDW6582HZDW0119HRESULTDW2DUP(0)MODDW0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFAR MOVAX,DATA MOVDS,AX

LEASI,RESULT錯誤答案 MOVAX,X MULY DIVZ MOV[SI],AX MOVMOD,DX MOVAH,4CH INT21HMAINENDP CODEENDS ENDMAIN

NAMEMULT_DIV;xyzright.asmDATASEGMENTXDW1280HYDW6582HZDW0119HRESULTDW2DUP(0)MODDW0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFAR MOVAX,DATA MOVDS,AX

LEASI,RESULT MOVAX,X MULY MOVBX,AX MOVAX,DX MOVDX,0 DIVZ MOV[SI],AX MOVAX,BX DIVZ

INCSI INCSI MOV[SI],AX MOVMOD,DX MOVAH,4CH INT21HMAINENDP CODEENDS ENDMAIN

8012826519010600-D2AE7E00RESULT:0006AED2MOD:007E順序結(jié)構(gòu)試編寫一程序計算以下表達式的值。w=(v-(x*y+z-540))/x式中x、y、z、v均為有符號字數(shù)據(jù)。設(shè)x、y、z、v的值存放在字變量X、Y、Z、V中,結(jié)果存放在雙字變量W之中,Seq.asm順序結(jié)構(gòu)DATA SEGMENTX DW 200Y DW 100Z DW 3000V DW 10000W DW 2DUP(?)DATA ENDSSTACK SEGMENTSTACK DB200DUP(0)STACK ENDSCODE SEGMENT ASSUMEDS:DATA,CS:CODE,SS:STACKSTART: MOV AX,DATA MOV DS,AX ;DATA→AX MOV AX,X IMUL Y ;(X)*(Y)→DX:AX MOV CX,AX MOV BX,DX ;(DX:AX)→(BX:CX) MOV AX,Z CWD ;(Z)符號擴展

ADD CX,AX ADC BX,DX ;(BX:CX)+(DX:AX)→(BX:CX)

SUB CX,540 SBB BX,0 ;(BX:CX)-540→(BX:CX) MOV AX,V CWD ; (V)符號擴展

SUB AX,CX SBB DX,BX ;(DX:AX)-(BX:CX)→(DX:AX) IDIV X ;(DX:AX)/X MOV W,AX ;商→W MOV W+2,DX ;余數(shù)DX→W+2 MOV AH,4CH INT 21HCODE ENDS ;退出DOS狀態(tài)

END START已知某班學生的英語成績按學號(從1開始)從小到大的順序排列在TAB表中,要查的學生的學號放在變量NO中,查表結(jié)果放在變量ENGLISH中。編寫程序如下:Seq2.asm順序結(jié)構(gòu)DATA SEGMENTTAB DB80,85,86,71,79,96,83,56,32,66,78,84NO DB10ENGLISH DB?DATA ENDSCODE SEGMENTASSUMEDS:DATA,CS:CODEBEGIN: MOV AX,DATA MOV DS,AX LEA BX,TAB MOV AL,NO XLAT TAB MOV ENGLISH,AL MOV AH,4CH INT 21HCODE ENDS END BEGIN簡單的雙分支程序設(shè)計已知在內(nèi)存中有一個字節(jié)單元NUM,存有帶符號數(shù)據(jù),要求計算出它的絕對值后,放入RESULT單元中。Select1.asm題目分析:根據(jù)數(shù)學中絕對值的概念知道,一個正數(shù)的絕對值是它本身,而一個負數(shù)的絕對值是它的相反數(shù);8086/8088指令系統(tǒng)中有專門的求相反數(shù)的指令NEG。

DATA SEGMENT X DB-25 RESULT DB?DATA ENDSCODE SEGMENT ASSUMEDS:DATA,CS:CODESTART: MOV AX,DATA MOV DS,AX ;初始化

MOV AL,X ;X取到AL中

TESTAL,80H;測試AL正負

JZNEXT;為正,轉(zhuǎn)NEXTNEGAL ;否則AL求補NEXT: MOV RESULT,AL ;送結(jié)果

MOV AH,4CH INT 21H ;返回DOSCODE ENDSENDSTART;匯編結(jié)束多分支結(jié)構(gòu)實現(xiàn)的方法條件選擇法一個條件選擇指令可實現(xiàn)兩路分支,多個條件選擇指令就可以實現(xiàn)多路分支。這種方法適用于分支數(shù)較少的情況。轉(zhuǎn)移表法地址表法

用條件轉(zhuǎn)移指令實現(xiàn)程序分支編寫計算下面函數(shù)值的程序:1 X>0Y=0 X=0-1 X<0設(shè)輸入數(shù)據(jù)為X、輸出數(shù)據(jù)Y,且皆為字節(jié)變量。Select2.asmDATA SEGMENT X DB0 y DB?DATA ENDSCODE SEGMENT ASSUMEDS:DATA,CS:CODESTART: MOV AX,DATA MOV DS,AX ;初始化

MOV AL,X ;X取到AL中

cmpAL,0H;

JGgreat;為正,轉(zhuǎn)greatjzzero;為0,轉(zhuǎn)zero movbl,-1 jmpnextzero: MOV bl,0 jmpnextgreat: MOV bl,1 next: movy,bl ;送結(jié)果

MOV AH,4CH INT 21H ;返回DOSCODE ENDSENDSTART;匯編結(jié)束試編一程序,求三個帶符號字數(shù)據(jù)中的最大值,并將最大值存入MAX字單元中。設(shè)三個帶符號數(shù)分別在三個字變量X、Y、Z中存儲。select3DATA SEGMENTX DW00ABHY DW-5Z DW200MAX DW?DATA ENDSCODE SEGMENTASSUMEDS:DATA,CS:CODESTART:MOV AX,DATA MOV DS,AX

MOV AX,X CMP AX,Y ;X>Y? JG L1 MOV AX,Y ;Y>Z? CMP AX,Z JG EXITL2:MOV AX,Z JMP EXITL1: CMP AX,Z ;X>Z? JLE L2EXIT: MOV MAX,AX MOV AH,4CH INT 21HCODE ENDS END START轉(zhuǎn)移表法

把轉(zhuǎn)移到各分支程序段的轉(zhuǎn)移指令依次放在一張表中,這張表稱為轉(zhuǎn)移表。把離表首單元的偏移量作為條件來判斷各分支轉(zhuǎn)移指令在表中的位置。當進行多分支條件判斷時,把當前的條件—偏移量加上表首地址作為轉(zhuǎn)移地址,轉(zhuǎn)移到表中的相應(yīng)位置,繼續(xù)執(zhí)行無條件轉(zhuǎn)移指令,達到多分支的目的。依據(jù)鍵盤輸入的不同數(shù)字,調(diào)用不同的子程序段執(zhí)行某一特定的任務(wù)任務(wù)執(zhí)行完成后,等待新的鍵盤命令輸入,若鍵入的是ESC鍵,則退出。該程序假定各任務(wù)僅顯示各自程序的首地址,并假定命令鍵為1-5。NAMEDISPATCH;dispatch.asmDATASEGMENTMSGDB0DH,0AH,'PLEASEINPUTCONTROLNUMBER$'CALLTABDWPROC1,PROC2,PROC3,PROC4,PROC5DISPBUFDB0DH,0AH,4DUP(0),'$'DATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATA,ES:DATAMAINPROCFAR MOVAX,DATA;L10 MOVDS,AX MOVES,AXREINPUT:LEADX,MSG MOVAH,9 INT21HAGAIN: MOVAH,0 INT16H CMPAL,1BH JZEXIT CMPAL,30H JBEAGAIN CMPAL,35H JAAGAIN;L23 SUBAL,30H DECAL ADDAL,AL;???

MOVAH,0 MOVSI,AX CALLCALLTAB[SI] JMPREINPUTEXIT: MOVAH,4CH INT21HMAINENDPPROC1PROCNEAR;L34 MOVBX,OFFSETPROC1 CALLDISPAD RETPROC1ENDPPROC2PROCNEAR MOVBX,OFFSETPROC2 CALLDISPAD RETPROC2ENDP…DISPADPROCNEAR LEADI,DISPBUF+2;L60 MOVCX,4 MOVDX,4L1: ROLBX,CL MOVAX,BX ANDAX,000FH CMPAL,9 JBENEXT ADDAL,7NEXT:ADDAL,30H STOSB DECDX JNZL1 LEADX,DISPBUF MOVAH,9 INT21H MOVAH,1 INT21HDISPADENDPCODEENDSENDMAIN循環(huán)結(jié)構(gòu)的組成循環(huán)程序的結(jié)構(gòu)循環(huán)程序控制方法循環(huán)程序設(shè)計循環(huán)程序的組成循環(huán)初始化部分循環(huán)體循環(huán)參數(shù)修改部分循環(huán)控制部分循環(huán)程序的結(jié)構(gòu)循環(huán)控制的方法計數(shù)控制法條件控制法混合控制法編寫程序完成求1+2+3+……N的累加和,直到累加和超過1000為止。統(tǒng)計被累加的自然數(shù)的個數(shù)送CN單元,累加和送SUM。Loop.asmDATA SEGMENT SUMDW? CNDW?DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX;初始化

MOVAX,0;0送AX MOVBX,0;0送BXLP: INCBX ;BX加1

ADDAX,BX ;求累加和

CMPAX,1000 ;比較

JBELP;≤1000轉(zhuǎn)

MOVSUM,AX MOVCN,BX ;送結(jié)果

MOVAH,4CH INT21H;返回DOSCODEENDS ENDSTART ;匯編結(jié)束Ax=040bhbx=002dh

多重循環(huán)程序設(shè)計在以BUF為首址的字存儲區(qū)中存放有N個有符號數(shù),現(xiàn)需將它們按大到小的順序排列在BUF存儲區(qū)中,試編寫其程序。采用冒泡排序算法從第一個數(shù)開始依次對相鄰兩個數(shù)進行比較,如次序?qū)?,則不交換兩數(shù)位置;如次序不對則使這兩個數(shù)交換位置。可以看出,第一遍需比較(N-1)次,此時,最小的數(shù)已經(jīng)放到了最后;第二遍比較只需考慮剩下的(N-1)個數(shù),即只需比較(N-2)次;第三遍只需比較(N-3)次,……整個排序過程最多需(N-1)遍。數(shù) 10 8 16 90 32第一遍 10 16 90 32 8第二遍 16 90 32 10 8第三遍 90 32 16 10 8DATA SEGMENT;loop2.asmBUF DW3,-4,6,7,9,2,0,-8,-9,-10,20 N=($-BUF)/2DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV CX,N DEC CXLOOP1: MOV DX,CX MOV BX,0LOOP2: MOV AX,BUF[BX] CMP AX,BUF[BX+2] JGE L XCHG AX,BUF[BX+2] MOV BUF[BX],AXL: ADD BX,2 DEC CX JNE LOOP2 MOV CX,DX LOOP LOOP1 MOV AH,4CH INT 21HCODE ENDS END START程序運行后,BUF區(qū)中的內(nèi)容如下:00001400090007000600-030002000000FCFF0010F8FFF7FFF6FF0000-000000000000000020,9,7,6,3,2,0,-4,-8,-9,-10若要對N個無符號數(shù)按由大到小的順序排列,只需將指令“JGEL”改為“JAEL”即可。將正數(shù)N插入一個已整序的字數(shù)組的正確位置,該數(shù)組的首地址和末地址分別為ARRAYHEAD和ARRAYEND,數(shù)為正數(shù),且按遞增排序Loops1.asm練習1

DATA SEGMENTXDW?ARRAYHEADDW3H,5H,15H,23H,37H,49H,52H,65H,78H,99HARRAYENDDW105HNDW32HDATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART: MOV AX,DATA MOV DS,AX

MOVAX,N MOVARRAYHEAD-2,0FFFFH MOVSI,0COMPARE:CMPARRAYEND[SI],AX JLEINSERT MOVBX,ARRAYEND[SI] MOVARRAYEND[SI+2],BX SUBSI,2 JMPSHORTCOMPARE INSERT:MOVARRAYEND[SI+2],AX

MOV AH,4CH INT 21HCODE ENDS END START;0B41:0000FFFF030005001500-2300320037004900;0B41:00105200650078009900-0501000000000000在附加段中有一個首地址為LIST的未經(jīng)排序的字數(shù)組,在數(shù)組的第一個字中存放著該數(shù)組的長度。附加段中另有一個數(shù)N,編程,在數(shù)組中查找N,找到則把它從數(shù)組中刪除。LOOPS2.ASM練習2

EDATA SEGMENTLISTDW0AH,15H,3H,5H,52H,23H,37H,49H,78H,65H,99HNDW37HEDATA ENDSCODE SEGMENTASSUME ES:EDATA,CS:CODESTART: MOV AX,EDATA MOV ES,AX

MOVAX,N LEADI,LIST CLD PUSHDI MOVCX,ES:[DI] ADDDI,2 REPNZSCASW JEDELETE JMPSHORTEXIT

DELETE:JCXZDEC_CNT NEXT_EL:MOVBX,ES:[DI] MOVES:[DI-2],BX ADDDI,2 LOOPNEXT_EL DEC_CNT:POPDI DECWORDPTRES:[DI]EXIT: MOV AH,4CH INT 21HCODE ENDS END START;0B41:00000900150003000500-5200230049007800;0B41:00106500990099003700-0000000000000000對分搜索查表設(shè)字節(jié)系列位于數(shù)據(jù)段buf中,已按由小到大排序。在字節(jié)系列中查找字符‘Y’,將搜索次數(shù)存于dx中,未找到為-1。bsearch.ASM練習3

子程序結(jié)構(gòu)與設(shè)計方法子程序的定義參數(shù)傳遞子程序應(yīng)用舉例子程序的定義過程名PROC[NEAR/FAR]┆過程名ENDP其中PROC表示過程定義開始,ENDP表示過程定義結(jié)束。過程名是過程入口地址的符號表示。一般過程名同標號一樣,具有三種屬性,即段屬性、偏移地址屬性以及類型屬性。類型NEAR——與主程序在同一個段FAR

——可以與主程序不在同一個段過程調(diào)用近程調(diào)用CALL過程名將當前IP寄存器內(nèi)容進棧(保存CALL下一條指令的偏移地址)將被調(diào)用過程的偏移地址送IP寄存器,控制程序轉(zhuǎn)移到該過程(SP)←(SP)-2((SP+1):(SP))←(IP)(IP)←(IP)+disp16或(IP)←(EA)DATASEGMENT;fun.asm MESSAGEDB"Helloworld!",0DH,0AH,"$"DATAENDSCSEGSEGMENT ASSUMECS:CSEG,DS:DATASTART: MOVAX,DATA MOVDS,AX

CALLDISPLAY MOVAH,4CH INT21HDISPLAYPROC

MOVDX,OFFSETMESSAGE MOVAX,SEGMESSAGE MOVDS,AX MOVAH,9 INT21HRETDISPLAYENDP

CSEGENDS ENDSTART遠程調(diào)用CALLFARPTR過程名將當前CS寄存器內(nèi)容進棧(保存CALL下一條指令的段地址)將當前IP寄存器內(nèi)容進棧(保存CALL下一條指令的偏移地址)將被調(diào)用過程的偏移地址送IP寄存器,段地址送CS寄存器,控制程序轉(zhuǎn)移到該過程過程調(diào)用▲(SP)←(SP)-2((SP+1):(SP))←(CS)(CS)←SEGFAR_PROC▲(SP)←(SP)-2((SP+1):(SP))←(IP)(IP)←OFFSETFAR_PROC過程調(diào)用DATASEGMENT;fun2.asm MESSAGEDB"Helloworld!",0DH,0AH,"$"DATAENDSCSEGSEGMENT ASSUMECS:CSEG,DS:DATASTART: MOVAX,DATA MOVDS,AX

CALLFARPTRDISPLAY MOVAH,4CH INT21HCSEGENDS ENDSTART。。。DISPLAYPROCFAR

MOVDX,OFFSETMESSAGE MOVAX,SEGMESSAGE MOVDS,AX MOVAH,9 INT21H

RETDISPLAYENDP

寄存器法在調(diào)用過程前將參數(shù)置入寄存器約定單元法堆棧法參數(shù)傳遞方式DATASEGMENT ;FUN31.ASM MESSAGEDB"TheSumis" SUMRSTDB?,"$"DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTARTUP:MOVAX,DATA MOVDS,AX MOVAL,1 MOVBL,2 CALLSUM MOVAH,9 MOVDX,OFFSETMESSAGE INT21H MOVAH,4CH INT21HSUM PROC ADDAL,BL ORAL,30H MOVSUMRST,AL RET SUM ENDPCODEENDS ENDSTARTUP通過內(nèi)存(fun32.asm)DATASEGMENT MESSAGEDB"TheSumis" SUMRSTDB?,"$" D1 DB? D2 DB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTARTUP:MOVAX,DATA MOVDS,AX

MOVD1,1 MOVD2,2 CALLSUM

MOVAH,9 MOVDX,OFFSETMESSAGE INT21H MOVAH,1H INT21H MOVAH,4CH INT21HSUM PROC MOVAL,D1 ADDAL,D2 ORAL,30H MOVSUMRST,AL RET SUM ENDPCODEENDS ENDSTARTUPDATASEGMENT MESSAGEDB"TheSumis" SUMRSTDB?,"$"DATAENDSSTACKSEGMENTSDATADB100DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTARTUP: MOVAX,DATA MOVDS,AX;

通過堆棧(fun33.asm) MOVAX,STACK MOVSS,AX LEASP,SDATA MOVAL,1 MOVBL,2 MOVAH,0 MOVBH,0 PUSHAX PUSHBX CALLSUM POPBX POPAX MOVAH,9 MOVDX,OFFSETMESSAGE INT21H

MOVAH,4CH INT21HSUM PROC PUSHBP MOVBP,SP MOVAX,[BP+6] MOVBX,[BP+4] ADDAl,BL ORAL,30H MOVSUMRST,AL POPBP RET SUM ENDPCODEENDS ENDSTARTUPAXBXIPBP………堆棧段擴展段300FD存儲器低地址高地址300FF300FBSP子程序應(yīng)用舉例利用結(jié)構(gòu)及子程序計算函數(shù)Y=(x2+xf(x))f(x2)其中f(x)=ax3+bx2+cx+d=((ax+b)x+c)x+d設(shè)a=4,b=2,c=3,d=7x=2319STRUC.asmNAMEUSESTRUCCOFSTRUCADW?BDW?CDW?DDW?COFENDSDATASEGMENTFXCOF<4,2,3,7>XDW2YDW?DATAENDSSTACKSEGMENTSDATADB100DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKMAINPROCFAR MOVAX,DATA MOVDS,AX MOVAX,STACK MOVSS,AX

PUSHX CALLFFX POPAX MULX MOVBX,AX MOVAX,X MULAX ADDBX,AX POPCX

PUSHX CALLFFX POPAX MULX MOVBX,AX MOVAX,X MULAX ADDBX,AX POPCX

PUSHAX CALLFFX POPAX MULBX MOVY,AX POPCX MOVAH,4CH INT21H RETMAINENDPFFXPROCNEAR POPDI MOVBP,SP MOVAX,[BP] MULFX.A ADDAX,FX.B MULWORDPTR[BP] ADDAX,FX.C MULWORDPTR[BP] ADDAX,FX.D

PUSHAX PUSHDI RETFFX ENDPCODEENDS ENDMAIN

子程序及遞歸求5!funiter.asmCODESEGMENTASSUMECS:CODEMAINPROCFAR MOVAX,5 CALLFARPTRFACTOR X0: MOVAH,4CH INT21H RETMAINENDPFACTORPROCFAR CMPAL,2 JNZSUBFACT RETSUBFACT:PUSHAX DECAL CALLFACTORX1: POPBX MULBL RETFACTOR ENDPCODEENDS ENDMAIN

FACTOR ENDPCODEENDS ENDMAIN

CODESEGMENTASSUMECS:CODEMAINPROCFAR MOVAX,4 CALLFARPTRFACTOR

X0: MOVAH,4CH INT21H RETMAINENDP

FACTORPROCFAR CMPAL,2 JNZSUBFACT RETSUBFACT:PUSHAX DECAL CALLFACTORX1: POPBX MULBL RETFACTOR ENDPCODEENDS ENDMAIN堆棧段300FD存儲器低地址高地址300FF300FBCSIP(X0)4CSIP(X1)3CSIP(X1)子程序應(yīng)用舉例從鍵盤輸入4位16進制數(shù),將其轉(zhuǎn)換為10進制數(shù)輸出1610.asmPSP的字段格式PSPSTRUCINT20HDB2DUP(?)MEMSIZEDW?RESERVEDDB?DOSCALLDB5DUP(?)TERMVCTRDW2DUP(?)BREAKVCTRDW2DUP(?)ERRORVCTRDW2DUP(?)PSPENDS字段位移 字段長度 字段說明Psp+0 2 指令I(lǐng)NT20H+2 2 可有內(nèi)存空間+4 1 保留+5 5 遠調(diào)用指令+A 4 程序結(jié)束地址+E 4 CTRL-BREAK出口地址+12 4 標準錯誤出口地址+16 22 保留+2C 48 環(huán)境段地址+5C 16 FCB1+6C 16 FCB2+7C 4 保留+80 1 約定磁盤傳輸?shù)刂?81 127 非格式化參數(shù)DOS磁盤文件管理

PCDOS分區(qū),其信息由四部分組成分區(qū)引導(dǎo)程序文件分配表文件根目錄區(qū)文件數(shù)據(jù)區(qū)分區(qū)引導(dǎo)程序為本程序的執(zhí)行和以后操作系統(tǒng)的運行提供了一張表格,詳細列出了引導(dǎo)驅(qū)動器的參數(shù),并根據(jù)表格提供的信息把文件根目錄區(qū)的第一扇區(qū)讀進內(nèi)存,查看IO.SYS和MSDOS.SYS文件是否存在,如有,將IO.SYS讀進內(nèi)存0050:0000H處并由此開始執(zhí)行程序文件分配表Thefileallocationtable(FAT表)以簇號為單位的文件鏈表映像圖。寫文件時,可知哪些簇號已被占有讀文件時,可依次將文件內(nèi)容讀出FAT表由簇號組成,每個簇號由磁盤介質(zhì)類型確定包含的扇區(qū)數(shù)文件分配表FAT表由簇號組成,簇按序編號,0、1號保留,從2號按邏輯扇區(qū)連續(xù)編號。簇號與邏輯扇區(qū)的關(guān)系:文件的邏輯扇區(qū)號=(文件的起始簇號-2)×扇區(qū)數(shù)/簇+數(shù)據(jù)區(qū)起始邏輯扇區(qū)號FAT表位于導(dǎo)引區(qū)后,一個簇號由12位或16位表示文件分配表格式簇號 含義0000 磁盤類型標志0001 12位FXFFFFH16位FXFFFFFFH

FX磁盤類型F0H、F9H、F8H0002 記載文件的簇號鏈,文件數(shù)據(jù)區(qū)映像0003 000H或0000H未用或可有…

FF0~FF6H或FFF0~FFF6H保留簇號Xxxx FF7H或FFF7H壞磁道 FFFH或FFFFH最后一個簇號其它是文件的下一個簇號文件分配表格式一個CUSTOM.FIL文件含有簇號2、3、4,002H為起始簇號,如存于軟盤,在表中為FAT相對字節(jié)如存于硬盤,在表中為FAT相對簇號 0 1 2 3 4F0FFFF034000FF0F01234567F8FFFFFF03000400FFFF…文件定位方法112位簇號項1、將首簇號×1.5取整,得到該簇號在表中的首字節(jié)位置2、從首字節(jié)地址取一個字,若簇號為偶,取該字節(jié)的低12位,若簇號為奇,取該字節(jié)的高12位,為下一簇號3、重復(fù)1和24、若簇號為FFFH,是最后一個文件定位方法216位簇號項1、將首簇號作為下一簇號的偏移地址2、從算得的偏移地址讀出一個字,若簇號為FFFH,是最后一個,否則為文件的下一簇號文件分配表簇號為12位表示,文件的首簇號為003h,鏈表數(shù)據(jù)如下:F0FFFF045000FF2F01FF8F0000071900FFFF0D10000FF0FF12F00013F0FF0000求文件占有的簇號鏈根目錄區(qū)根目錄區(qū)存放系統(tǒng)的根目錄,根目錄區(qū)為2個簇號。文件的每個目錄由32個字節(jié)組成,分六個部分:文件狀態(tài)及文件名、文件屬性、時間、日期、起始簇號、文件的長度文件狀態(tài)和文件名(0-10字節(jié))文件屬性(11字節(jié))Dos保留區(qū)(12-21)時間(22-23)日期(24-25)起始簇號(26-27)文件長度(28-31)根目錄區(qū)磁盤文件數(shù)據(jù)區(qū)磁盤根目錄區(qū)之后的所有磁盤空間都屬磁盤文件的數(shù)據(jù)區(qū)DOS磁盤存取功能

DOS功能調(diào)用中斷(INT21H)提供了兩類磁盤文件管理功能FCB表控制方式文件代號式存取方式文件代號式存取方式建立文件打開文件關(guān)閉文件讀文件寫文件取/置文件屬性移動文件指針DOS磁盤存取功能

當用戶需要打開或建立一個文件時,必須提供文件標識符。文件標識符用ASCIIZ字符串表示。ASCIIZ字符串是指文件標識符的ASCII字符串后面再加1個“0”字符。文件標識符的字符串包括驅(qū)動器名、路徑名和文件名。其格式為[d:][path]filename[.exe]其中d為驅(qū)動器名,path為路徑名,.exe為文件名后綴。功能:按指定文件名建立文件。入口參數(shù):(AH)=3CHDS:DX指向ASCIIZ字符串的段地址和偏移地址(CX)=文件屬性。出口參數(shù):若操作成功,則CF=0,(AX)=文件代號;若操作失敗,則CF=1,(AX)=錯誤代碼。建立文件文件屬性是一個說明文件特性的字節(jié)。文件屬性76543210只讀隱文件系統(tǒng)文件卷文件子目錄歸檔位MOVAH,3CHMOVCX,文件屬性LEADX,文件的ASCIZ字串變量INT21H建立文件MOVAH,3CHMOVCX,0LEADX,PATHNAMEINT21HJCERRORMOVHANDLE,AX建立文件功能:打開由ASCIIZ串指定的文件。入口參數(shù):(AH)=3DH,DS:DX指向ASCIIZ字符串的段地址和偏移地址,(AL)=存取方式代碼(0:讀文件,1:寫文件,2:讀、寫文件)。出口參數(shù):若操作成功,則CF=0,(AX)=文件代號;若操作失敗,則CF=1,(AX)=錯誤代碼。打開文件功能:關(guān)閉文件代號指定的文件。入口參數(shù):(AH)=3EH,(BX)=文件代號。出口參數(shù):若操作成功,則CF=0;若操作失敗,則CF=1,(AX)=錯誤代碼。關(guān)閉文件功能:按文件代號讀取文件。入口參數(shù):(AH)=3FH,(BX)=文件代號,(CX)=要讀取的字節(jié)數(shù);DS:DX指向接收數(shù)據(jù)緩沖區(qū)的段地址和偏移地址。出口參數(shù):若操作成功,則CF=0,(AX)=實際讀入字節(jié)數(shù),(AX)<(CX)或(AX)=0,文件已讀完;若操作失敗,則CF=1,(AX)=錯誤代碼。讀文件MOVAH,3DHMOVAL,0LEADX,PATHNM1INT21HJCERRORMOVHANDLE,AX讀文件HANDLEDW?INPROCDB512DUP(?)MOVAH,3FHMOVBX,HANDLEMOVCX,512LEADX,INPROCINT21HJCERRORCMPAX,0JEENDFILE讀文件功能:按文件代號寫文件。入口參數(shù):(AH)=40H,(BX)=文件代號,(CX)=要寫入的字節(jié)數(shù);DS:DX指向存放寫入信息數(shù)據(jù)緩沖區(qū)的段地址和偏移地址。出口參數(shù):若操作成功,則CF=0,(AX)=寫入字節(jié)數(shù);若操作失敗,則CF=1,(AX)=錯誤代碼。寫文件HANDLE1DW?OUTRECDB256DUP(?)MOVAH,40HMOVBX,HANDLE1MOVCX,256LEADX,OUTRECINT21HJCERRORCMPAX,256JNEERROR2功能:按文件代號取/置文件屬性。入口參數(shù):(AH)=43H,DS:DX指向ASCIIZ串的段地址和偏移地址。(AL)=0,取文件屬性,(AL)=1,置文件屬性;置文件屬性時,(CX)=新文件屬性(低字節(jié))。出口參數(shù):若操作成功,則CF=0,若為取屬性,(CX)=文件屬性;若操作失敗,則CF=1,(AX)=錯誤代碼。取/置文件屬性MOVAH,43HMOVAL,1HMOVCX,01MOVDX,SEGFNAMEMOVDS,DXMOVDX,OFFSETFNAMEINT21HMOVAH,42HMOVBX,文件句柄MOVCX,移動文件指針的高16位數(shù)MOVDX,移動文件指針的低16位數(shù)MOVAL,MCODE;移動方式INT21HMCODE移動方式AL

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論