DOS環(huán)境程序設(shè)計(jì)_第1頁
DOS環(huán)境程序設(shè)計(jì)_第2頁
DOS環(huán)境程序設(shè)計(jì)_第3頁
DOS環(huán)境程序設(shè)計(jì)_第4頁
DOS環(huán)境程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第8章DOS環(huán)境程序設(shè)計(jì)熟悉DOS應(yīng)用程序特點(diǎn)和DOS功能調(diào)用熟悉串操作指令掌握輸入輸出指令及應(yīng)用理解初始化編程、中斷機(jī)制和編程28.1DOS編程DOS環(huán)境是一個(gè)簡(jiǎn)單的16位操作系統(tǒng)平臺(tái)設(shè)計(jì)運(yùn)行于8086和8088處理器也可運(yùn)行于IA-32處理器的實(shí)地址工作方式DOS的特點(diǎn)DOS是單用戶單任務(wù)操作系統(tǒng)DOS系統(tǒng)只有一個(gè)特權(quán)級(jí)別程序可以訪問任意資源Windows操作系統(tǒng)模擬有一個(gè)MS-DOS環(huán)境基于Windows保護(hù)方式的一個(gè)8086仿真環(huán)境3DOS編程的注意事項(xiàng)16位DOS環(huán)境默認(rèn)采用16位操作數(shù)尺寸主要使用16位或8位寄存器、操作數(shù)和尋址方式堆棧以16位為單位壓入PUSH和彈出POP數(shù)據(jù)IA-32處理器的實(shí)地址工作方式還允許使用32位寄存器、操作數(shù)和尋址方式大多數(shù)新增的32位通用指令特別注意:偏移地址只有16位48.1.1實(shí)地址存儲(chǔ)模型主存空間1MB(=220B):00000H~FFFFFH程序設(shè)計(jì)時(shí)分段管理,但有兩個(gè)限制:每個(gè)段最大為64KB段只能開始于低4位地址全為0的物理地址處邏輯地址=段地址∶偏移地址16位段寄存器保存20位段起始地址的高16位偏移地址也用16位數(shù)據(jù)表示物理地址=段地址×16+偏移地址左移二進(jìn)制4位(十六進(jìn)制1位)示意圖5實(shí)地址存儲(chǔ)模型的邏輯地址和物理地址返回616位存儲(chǔ)器尋址方式16位有效地址=基址寄存器+變址寄存器+位移量基址寄存器:BX、BP變址寄存器:SI、DI位移量:8或16位有符號(hào)值多種主存尋址方式直接尋址

MOVAX,WVAR寄存器間接尋址

MOVAX,[BX]寄存器相對(duì)尋址

MOVAX,[BP+4]基址變址尋址

MOVAX,[BX+SI]相對(duì)基址變址尋址

MOVAX,[BX+DI-2]7DOS地址空間分配88.1.2DOS應(yīng)用程序框架;eg0800.asminDOS includeio16.inc ;包含32位輸入輸出文件

.data ;定義數(shù)據(jù)段

…… ;數(shù)據(jù)定義(數(shù)據(jù)待填)

.code ;定義代碼段start: ;程序執(zhí)行起始位置

movax,@data movds,ax

…… ;主程序(指令待填)

exit0 ;程序正常執(zhí)行結(jié)束

…… ;子程序(指令待填)

endstart ;匯編結(jié)束9〔例8-1〕DOS應(yīng)用程序

includeio16.inc ;包含16位輸入輸出文件

.data ;數(shù)據(jù)段msg byte'Hello,Assembly!',13,10,0 ;定義要顯示的字符串

.code ;代碼段start: ;程序起始位置

movax,@data movds,ax

moveax,offsetmsg ;指定字符串的偏移地址

calldispmsg ;調(diào)用I/O子程序顯示信息

exit0 ;程序正常執(zhí)行結(jié)束

endstart ;匯編結(jié)束示意圖10DOS應(yīng)用程序的開發(fā)過程返回DOS16.BAT進(jìn)入DOS環(huán)境MAKE16.BAT匯編連接118.1.3DOS功能調(diào)用DOS操作系統(tǒng)的系統(tǒng)函數(shù)(功能)以中斷服務(wù)程序形式提供,采用軟件中斷進(jìn)行功能調(diào)用,使用寄存器傳遞參數(shù)基本輸入輸出系統(tǒng)ROM-BIOS、操作系統(tǒng)DOS和Linux都采用中斷調(diào)用方式提供系統(tǒng)功能DOS系統(tǒng)調(diào)用一般有如下4個(gè)步驟:(1)在AH寄存器中設(shè)置系統(tǒng)功能調(diào)用號(hào)(2)在指定寄存器中設(shè)置入口參數(shù)(3)用中斷調(diào)用指令(INTN)執(zhí)行功能調(diào)用(4)根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況12DOS基本功能調(diào)用(INT21H)子功能號(hào)功能參數(shù)AH=01H輸入一個(gè)字符AL=輸入字符的ASCII碼AH=02H輸出一個(gè)字符DL=字符的ASCII碼AH=09H輸出一個(gè)字符串DX=字符串地址AH=4CH程序執(zhí)行結(jié)束AL=返回代碼13〔例8-2〕DOS功能調(diào)用程序

.modelsmall .686 .stack

.data ;數(shù)據(jù)段msg byte'Hello,Assembly!',13,10,'$' ;顯示的字符串

.code ;代碼段start: movax,@data movds,ax

movah,9

movdx,offsetmsg ;指定字符串的偏移地址

int21h ;DOS功能調(diào)用顯示信息

movax,4c00h ;執(zhí)行結(jié)束

int21h endstart ;匯編結(jié)束14字符顯示dispmsg proc pusheax

pushebx pushedx movebx,eaxdispm1: moval,[ebx]

testal,al

jzdispm2

movah,2

movdl,al

int21h

incebx jmpdispm1dispm2: popedx

popebx popeax retdispmsg endp15字符輸入readmsg proc pushebx pushecx movebx,eax movecx,eaxrdm1:

movah,1 int21h

cmpal,0dh jzrdm2 mov[ebx],al incebx jmprdm1rdm2: movbyteptr[ebx],0 cmpebx,ecx jzrdm1 subebx,ecx moveax,ebx popecx popebx retreadmsg endp168.2

串操作類指令數(shù)據(jù)串(數(shù)組):以字節(jié)、字和雙字為單位的多個(gè)數(shù)據(jù)存放在連續(xù)的主存區(qū)域中源操作數(shù):允許段超越:DS:[ESI]目的操作數(shù):不允許段超越:ES:[EDI]每執(zhí)行一次串操作:ESI和EDI自動(dòng)±1/2/4以字節(jié)為單位(用B結(jié)尾)操作:地址指針±1以字為單位(用W結(jié)尾)操作:地址指針±2以雙字為單位(用D結(jié)尾)操作:地址指針±4DF=0(執(zhí)行CLD指令):地址指針增加(+)DF=1(執(zhí)行STD指令):地址指針減小(-)178.2.1

串傳送指令 MOVSB|MOVSW|MOVSD;串傳送:ES:[EDI]←DS:[ESI];然后:ESI←ESI±1/2/4,EDI←EDI±1/2/4

STOSB|STOSW|STOSD;串存儲(chǔ):ES:[EDI]←AL/AX/EAX;然后:EDI←EDI±1/2/4

LODSB|LODSW|LODSD;串讀?。篈L/AX/EAX←DS:[ESI];然后:ESI←ESI±1/2/4

REP;執(zhí)行一次串指令,ECX減1;直到ECX=018〔例8-3〕字符串復(fù)制程序-1

.modelsmall .686 .stack .datasrcmsg

byte'Tryyourbest,whynot.','$'

dstmsg byte

sizeof

srcmsgdup(?) .codestart: movax,@data

movds,ax ;設(shè)置數(shù)據(jù)段DS

moves,ax ;設(shè)置附加段ES=DS19〔例8-3〕字符串復(fù)制程序-2

mov

esi,offset

srcmsg

;ESI=源字符串地址

mov

edi,offset

dstmsg

;ESI=源字符串地址

mov

ecx,lengthof

srcmsg

;ECX=字符串長(zhǎng)度

cld

;地址增量傳送

repmovsb

;重復(fù)字符串傳送

movah,9 ;顯示字符串

mov

edx,offset

dstmsg

int21h

endstartagain:movsb loopagainagain:mov

al,[esi]

mov[edi],al

addesi,1

addedi,1

loopagain20〔例8-4〕直接清除屏幕程序

.modelsmall .codestart: movdx,0b800h moves,dx movdi,0 ;設(shè)置ES:DI=B800H∶0000H

movcx,25*80 ;設(shè)置CX=填充個(gè)數(shù)

movax,0720h ;設(shè)置AX=填充內(nèi)容

cld repstosw

movax,4c00h int21h endstart218.2.2

串檢測(cè)指令

CMPSB|CMPSW|CMPSD;串比較:DS:[ESI]-ES:[EDI];然后:ESI←ESI±1/2/4,EDI←EDI±1/2/4

SCASB|SCASW|SCASD;串掃描:AL/AX/EAX-ES:[EDI];然后:EDI←EDI±1/2/4

REPE|REPZ;執(zhí)行一次串指令,ECX減1;直到ECX=0或ZF=0

REPNE|REPNZ;執(zhí)行一次串指令,ECX減1;直到ECX=0或ZF=122〔例8-5〕等長(zhǎng)字符串比較程序

moves,ax

mov

ecx,count

mov

esi,offsetstring1

mov

edi,offsetstring2

cld

repz

cmpsb

;重復(fù)比較,不同或比較完

jnefound

;發(fā)現(xiàn)不同字符,轉(zhuǎn)移

mov

al,'Y'

;字符串相同,顯示Y

jmpdonefound: mov

al,'N' ;字符串不同,顯示Ndone:23〔例8-6〕字符串查找程序-1 movedx,0 moves,dx movedi,edx ;邏輯地址(ES:[EDI]=0:0)起始

movecx,8000h ;32KB主存空間

cldagain1: movedx,sizeofsearch;EDX=待查找字符串長(zhǎng)度

movesi,offsetsearch;ESI=待查找字符串地址

lodsb

;取出第一個(gè)待比較的字符AL=DS;[ESI],ESI=ESI+1

repnzscasb

;重復(fù)掃描:AL-ES:[EDI],EDI=EDI+1 jecxznext ;ECX=0,掃描到最后字符,轉(zhuǎn)移24〔例8-6〕字符串查找程序-2

movebx,edi

;不是最后,保存第一個(gè)字符相同時(shí)的地址again2: decedx jzfound ;比較完所有字符,查找到

lodsb

;比較下一個(gè)字符

scasb jzagain2 ;還相同,繼續(xù)比較

movedi,ebx

;不是完全相同,恢復(fù)第一個(gè)字符相同時(shí)的地址

jmpagain1 ;重新從第一個(gè)字符開始比較25〔例8-6〕字符串查找程序-3next: jnznofound

;最后一個(gè)字符不相同,沒有查找到

decedx jzfound

;待查找內(nèi)容只有一個(gè)字符,查找到nofound: movdl,'N' ;未查找到,顯示N jmpdonefound: movdl,'Y' ;查找到,顯示Y268.3輸入輸出程序設(shè)計(jì)外部設(shè)備通過輸入輸出接口電路(I/O接口)與主機(jī)相連,對(duì)外設(shè)編程實(shí)際上是針對(duì)I/O接口電路編程I/O接口電路呈現(xiàn)給程序員的則是各種可編程寄存器數(shù)據(jù)寄存器狀態(tài)寄存器控制寄存器I/O接口寄存器使用編號(hào)區(qū)別

輸入輸出地址=I/O地址=I/O端口(Port)匯編語言程序員使用I/O指令通過I/O地址訪問外設(shè)278.3.1

輸入輸出指令輸入指令I(lǐng)N:數(shù)據(jù)從I/O接口輸入到微處理器

INAL/AX/EAX,i8/DX輸出指令OUT:數(shù)據(jù)從微處理器輸出I/O接口

OUTi8/DX,AL/AX/EAX串輸入INS指令串輸出OUTS指令I(lǐng)NAL,21HINAL,DX舉例OUT

21H,ALOUTDX,AL舉例輸出:明確向哪個(gè)端口輸出什么數(shù)據(jù)輸入:清楚從哪個(gè)端口輸入什么數(shù)據(jù)281.I/O尋址方式直接尋址I/O指令直接提供8位I/O地址只能尋址最低256個(gè)I/O地址(00~FFH)用i8表示I/O地址,表達(dá)形式上與立即數(shù)一樣DX間接尋址用DX寄存器保存訪問的I/O地址可尋址全部I/O地址(0000~FFFFH)直接書寫成DX,表示I/O地址64K個(gè)I/O地址,不分段292.I/O數(shù)據(jù)傳輸量8位I/O傳輸:I/O指令使用AL16位I/O傳輸:I/O指令使用AX32位I/O傳輸:I/O指令使用EAXout

20h,alout20h,axout

20h,eaxmovdx,3fchout

dx,alout

dx,axout

dx,eax舉例in

al,20hinax,20hineax,

20hmovdx,3fchin

al,dxin

ax,dxin

eax,dx舉例30〔例8-7〕讀取CMOSRAM數(shù)據(jù)程序-1 includeio16.inc .codestart: moval,9 ;AL=9(準(zhǔn)備從9號(hào)單元獲取年代數(shù)據(jù))

out70h,al ;從70H的I/O地址輸出,選擇CMOSRAM的9號(hào)單元

inal,71h ;從71H的I/O地址輸入,獲取9號(hào)單元的內(nèi)容

calldisphb

;顯示AL內(nèi)容,即年代

moval,'-'

;顯示分隔符“-”

calldispc〔例8-7〕讀取CMOSRAM數(shù)據(jù)程序-2

moval,8

;AL=8(從8號(hào)單元獲取月份數(shù)據(jù))

out70h,al inal,71h

calldisphb

;顯示月份

moval,'-'

;顯示分隔符“-”

calldispc

moval,7

;AL=7(從7號(hào)單元獲取日期數(shù)據(jù))

out70h,al inal,71h

calldisphb

;顯示日期21-Nov-23顯示結(jié)果8.3.2

定時(shí)器初始化編程定時(shí)控制在計(jì)算機(jī)系統(tǒng)中具有重要作用初始化編程:通過向接口電路寫入命令字或控制字,選擇其工作方式、設(shè)置原始工作狀態(tài)等驅(qū)動(dòng)程序:操縱I/O接口完成具體工作的程序最底層的驅(qū)動(dòng)程序?qū)崿F(xiàn)基本數(shù)據(jù)傳輸、操作控制等功能操作系統(tǒng)提供更加便于使用的程序模塊或函數(shù)應(yīng)用程序?yàn)樽罱K用戶呈現(xiàn)操作界面使用8253或其兼容電路構(gòu)成定時(shí)控制接口有3個(gè)獨(dú)立的16位計(jì)數(shù)器電路(通道)每個(gè)計(jì)數(shù)器電路支持6種工作方式處理器必須對(duì)其初始化編程331.寫入方式控制字控制字寫入控制字I/O地址:43H(PC機(jī))計(jì)數(shù)器讀寫格式工作方式數(shù)制D7D6D5D4D3D2D1D000計(jì)數(shù)器001計(jì)數(shù)器110計(jì)數(shù)器211非法(8253)11讀回命令(8254)00計(jì)數(shù)器鎖存命令01只讀寫低字節(jié)10只讀寫高字節(jié)11先讀寫低字節(jié)后讀寫高字節(jié)000方式0001方式1*10方式2*11方式3100方式4101方式50二進(jìn)制1十進(jìn)制34方式控制字編程示例

;假設(shè):8253控制端口地址:43H ;設(shè)置其中計(jì)數(shù)器0為方式0 ;采用二進(jìn)制計(jì)數(shù),先低后高寫入計(jì)數(shù)值

moval,30h

;方式控制字:30H=00110000B

out43h,al

;寫入控制端口:43H352.寫入計(jì)數(shù)值選擇二進(jìn)制時(shí)計(jì)數(shù)值范圍:0000H~FFFFH0000H是最大值,代表65536選擇十進(jìn)制(BCD碼)計(jì)數(shù)值范圍:0000~99990000代表最大值10000計(jì)數(shù)值寫入計(jì)數(shù)器各自的I/O地址PC機(jī)上,計(jì)數(shù)器0、1和2的I/O地址依次是40H、41H和42H按方式控制字規(guī)定的讀寫格式進(jìn)行36計(jì)數(shù)值編程示例

;假設(shè):8253的計(jì)數(shù)器0、1、2端口地址:40H~42H ;設(shè)置計(jì)數(shù)器0采用二進(jìn)制計(jì)數(shù) ;寫入計(jì)數(shù)初值:1024(=400H)

movax,1024

;計(jì)數(shù)初值:1024(=400H)

;寫入計(jì)數(shù)器0地址:40H

out40h,al ;寫入低字節(jié)計(jì)數(shù)初值

mov

al,ah out40h,al ;寫入高字節(jié)計(jì)數(shù)初值373.揚(yáng)聲器頻率控制;發(fā)音頻率設(shè)置子程序;入口參數(shù):AX=1.19318×106÷發(fā)音頻率speaker proc pushax

;暫存入口參數(shù)

moval,0b6h

;定時(shí)器2為方式3,先低后高

out43h,al ;寫入方式控制字

popax

;恢復(fù)入口參數(shù)

out42h,al ;寫入低8位計(jì)數(shù)值

mov

al,ah out42h,al ;寫入高8位計(jì)數(shù)值

retspeaker endp定時(shí)器的控制端口地址:43H讀寫計(jì)數(shù)器2計(jì)數(shù)值端口地址:42H388.3.3

揚(yáng)聲器控制編程39〔例8-8〕控制揚(yáng)聲器程序 ;數(shù)據(jù)段freq word

1989

;600Hz頻率對(duì)應(yīng)的計(jì)數(shù)值:1193180/600≈1989

;代碼段,主程序

mov

ax,freq callspeaker ;設(shè)置揚(yáng)聲器的音調(diào)

callspeakon ;打開揚(yáng)聲器聲音

movah,1

;等待按鍵 int21h

callspeakoff ;關(guān)閉揚(yáng)聲器聲音40揚(yáng)聲器發(fā)音控制speakon proc ;揚(yáng)聲器開子程序

pushax

inal,61h ;讀取61H端口的原控制信息

oral,03h ;D1D0=PB1PB0=11,其他不變

out61h,al

;直接控制發(fā)聲

popax retspeakon

endp;揚(yáng)聲器關(guān)子程序andal,0fch;D1D0=PB1PB0=00,其他不變418.4

中斷控制編程中斷是計(jì)算機(jī)系統(tǒng)中非常重要的一種技術(shù)利用外部中斷可以實(shí)時(shí)響應(yīng)外部設(shè)備的數(shù)據(jù)傳送請(qǐng)求能夠及時(shí)處理外部意外或緊急事件利用內(nèi)部中斷提供發(fā)現(xiàn)、調(diào)試并解決程序執(zhí)行時(shí)異常情況的有效途徑428.4.1中斷控制系統(tǒng)IA-32處理器能夠處理256個(gè)中斷用中斷向量號(hào)0~255區(qū)別除法錯(cuò)異常(向量號(hào)0)調(diào)試異常(向量號(hào)1)非屏蔽中斷(向量號(hào)2)斷點(diǎn)異常(向量號(hào)3)溢出異常(向量號(hào)4)無效代碼異常(向量號(hào)6)通用保護(hù)異常(向量號(hào)13)頁面失效異常(向量號(hào)14)……43除法錯(cuò)中斷執(zhí)行除法指令時(shí),若除數(shù)為0或商超過了寄存器所能表達(dá)的范圍,產(chǎn)生的一個(gè)向量號(hào)為0的內(nèi)部中斷〔例8-9〕產(chǎn)生除法錯(cuò)中斷的程序

;數(shù)據(jù)段msg byte0dh,0ah,'Nodivideoverflow!',0

;代碼段

callreaduiw

movbl,1

divbl

mov

eax,offset

msg;沒有除法錯(cuò),顯示信息

calldispmsg示意圖44除法錯(cuò)中斷的運(yùn)行示例返回45溢出中斷執(zhí)行溢出中斷指令I(lǐng)NTO時(shí),若溢出標(biāo)志OF為1,產(chǎn)生的一個(gè)向量號(hào)4的內(nèi)部中斷〔例8-10〕產(chǎn)生溢出中斷的程序

callreaduib

addal,100

jno

noflow

;沒有溢出,轉(zhuǎn)移

into

;有溢出,產(chǎn)生溢出中斷

jmpdonenoflow: mov

eax,offset

msg

;顯示無溢出信息

calldispmsgdone:46中斷指令

INTi8 ;中斷調(diào)用指令:調(diào)用i8號(hào)中斷服務(wù)程序

IRET ;中斷返回指令:從服務(wù)程序返回主程序

INTO ;溢出中斷指令:OF=1,產(chǎn)生4號(hào)中斷

STI ;開中斷指令:允許響應(yīng)可屏蔽中斷請(qǐng)求

CLI ;關(guān)中斷指令:禁止響應(yīng)可屏蔽中斷請(qǐng)求47中斷向量表中斷服務(wù)程序可存于主存任何位置通過地址表結(jié)構(gòu)將中斷向量號(hào)轉(zhuǎn)為地址表項(xiàng),進(jìn)而獲得中斷服務(wù)程序的入口地址實(shí)地址方式下,稱之為中斷向量表物理地址00000H,對(duì)應(yīng)向量號(hào)從0開始依次每4個(gè)字節(jié)安排一個(gè)中斷向量含有16位段地址和16位偏移地址的邏輯地址低字部分是偏移地址、高字部分是段地址256個(gè)中斷占用1KB區(qū)域示意圖48實(shí)方式的中斷向量表結(jié)構(gòu)返回498.4.2

內(nèi)部中斷服務(wù)程序編寫內(nèi)部中斷服務(wù)程序與編寫子程序類似利用過程定義偽指令PROC/ENDP第1條指令通常為開中斷指令STI最后用中斷返回指令I(lǐng)RET通常采用寄存器傳遞參數(shù)主程序需要調(diào)用中斷服務(wù)程序調(diào)用前,需要設(shè)置中斷向量表對(duì)應(yīng)項(xiàng)利用INTn指令調(diào)用中斷服務(wù)程序50〔例8-11〕內(nèi)部中斷服務(wù)程序-1

.modelsmall .stack .dataintoff word?

;用于保存原中斷服務(wù)程序的偏移地址intseg word?

;用于保存原中斷服務(wù)程序的段基地址intmsg byte'AInstructionInterrupt!',0dh,0ah,0

;字符串(以0結(jié)尾)

.codestart: movax,@data movds,ax51〔例8-11〕內(nèi)部中斷服務(wù)程序-2 ;獲取系統(tǒng)的原80H中斷服務(wù)程序地址

movbx,0 moves,bx ;設(shè)置附加段ES=0,指向物理地址低端

movbx,80h ;BL=AL=N=80H

shlbx,1 shlbx,1 ;BX=N×4

movax,es:[bx] ;獲取中斷服務(wù)程序的偏移地址

movintoff,ax

movax,es:[bx+2] ;獲取中斷服務(wù)程序的段基地址

movintseg,ax52〔例8-11〕內(nèi)部中斷服務(wù)程序-3 ;設(shè)置本程序的80H中斷服務(wù)程序地址

movax,offsetnew80h

moves:[bx],ax ;設(shè)置偏移地址

movax,segnew80h

moves:[bx+2],ax ;設(shè)置段基地址 ;中斷調(diào)用

movdx,offsetintmsg ;設(shè)置入口參數(shù)DS和DX

int80h ;調(diào)用80H中斷服務(wù)程序,顯示字符串53〔例8-11〕內(nèi)部中斷服務(wù)程序-4 ;恢復(fù)系統(tǒng)的原80H中斷服務(wù)程序地址

movax,intoff

moves:[bx],ax ;恢復(fù)偏移地址

movax,intseg

moves:[bx+2],ax ;恢復(fù)段基地址

movax,4c00h int21hAInstructionInterrupt!顯示結(jié)果54〔例8-11〕內(nèi)部中斷服務(wù)程序-5new80h proc

;過程定義

sti

;開中斷

pushax

;保護(hù)寄存器

pushbx pushsi

mov

si,dxnew1: mov

al,[si]

;獲取欲顯示字符

cmpal,0

;為“0”結(jié)束

jznew2

movbx,0

;ROM-BIOS調(diào)用顯示一個(gè)字符

movah,0eh

int10h incsi

jmpnew1功能編號(hào)AH=0EHINT10H入口參數(shù)AL=ASCII字符,BX=0功能說明顯示字符55〔例8-11〕內(nèi)部中斷服務(wù)程序-6new2: popsi

;恢復(fù)寄存器

popbx popax

iret

;中斷返回new80h endp

;中斷服務(wù)程序結(jié)束

;80H內(nèi)部中斷服務(wù)程序

;顯示字符串(以0結(jié)尾)

;DS∶DX=緩沖區(qū)首地址AInstructionInterrupt!顯示結(jié)果568.4.3

駐留中斷服務(wù)程序沒有駐留的程序執(zhí)行結(jié)束后,使用的主存空間被DOS回收用于其他程序駐留TSR程序:程序執(zhí)行結(jié)束保存在主存中斷服務(wù)程序要讓其他程序使用必須

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論