匯編語言期末總結(jié)地大_第1頁
匯編語言期末總結(jié)地大_第2頁
匯編語言期末總結(jié)地大_第3頁
匯編語言期末總結(jié)地大_第4頁
匯編語言期末總結(jié)地大_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、2寄存器寄存器說明說明AX作為累加器用,所以它是算術(shù)運(yùn)算的主要寄存器。在乘除指令中指定用來存放操作數(shù)。另外,所有的I/O指令都使用AX或AL與外部設(shè)備傳送信息。BX在計(jì)算存儲器地址時(shí),可作為基址寄存器使用。CX常用來保存計(jì)數(shù)值,如在移位指令、循環(huán)指令和串處理指令中用作隱含的計(jì)數(shù)器DX在作雙字長運(yùn)算時(shí),可把DX和AX組合在一起存放一個(gè)雙字長數(shù),DX用來存放高16位數(shù)據(jù)。此外,對某些I/O操作,DX可用來存放I/O的端口地址3寄存器名稱說明CS代碼段寄存器存放當(dāng)前執(zhí)行的程序的段地址DS數(shù)據(jù)段寄存器存放當(dāng)前執(zhí)行的程序所用操作數(shù)的段地址SS堆棧段寄存器存放當(dāng)前執(zhí)行的程序所用堆棧的段地址ES附加段寄存器

2、存放當(dāng)前執(zhí)行程序中一個(gè)輔助數(shù)據(jù)段的段地址【SP、BP、SI、DI】四個(gè)16位寄存器可以象數(shù)據(jù)寄存器一樣在運(yùn)算過程中存放操作數(shù),但它們只能以字(16位)為單位使用。此外,它們更經(jīng)常的用途是在存儲器尋址時(shí),提供偏移地址。因此,它們可稱為指針或變址寄存器。4寄存器名稱說明SP堆棧指針寄存器用來指出棧頂?shù)钠频刂稡P基址指針寄存器在尋址時(shí)作為基地址寄存器使用,但它必須與堆棧段寄存器SS聯(lián)用來確定堆棧段中的存儲單元地址SI源變址寄存器在串處理指令中,SI作為隱含的源變址寄存器與DS聯(lián)用,以確定數(shù)據(jù)段中的存儲單元地址,并有自動增量和自動減量的變址功能DI目的變址寄存器在串處理指令中,DI和附加段寄存器ES

3、聯(lián)用,以達(dá)到在附加段中尋址的目的,然后DI自動增量或減量5寄存器名稱說明IP指令指針寄存器它用來存放將要執(zhí)行的下一條指令地址的偏移量,它與段寄存器【CS】聯(lián)合形成代碼段中指令的物理地址。在計(jì)算機(jī)中,控制程序的執(zhí)行流程就是通過控制IP的值來實(shí)現(xiàn)的FLAGS 標(biāo)志寄存器這是一個(gè)存放條件碼標(biāo)志、控制標(biāo)志的16位寄存器標(biāo)志標(biāo)志寄存器寄存器6標(biāo)志位名稱說明Debug1Debug0ZF零標(biāo)志位/ZeroFlag指令執(zhí)行后,結(jié)果是否為0?1:0sub,mul,add,divinc,or,andZRNZPF奇偶標(biāo)志位/ParityFlag指令執(zhí)行后,結(jié)果的bit位中,1的個(gè)數(shù)是否為偶數(shù)?1:0PEPOSF符號

4、標(biāo)志位/SignFlag指令執(zhí)行后,結(jié)果是否為負(fù)?1:0NGPLCF進(jìn)位標(biāo)志位/CarryFlag無符號運(yùn)算時(shí),記錄運(yùn)算結(jié)果的最高有效位向更高位的進(jìn)位值,或從更高位的借位值CYNCOF溢出標(biāo)志位/OverflowFlag有符號運(yùn)算時(shí),運(yùn)算結(jié)果是否發(fā)生溢出?1:0OVNVDF方向標(biāo)志位/DirectionFlag0-串處理指令時(shí),si,di遞增1-串處理指令時(shí),si,di遞減此標(biāo)志位要與movsb,movsw配合使用,指明每次循環(huán)后si,di的增減AF輔助進(jìn)位標(biāo)志/AuxiliaryCarryFlag運(yùn)算時(shí)D3位(低半字節(jié))有進(jìn)位或借位時(shí),AF=1;否則AF=0。如:49H+6DHB6H,D3有

5、進(jìn)位:AF=1TF跟蹤標(biāo)志/TraceFlag用于控制處理器進(jìn)入單步跟蹤方式:0-禁止進(jìn)入單步中斷跟蹤,處理器正常工作1-允許進(jìn)入單步中斷跟蹤,處理器單步執(zhí)行,跟蹤指令執(zhí)行IF中斷標(biāo)志/InterruptFlag用于控制外部可屏蔽中斷是否可以被處理器響應(yīng):設(shè)置IF1,則允許可屏蔽中斷;設(shè)置IF0,則禁止可屏蔽中斷。-U: 查看匯編指令查看匯編指令 【-U1000:0】-R: 查看、修改寄存器的值查看、修改寄存器的值【-RAX】修改寄存器AX的值-T: 執(zhí)行命令執(zhí)行命令-D: 查看內(nèi)存查看內(nèi)存【-D段地址:偏移地址】如:【-D1000:0】【-D1000:09】-E: 改寫內(nèi)存改寫內(nèi)存【-E段地

6、址:偏移地址數(shù)據(jù)】如:【-E1000:012345】【-E1000:0abc】【-E1000:0“welcommasm”】-A: 寫匯編指令到內(nèi)存寫匯編指令到內(nèi)存【-A1000:0】movax,111.7如果未指定寄存器,對內(nèi)存單元的操作采用以下形式:【1】wordptr指定訪問的內(nèi)存單元為字字單元,如:movword ptrds:01incword ptrbxincword ptrds:0addword ptrbx,2【2】byteptr指定訪問的內(nèi)存單元為字節(jié)字節(jié)單元,如:movbyte ptrds:01incbyte ptrbxincbyte ptrds:0addbyte ptrbx,2

7、8910dbdd1ddadbasdfghjk定義字節(jié)型數(shù)據(jù),并初始化,占1個(gè)字節(jié)dwdw1dw0123h,0234h定義字型數(shù)據(jù),并初始化,占2個(gè)字節(jié)dddd1dd0123h,0234h定義雙字型數(shù)據(jù),并初始化,占4個(gè)字節(jié)dupdb3dup(0)【db0,0,0】定義3個(gè)字節(jié),都初始化為0db3dup(1,2,3)【db1,2,3,1,2,3,1,2,3】定義9個(gè)字節(jié)db3dup(abc,ABC)【dbabcABCabcABCabcABC】定義18個(gè)字節(jié)db重復(fù)次數(shù)dup(重復(fù)的數(shù)據(jù))重復(fù)的數(shù)據(jù)可以為db,也可以為dw,ddp像這種可以通過依據(jù)數(shù)據(jù),直接計(jì)算出所要找的元素的位置的表,我們稱其為

8、:直接定址表。tabledb0123456789ABCDEF;字符表moval,tablebx;標(biāo)號+下標(biāo)11assumecs:codecodesegment a db 1,2,3,4,5,6,7,8 b dw 0start:movsi,0movcx,8s:moval,asimovah,0addb,axincsiloopsmovax,4c00hint21hcodeendsendstart12assumecs:codecodesegment a : db 1,2,3,4,5,6,7,8 b : dw 0start:movsi,offsetamovbx,offsetbmovcx,8s:moval,

9、cs:simovah,0addcs:bx, axincsiloopsmovax,4c00hint21hcodeendsendstartp對于程序中的adb1,2,3,4,5,6,7,8u指令:moval,asi相當(dāng)于:moval,cs:0siu指令:moval,a3相當(dāng)于:moval,cs:03u指令:moval,abx+si+3相當(dāng)于:moval,cs:0bx+si+313p數(shù)據(jù)標(biāo)號包含了對單元長度的描述,所以,在指令中,它可以代表一個(gè)段中的內(nèi)存單元。p對于程序中的bdw0。u指令:movax,b相當(dāng)于:movax,cs:8u指令:movb,2相當(dāng)于:movwordptrcs:8,2u指令:

10、incb相當(dāng)于:incwordptrcs:8p在這些指令中,標(biāo)號b代表了一個(gè)內(nèi)存單元,地址為code:8,長度為2字節(jié)。14setscreen:;ah子功能號,0-sub1,1-sub2,2-sub3,3-sub4jmpshortsettable dw sub1,sub2,sub3,sub4set:pushbxcmpah,3;判斷傳遞的子功能號是否大于3jasretmovbl,ahmovbh,0addbx,bx;根據(jù)ah中的功能號計(jì)算對應(yīng)子程序的地址在table表中的偏移call word ptr tablebx;調(diào)用對應(yīng)的功能子程序sret:popbxiret15p另一種子程序跳轉(zhuǎn)實(shí)現(xiàn)方式:

11、ah子功能號16setscreen:cmpah,0jedo1cmpah,1jedo2cmpah,2jedo3cmpah,3jedo4jmpshortsretdo1:callsub1jmpshortsretdo2:callsub2jmpshortsretdo3:callsub3jmpshortsretdo4:callsub4sret:iret17jmpjmp ax目標(biāo)地址跳轉(zhuǎn) 將IP設(shè)為axjmp short s0位移跳轉(zhuǎn)【(IP)=標(biāo)號s0所在8位偏移】跳轉(zhuǎn)到標(biāo)號s0處,即將IP設(shè)為標(biāo)號s0所在地址,IP修改范圍-128127,短轉(zhuǎn)移jmp near ptr s0位移跳轉(zhuǎn)段內(nèi)轉(zhuǎn)移【(IP)=標(biāo)

12、號s0所在16位偏移】段內(nèi)近轉(zhuǎn)移,跳轉(zhuǎn)到標(biāo)號s0處,即將IP設(shè)為標(biāo)號s0所在地址,IP修改范圍-3276832767,jmp far ptr s0目標(biāo)地址跳轉(zhuǎn)段間轉(zhuǎn)移【(CS)=標(biāo)號s0所在段,(IP)=標(biāo)號s0所在16位偏移】段間遠(yuǎn)轉(zhuǎn)移,跳轉(zhuǎn)到標(biāo)號s0處,即將同時(shí)修改CS和IP,設(shè)為標(biāo)號s0所在的段和偏移地址,IP修改范圍-3276832767,jmp word ptr ds:10目標(biāo)地址跳轉(zhuǎn)段內(nèi)轉(zhuǎn)移【(IP)=(16*(ds)+10)】段內(nèi)轉(zhuǎn)移,將IP設(shè)為指定內(nèi)存數(shù)據(jù)jmp dword ptr ds:10目標(biāo)地址跳轉(zhuǎn)段間轉(zhuǎn)移【(CS)=(16*(ds)+10+2),(IP)=(16*(ds

13、)+10)】段間轉(zhuǎn)移,IP設(shè)為ds:10,CS設(shè)為ds:1218callcall s0【PushIP,jmpnearptrs0】將IP壓棧,跳轉(zhuǎn)到標(biāo)號處,此跳轉(zhuǎn)為段內(nèi)轉(zhuǎn)移call ax【PushIP,jmpax】將IP壓棧,IP設(shè)為ax,段內(nèi)轉(zhuǎn)移call word ptr ds:0【PushIP,jmpwordptrds:0】將IP壓棧,IP設(shè)為ds:0,段內(nèi)轉(zhuǎn)移call dword ptr ds:0【PushCS,PushIP,jmpdwordptrds:0】將CS、IP壓棧后,段間轉(zhuǎn)移,IP設(shè)為ds:0,CS設(shè)為ds:2call far ptr s0【PushCS,PushIP,jmpfa

14、tptrs0】將CS、IP壓棧,跳轉(zhuǎn)到標(biāo)號處,遠(yuǎn)轉(zhuǎn)移、段間轉(zhuǎn)移retret【popIP】利用棧中的數(shù)據(jù),實(shí)現(xiàn)近轉(zhuǎn)移ret N【popIP,addsp,N】利用棧中的數(shù)據(jù),實(shí)現(xiàn)近轉(zhuǎn)移,同時(shí),將棧頂下移N個(gè)內(nèi)存單元,一般用于函數(shù)調(diào)用時(shí),如果采用棧傳遞參數(shù),返回時(shí),需要將傳入的參數(shù)清空,可采用此語法retfretf【popIP,popCS】利用棧中的數(shù)據(jù),實(shí)現(xiàn)遠(yuǎn)轉(zhuǎn)移iretiret【popIP,popCS,popf】利用棧中的數(shù)據(jù),實(shí)現(xiàn)遠(yuǎn)轉(zhuǎn)移,用于中斷例程的返回p子程序的框架:標(biāo)號:指令retp具有子程序的源程序的框架:19p寄存器:適用于參數(shù)少時(shí)。p變量:適用于同一源文件(程序模塊)中。p堆棧:只

15、適用于傳遞入口參數(shù)。p通過地址表傳送參數(shù)地址20movax,0123hpushaxmovax,0456hpushaxcalladdfun.addfun:pushbpmovbp,spmov ax, bp+4addax,bp+6popbpret 421計(jì)算0123h與0456h的和參數(shù)一,入棧參數(shù)二,入棧call時(shí),會有pushIP的調(diào)用備份bp,此時(shí)棧里已有四個(gè)數(shù)據(jù)通過bp取參數(shù),默認(rèn)段為:ssax=?ax=?描述:popIPaddsp,4p子程序p多重循環(huán)pushcxpopcx2223offsetmov ax, offset s0取得標(biāo)號s0的偏移地址mov ax, offset s2-s1取

16、得標(biāo)號s2與s1的偏移地址差值segmov ax, seg s0獲取標(biāo)號s0所在段地址jcxzjcxz s0【if(cx)=0)jmpshorts0】有條件短轉(zhuǎn)移指令,IP修改范圍-128127looploop s0【cx-;if(cx)!=0)jmpshorts0】循環(huán)指令,IP修改范圍-12812724adcabc ax,bx【ax+bx+CF】帶進(jìn)位加法sbbsbb ax,bx【ax-bx-CF】帶借位減法cmpcmp ax,bx計(jì)算ax-bx,根據(jù)計(jì)算結(jié)果修改標(biāo)志寄存器,影響到的標(biāo)志寄存器:ZF,PF,SF,CF,OFcldcld將方向標(biāo)志位DF設(shè)置為0即movsb時(shí),si,di為遞增

17、stdstd將方向標(biāo)志位DF設(shè)置為1即movsb時(shí),si,di為遞減clicli將中斷標(biāo)志位IF設(shè)置為0禁止可屏蔽中斷stisti將中斷標(biāo)志位IF設(shè)置為1打開可屏蔽中斷25ininal,20h8位從20h端口讀入一個(gè)字節(jié)movdx,3f8hinal,dx16位從3f8h端口讀入一個(gè)字節(jié)outout20h,al8位向20h端口寫入一個(gè)字節(jié)movdx,3f8houtdx,al16位向3f8h端口寫入一個(gè)字節(jié)shlshlal,1邏輯左移:數(shù)據(jù)向左1移位,低位補(bǔ)充0,最后移出的一位寫入CFmovcl,3shlal,cl錯誤:shlal,3邏輯左移:數(shù)據(jù)向左3移位,低位補(bǔ)充0,最后移出的一位寫入CFsh

18、rshral,1邏輯右移:數(shù)據(jù)向右1移位,高位補(bǔ)充0,最后移出的一位寫入CFmovcl,3shral,cl錯誤:shral,3邏輯右移:數(shù)據(jù)向右3移位,高位補(bǔ)充0,最后移出的一位寫入CF26adcabc ax,bx【ax+bx+CF】帶進(jìn)位加法sbbsbb ax,bx【ax-bx-CF】帶借位減法p程序代碼1EF0001000H+2010001EF0Haxbxcxmovax,001EHmovbx,0F000Hmovcx,1000Haddcx,1EF0Hadcbx,1000Hadcax,0020H27p比如,計(jì)算003E1000H 00202000Hp結(jié)果放在ax,bx中,程序如下:movbx,

19、1000Hmovax,003EHsubbx,2000Hsbbax,0020H28mul指令29指令位被乘數(shù)乘數(shù)積mulbl8位alblaxmulbx16位axbxax(低位),dx(高位)mulbyteptrds:08位alds:0axmulwordptres:016位axes:0ax(低位),dx(高位)div指令30指令位被除數(shù)除數(shù)商余數(shù)divbl8位axblalahdivbx16位ax(低位),dx(高位)bxaxdxdivbyteptrds:08位axds:0alahdivwordptres:016位ax(低位),dx(高位)es:0axdxcmp指令:cmpax,bx31無符號運(yùn)算有

20、符號運(yùn)算標(biāo)志寄存器比較結(jié)果標(biāo)志寄存器比較結(jié)果ZF=1ax=bxZF=1ax=bxZF=0ax!=bxZF=0ax!=bxCF=1axbxSF=1且OF=0ax=bxSF=1且OF=1axbxCF=0且ZF=0axbxSF=0且OF=1axbxCF=1或ZF=1ax=bx條件轉(zhuǎn)移指令(無符號數(shù)比較,與cmp配合使用)32指令比較結(jié)果含義檢測的標(biāo)志位jeax=bx等于則轉(zhuǎn)移equalZF=1jneax!=bx不等于則轉(zhuǎn)移notequalZF=0jbax=bx不低于則轉(zhuǎn)移notbelowCF=0jaaxbx高于則轉(zhuǎn)移aboveCF=0且ZF=0jnaax=bx不高于則轉(zhuǎn)移notaboveCF=1或Z

21、F=1cmpax,bxmovsb、movsw指令(1)rep【描述】s:movsbloops【說明】此指令需配合movsb、movsw使用。(2)movsb【功能】將ds:si指向的內(nèi)存單元中的字節(jié)送入es:di中,然后根據(jù)標(biāo)志寄存器DF位的值,將si和di遞增或遞減【描述】(es*16+di)=(ds*16+si)if(df=0)incsi;incdi;elseif(df=1)decsi;decdi;【使用】repmovsb33movsb、movsw指令(3)movsw【功能】將ds:si指向的內(nèi)存單元中的字節(jié)送入es:di中,然后根據(jù)標(biāo)志寄存器DF位的值,將si和di遞增或遞減【描述】(e

22、s*16+di)=(ds*16+si)if(df=0)addsi,2;adddi,2;elseif(df=1)subsi,2;subdi,2;【使用】repmovsw(4)標(biāo)志寄存器)標(biāo)志寄存器DF值的設(shè)定值的設(shè)定【cld】:將DF位置設(shè)定為0【std】:將DF位置設(shè)定為134movsb、movsw指令p(5)實(shí)例)實(shí)例35;源程序段:ds:si=DispStringmovax,csmovds,ax;源數(shù)據(jù)區(qū)段地址:dsmovsi,offsetDispString;目標(biāo)地址:es:di=0:200movax,0moves,axmovdi,200h;長度:cx=DispString子函數(shù)的長度m

23、ovcx,offsetDispStringEnd-offsetDispStringcld;DF為0-傳輸方向?yàn)檎?di,si遞增repmovsbp顯示緩沖區(qū):B8000HBFFFFH(32K)p共分為8頁,第頁4K左右,默認(rèn)顯示第0頁,即地址為B8000HB8F9FH的內(nèi)存(4000字節(jié))p顯示器:80行,25列p往指定內(nèi)存?zhèn)魉蛿?shù)據(jù),會顯示在屏幕上p一個(gè)字符占兩個(gè)字節(jié)低位:ASCII碼高位:字符屬性36p高位:字符屬性3776543210BLRGBIRGB是否閃爍字符背景色(RGB)是否高亮字符顏色(RGB)p紅底綠字:01000010Bp紅底閃爍綠字:11000010Bp紅底高亮綠字:010

24、01010Bp黑底白字:00000111Bp白底藍(lán)字:01110001Bp對于8086PC機(jī),中斷向量表指定放在內(nèi)存地址0處。從內(nèi)存0000:0000到0000:03FF的1024個(gè)單元中存放著中斷向量表。p我們可以用中斷類型碼,在中斷向量表中找到中斷處理程序的入口。然后用它設(shè)置CS和IP,使CPU執(zhí)行中斷處理程序。p中斷號:N,則中斷例程的入口地址在中斷向量表中可以這樣獲?。篒P=N*4,CS=N*4+238TF跟蹤標(biāo)志/TraceFlag用于控制處理器進(jìn)入單步跟蹤方式:0-禁止進(jìn)入單步中斷跟蹤,處理器正常工作1-允許進(jìn)入單步中斷跟蹤,處理器單步執(zhí)行,跟蹤指令執(zhí)行IF中斷標(biāo)志/Interru

25、ptFlag用于控制外部可屏蔽中斷是否可以被處理器響應(yīng):設(shè)置IF1,則允許可屏蔽中斷;設(shè)置IF0,則禁止可屏蔽中斷。39中斷執(zhí)行的步驟如下:【1】取得中斷類型碼N【2】pushf【3】IF=0,IF=0,禁止可屏蔽中斷,禁止單步中斷【4】pushCS【5】pushIP【6】IP=N*4,CS=N*4+2,中斷例程的跳轉(zhuǎn),設(shè)定CS,IP40assume cs:codecode segmentstart:mov ax,csmov ds,axmov si,offset do0;設(shè)置設(shè)置ds:si指向源地址指向源地址mov ax,0mov es,axmov di,200h ;設(shè)置設(shè)置es:di指向目的

26、地址指向目的地址mov cx,offset do0end - offset do0 ;設(shè)置設(shè)置cx為傳輸長度為傳輸長度cld ;設(shè)置傳輸方向?yàn)檎O(shè)置傳輸方向?yàn)檎齬ep movsb;設(shè)置中斷向量表設(shè)置中斷向量表 mov ax,0 mov es,ax mov word ptr es:0*4, 200h mov word ptr es:0*4+2, 0 mov ax,4c00h int 21h41 do0:jmp short do0start db overflow!do0start: mov ax, seg do0 ;獲取標(biāo)號所在段地址獲取標(biāo)號所在段地址mov ds,axmov si, offse

27、t do0 ;獲取標(biāo)號所在段的偏移地址獲取標(biāo)號所在段的偏移地址add si,2 ;去除前面的去除前面的 jmp 指令指令 ;設(shè)置設(shè)置ds:si指向字符串指向字符串mov ax,0b800h mov es,axmov di,12*160+36*2;設(shè)置設(shè)置es:di指向顯存空間的中間位置指向顯存空間的中間位置 mov cx,9;設(shè)置設(shè)置cx為字符串長度為字符串長度 s:mov al,si mov es:di,al inc si add di,2 loop s mov ax,4c00h int 21hdo0end:nopcode endsend startpint10h中斷例程的設(shè)置光標(biāo)位置功能。

28、movah,2;2號功能movbh,0;頁數(shù)movdh,5;第5行movdl,12;第12列int10h;10號中斷調(diào)用42p編程:在屏幕的5列12行顯示字符串“Welcometomasm!”。43assumecs:codedatasegmentdbWelcometomasm!,$dataendscodesegmentstart:mov ah,2 ;置光標(biāo)置光標(biāo)mov bh,0 ;第第0頁頁mov dh,5 ;dh中放行號中放行號mov dl,12 ;dl中放列號中放列號int 10hmov ax,datamov ds,axmov dx,0 ;ds:dx指向字符串的首地址指向字符串的首地址da

29、ta:0mov ah,9int 21hmovax,4c00hint21hcodeendsendstartininal,20h8位從20h端口讀入一個(gè)字節(jié)movdx,3f8hinal,dx16位從3f8h端口讀入一個(gè)字節(jié)outout20h,al8位向20h端口寫入一個(gè)字節(jié)movdx,3f8houtdx,al16位向3f8h端口寫入一個(gè)字節(jié)44moval,2;端口號為70h中的2號單元out70h,al;單元號要先寫入到70端口inal,71h;從71端口讀取2號單元的數(shù)據(jù),賦給alCMOSCMOS端口訪問端口訪問首先,需要將要訪問的端口地址,發(fā)送到70h端口,然后,再從71h端口讀出要訪問的數(shù)據(jù)

30、內(nèi)容。pBCD碼的存放方式:數(shù)碼:01234BCD碼:00000001001000110100數(shù)碼:56789BCD碼:01010110011110001001p比如:數(shù)值26,用BCD碼表示為:0010011045movah,0int16h;中斷16的零號功能,獲取鍵盤上的一個(gè)字符cmpal,1jefun046中斷16的 0 號功能:從鍵盤接收一個(gè)字符47AHAH功能功能入口參數(shù)入口參數(shù)出口參數(shù)出口參數(shù)3C建立文件DS:DX=ASCIIZ串地址CX=文件屬性成功:AX=文件代號錯誤:AX=錯誤碼3D打開文件DS:DX=ASCIIZ串地址AL=0讀,=1寫,=3讀/寫成功:AX=文件代號錯誤:

31、AX=錯誤碼3E關(guān)閉文件BX=文件代號失敗:AX=錯誤碼3F讀文件或設(shè)備DS:DX=數(shù)據(jù)緩沖區(qū)地址BX=文件代號CX=讀取的字節(jié)數(shù)讀成功:AX=實(shí)際讀入的字節(jié)數(shù)AX=0已到文件尾讀出錯:AX=錯誤碼40寫文件或設(shè)備DS:DX=數(shù)據(jù)緩沖區(qū)地址BX=文件代號CX=寫入的字節(jié)數(shù)寫成功:AX=實(shí)際寫入的字節(jié)數(shù)寫出錯:AX=錯誤碼41刪除文件DS:DX=ASCIIZ串地址成功:AX=00出錯:AX=錯誤碼(2,5)42移動文件指針BX=文件代號,CX:DX=位移量AL=移動方式(0:從文件頭絕對位移,1:從當(dāng)前位置相對移動,2:從文件尾絕對位移)成功:DX:AX=新文件指針位置出錯:AX=錯誤碼assu

32、mecs:codeseg,ds:datas,ss:stkstksegmentstackdb128dup(0)stkendsdatassegmentstrdatadb1234567890qwertyuiopasdfghjklzxcvbnm!#%&*()_+=-/.,MZNXBCVALSKDJFHGYTURIEOWPQtgtdatadb256dup($)filename dbf:asm.dat,0datasends48codesegsegmentstart:;設(shè)置棧段movax,stkmovss,axmovsp,128callCreateFilecallWriteFilecallReadF

33、ile49movax,segtgtdatamovds,axmovsi,offsettgtdatamovbl,01000001bmovdh,5movdl,8callDisplayStringInDefinePosmovax,4c00hint21h;子函數(shù)創(chuàng)建文件CreateFile:pushaxpushbxpushcxpushdxpushds;創(chuàng)建文件movcx,0 ;文件屬性movdx,segfilenamemovds,dx50movdx,offsetfilenamemovah,3ch;3c號功能,創(chuàng)建文件int21h;返回:ax-文件代號;關(guān)閉文件;movbx,ax;文件代號;movah,3eh;關(guān)閉;int21hpopdspopdxpopcxpopbxpopaxret;子函數(shù)寫入字符串到文件中WriteFile:pushaxpushbxpushcxpushdxpushds;打開文件movdx,segfilenamemovds,dxmovdx,offsetfilenamemovah,3dh;4d號功能,打開文件moval,3;0-讀,1-寫,3-讀/寫int21h;ax-返回的文

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論