5-高級(jí)匯編語(yǔ)言程序設(shè)計(jì)課件_第1頁(yè)
5-高級(jí)匯編語(yǔ)言程序設(shè)計(jì)課件_第2頁(yè)
5-高級(jí)匯編語(yǔ)言程序設(shè)計(jì)課件_第3頁(yè)
5-高級(jí)匯編語(yǔ)言程序設(shè)計(jì)課件_第4頁(yè)
5-高級(jí)匯編語(yǔ)言程序設(shè)計(jì)課件_第5頁(yè)
已閱讀5頁(yè),還剩84頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)封面第五章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆MASM

6.X新特性1第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)第五章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)第五章 高級(jí)匯編語(yǔ)言程序設(shè)計(jì)高級(jí)語(yǔ)言特性宏結(jié)構(gòu)程序設(shè)計(jì)模塊化程序設(shè)計(jì)輸入輸出程序設(shè)計(jì)本章重點(diǎn)及習(xí)題分析MASM

6.X新特性2第

級(jí)

語(yǔ)

設(shè)

計(jì)5.1高級(jí)語(yǔ)言特性5.1

高級(jí)語(yǔ)言特性通過(guò)引入一些偽指令,使匯編語(yǔ)言程序設(shè)計(jì)具有高級(jí)語(yǔ)言程序設(shè)計(jì)的特性,即可以采用類(lèi)似高級(jí)語(yǔ)言的形式設(shè)計(jì)分支、循環(huán)和子程序結(jié)構(gòu),大大減輕了使用匯編語(yǔ)言編程的工作量。條件控制偽指令循環(huán)控制偽指令過(guò)程聲明和調(diào)用偽指令返回第五3第

級(jí)

語(yǔ)

設(shè)

計(jì)5.1.1

條件控制偽指令.IF/.ELSEIF/.ELSE/.ENDIF:類(lèi)似高級(jí)語(yǔ)言的

IF/THIN,ELSE和ENDIF的相應(yīng)功能。匯編時(shí)展開(kāi),自動(dòng)生成相應(yīng)的比較和條件轉(zhuǎn)移指令,實(shí)現(xiàn)分支結(jié)構(gòu)。.IF 條件表達(dá)式 ;條件為真,執(zhí)行分支體1分支體1[.ELSEIF 條件表達(dá)式 ;前面IF[及前面ELSEIF]為假分支體2];當(dāng)前條件為真,執(zhí)行分支體2[.ELSE;前面IF[及前面ELSEIF]為假,分支體3];執(zhí)行分支體3.ENDIF5.1.1條件控制偽指令;分支結(jié)束4第

級(jí)

語(yǔ)

設(shè)

計(jì)條件控制偽指令不考慮多層嵌套,有4種基本格式.IF

條件表達(dá)式分支體.ENDIF;條件表達(dá)式為真,執(zhí);分支體,否則;語(yǔ)句.IF

條件表達(dá)式分支體1.ELSE分支體2.ENDIF;分支體1、2必做其一1.2.5第

級(jí)

語(yǔ)

設(shè)

計(jì)條件控制偽指令.IF

條件表達(dá)式分支體1.ELSEIF

條件表達(dá)式分支體2 ;分支體1和分支體2可.ENDIF ;都不做.IF 條件表達(dá)式 ;條件為真,執(zhí)行分支分支體1.ELSEIF 條件表達(dá)式;前面IF[及前面ELSEIF],分支體2 ;為假當(dāng)前條件為真,執(zhí)行分支體2.ELSE分支體3.ENDIF;前面IF[及前面ELSEIF]為假,;執(zhí)行分支體3;分支結(jié)束3.4.6第

級(jí)

語(yǔ)

設(shè)

計(jì)條件表達(dá)式的三個(gè)問(wèn)題三個(gè)問(wèn)題:關(guān)于條件表達(dá)式中的操作符條件表達(dá)式舉例條件表達(dá)式中的有符號(hào)數(shù)和無(wú)符號(hào)數(shù)的規(guī)定71.關(guān)于條件表達(dá)式中的操作符第

級(jí)

語(yǔ)

設(shè)

計(jì)1.關(guān)于條件表達(dá)式中的操作符表5.1列出的操作符用于偽指令的條件表達(dá)式第三章介紹的操作符用于數(shù)值表達(dá)式和地址表達(dá)式(構(gòu)成指令的操作數(shù)),兩類(lèi)操作符不可混淆。例如表示相等,條件表達(dá)式用“==”,數(shù)值表達(dá)式用“EQ表示邏輯與,條件表達(dá)式用“&&”,數(shù)值表達(dá)式用AND操作符可分為:比較、邏輯運(yùn)算和測(cè)試三類(lèi),其中測(cè)試又可分為:標(biāo)志測(cè)試、位測(cè)試、寄存器測(cè)試存儲(chǔ)單元測(cè)試(reg\mem)。操作符中,單目操作符為!、標(biāo)志測(cè)試、寄存測(cè)試和存儲(chǔ)單元測(cè)試,其他都是雙目操作符。操作符的優(yōu)先級(jí)可用圓括號(hào)規(guī)定。8第

級(jí)

語(yǔ)

設(shè)

計(jì)2.條件表達(dá)式舉例/12.條件表達(dá)式舉例reg

;寄存器不為0,條件為真;為0,條件為假.if

aldec

al.endifmem

;存儲(chǔ)器不為0,條件為真;為0,條件為假.if

byte

ptr[bx]dec

al.endifcarry?

/

overflow?

…位測(cè)試操作符使用格式:數(shù)值表達(dá)式

& 位數(shù)如

“AL

&

5”,測(cè)試AL寄存器的

D5。9第

級(jí)

語(yǔ)

設(shè)

計(jì)/2reg

OP

reg

;OP為表5.1中任意雙目操作符 ax==bx

/

al>=bl

/

al

&&

blreg

OP

memreg

OP

立即數(shù)mem

OP

立即數(shù)單目操作符‘!’:可以放在前述任意表達(dá)式前面, 試相反條件!reg

;寄存器不為0,條件為假;為0,條件為真注釋?zhuān)?)條件控制偽指令不支持?jǐn)?shù)值表達(dá)式,如.if

(x+1)<=5,“+”并不是有效的操作符。2)前述基本表達(dá)式可用“&&”、“||”連接構(gòu)表達(dá)式,如

(ax==bx)&&(cx>=dx)。10第

級(jí)

語(yǔ)

設(shè)

計(jì)3.條件表達(dá)式中的符號(hào)數(shù)/13.條件表達(dá)式中比較的兩個(gè)數(shù)據(jù)可能是無(wú)符號(hào)數(shù),也可能是有符號(hào)數(shù),可分成以下情況:?數(shù)據(jù)為變量:用DB、DW、DD等定義的變量一為無(wú)符號(hào)數(shù),若需要進(jìn)行有符號(hào)數(shù)比較,必須?SBYTE、SWORD、SDWORD定義。數(shù)據(jù)為寄存器或存儲(chǔ)單元:默認(rèn)為無(wú)符號(hào)數(shù)需要進(jìn)行有符號(hào)數(shù)比較,必須使用操作符SBYTvar

sbyte

–1或SWORD

PTR指明類(lèi)型。SBYTE

PTR

BXSBYTE

PTR

[BX+SI+DISP]Var

db

–1.If

al<sbyte

ptr

var.if

al<var…………X√11第

級(jí)

語(yǔ)

設(shè)

計(jì)/2?若表達(dá)式中有一個(gè)數(shù)據(jù)為有符號(hào)數(shù),則強(qiáng)制另一個(gè)數(shù)據(jù)也作為有符號(hào)數(shù)進(jìn)行比較。如

.IF

SWORD

PTR

BX

>=

AX,AX被強(qiáng)制作為有符號(hào)數(shù)看待。(對(duì)變量不適用。若變量作為有符號(hào)數(shù)使用,必須用sbyte/sword/sdword定義)12第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)條件控制偽指令(end)6)本節(jié)新增內(nèi)容:???用于條件表達(dá)式的操作符有符號(hào)數(shù)專(zhuān)用的變量定義偽指令有符號(hào)數(shù)專(zhuān)用的類(lèi)型說(shuō)明操作符★分析教材舉例★瀏覽匯編結(jié)果★例題5.1(實(shí)根判斷)回5.113第

級(jí)

語(yǔ)

設(shè)

計(jì)5.1.2循環(huán)控制偽指令5.1.2循環(huán)控制偽指令.WHILE和

.ENDW :當(dāng)型循環(huán)結(jié)構(gòu).REPEAT和

.UNTIL/.REPEAT和

.UNTILCXZ:直到型.BREAK:退出循環(huán);.CONTINUE :轉(zhuǎn)向循環(huán)體開(kāi)始格式

1.WHILE 條件表達(dá)式;表達(dá)式為真,執(zhí)行循環(huán)體循環(huán)體.ENDW;;循環(huán)體結(jié)束14第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)循環(huán)控制偽指令;重復(fù)執(zhí)行循環(huán)體格式

2.REPEAT循環(huán)體.UNTIL 條件表達(dá)式

;直到條件表達(dá)式為真;重復(fù)執(zhí)行循環(huán)體格式

3.REPEAT循環(huán)體.UNTILCXZ

[條件表達(dá)式];CX←CX-1,直到CX=0;或條件表達(dá)式結(jié)果為真15第

級(jí)

語(yǔ)

設(shè)

計(jì)循環(huán)控制偽指令注 釋?zhuān)簩?duì).REPEAT/.UNTILCXZ(條件表達(dá)式)1)不帶表達(dá)式,結(jié)束循環(huán)的條件為CX-1減到0,循環(huán)控制被匯編為L(zhǎng)OOP指令。2)帶條件表達(dá)式,結(jié)束循環(huán)的條件為CX減到0

或表達(dá)式為真,表達(dá)式只能比較寄存器與寄存器(存儲(chǔ)元、常數(shù)),以及存儲(chǔ)單元與常數(shù)相等(==)或不等(!=),所以,匯編后的指令為L(zhǎng)OOPE或LOOPNE。*分析教材舉例*瀏覽匯編結(jié)果*例題

5.2:求數(shù)組前若干非負(fù)數(shù)之和。*瀏覽例題5.2匯編結(jié)果回5.116第

級(jí)

語(yǔ)

設(shè)

計(jì)5.1.3過(guò)程聲明和調(diào)用偽指令5.1.2

過(guò)程聲明和過(guò)程調(diào)用偽指令利用堆棧傳遞參數(shù)為常用方式,但傳統(tǒng)的編程方法容易出錯(cuò)。MASM6.X擴(kuò)充了PROC偽指令的功能,并新增幾條偽指令,使調(diào)用子程序具有高級(jí)語(yǔ)言的特性。按使用順序介紹:1.過(guò)程聲明

PROTO過(guò)程名

PROTO 語(yǔ)言類(lèi)型

,[參數(shù)名]:類(lèi)型,……注釋?zhuān)?)使用帶參數(shù)的過(guò)程調(diào)用,必須定義語(yǔ)言類(lèi)型,一般用C或STDCALL。2)參數(shù)必須用逗號(hào)打頭;多個(gè)參數(shù)之間用逗號(hào)分割??墒÷?。3)參數(shù)名可省略,類(lèi)例5.3

CHECKSUMD

PROTOC,V1:WORD,V2:WORD17第

級(jí)

語(yǔ)

設(shè)

計(jì)過(guò)程定義格式2.過(guò)程定義PROC過(guò)程名

PROC 語(yǔ)言類(lèi)型

[USES 寄存器列表], 形參1:類(lèi)型,形參2:類(lèi)型…[LOCAL

參數(shù)表]……過(guò)程名

ENDP注釋?zhuān)?)語(yǔ)言類(lèi)型與

USES 之間用空格分割。2)寄存器列表:用空格分割的通用寄存器,決定保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)。參數(shù)用逗號(hào)打頭,且用逗號(hào)分割;參數(shù)名為形參名,調(diào)用時(shí)被實(shí)參替換。如果過(guò)程用到局部變量,用LOCAL偽指令定義。18第

級(jí)

語(yǔ)

設(shè)

計(jì)幾個(gè)可選項(xiàng)的說(shuō)明過(guò)程定義中其他幾個(gè)可選項(xiàng)的說(shuō)明:調(diào)用距離:為NEAR或FAR,簡(jiǎn)化段定義格式中,由.model語(yǔ)句選擇的存儲(chǔ)模式?jīng)Q定,small模式下,調(diào)用距離為NEAR??墒÷?。作用范圍:為PUBLIC、PRIVATE等,表示該過(guò)程是否對(duì)其他模塊可見(jiàn)(可引用)。默認(rèn)為PUBLIC,表示該過(guò)程其他模塊可見(jiàn)(可引用)。可省略。起始參數(shù):是一個(gè)可帶參數(shù)的宏的名字。該宏決定過(guò)程的起始代碼和結(jié)束代碼,例如控制參數(shù)如何設(shè)置、如何保存寄存器等。MASM調(diào)用的宏由用戶(hù)自行定義??墒÷?。19第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)過(guò)程定義舉例例5.3 過(guò)程定義checksumd

PROC

c

USES

bx

cx

,countp

:

word,arryp

:

wordmov

bx,arrypmov

cx,countp…

…retchecksumd

ENDP語(yǔ)言類(lèi)型寄存器列表形參、形參類(lèi)型20第

級(jí)

語(yǔ)

設(shè)

計(jì)過(guò)程調(diào)用3.過(guò)程調(diào)用偽指令

INVOKEINVOKE過(guò)程名,實(shí)參1,實(shí)參2,……

INVOKE

checksumd,count,offset

array調(diào)用時(shí):①實(shí)參用逗號(hào)打頭,且用逗號(hào)分隔。②實(shí)參1替換形參1,實(shí)參2替換形參2。例題5.3源程序(語(yǔ)言類(lèi)型:C)例題5.3匯編結(jié)果例題5.3a源程序(語(yǔ)言類(lèi)型:STDCALL)例題5.3a匯編結(jié)果21第

級(jí)

語(yǔ)

設(shè)

計(jì)過(guò)程定義的說(shuō)明(end)幾點(diǎn)說(shuō)明:①如果在過(guò)程中使用參數(shù),必須指定語(yǔ)言類(lèi)型。②如果在

.MODEL語(yǔ)句中和過(guò)程定義中都沒(méi)有指定語(yǔ)言類(lèi)型,會(huì)產(chǎn)生匯編錯(cuò)誤。③如果在

.MODEL語(yǔ)句中指定了語(yǔ)言類(lèi)型,則過(guò)程聲明和過(guò)程定義中可以省略語(yǔ)言類(lèi)型。.MODEL

SMALL,C ;指定了C語(yǔ)言類(lèi)型④過(guò)程定義和過(guò)程聲明必須一致。如編程過(guò)程中修改了一個(gè),忘記修改另一個(gè),則會(huì)造成錯(cuò)誤。為避免種情況發(fā)生,可以把全部過(guò)程定義放在代碼段內(nèi)開(kāi)始部分(.STARTUP之前),而省略過(guò)程聲明。返回第五回5.122第

級(jí)

語(yǔ)

設(shè)

計(jì)5.2宏結(jié)構(gòu)程序設(shè)計(jì)5.2宏結(jié)構(gòu)程序設(shè)計(jì)對(duì)常用的、具有獨(dú)立功能的程序段,除了可定義為過(guò)程外,還可定義為宏結(jié)構(gòu)或宏指令。宏指令提供了化程序設(shè)計(jì)的另一種方法。通常與宏指令配合使用的偽指令還有重復(fù)匯編件匯編。宏指令、重復(fù)匯編和條件匯編統(tǒng)稱(chēng)宏結(jié)構(gòu)。本節(jié)介紹宏指令的定義和調(diào)用,以及重復(fù)匯編和條件匯編。宏匯編重復(fù)匯編條件匯編返回第五23第

級(jí)

語(yǔ)

設(shè)

計(jì)5.2.1宏匯編宏的定義和調(diào)用5.2.1

宏匯編1.宏的定義和調(diào)用、宏展開(kāi)宏定義宏名

MACRO[形參1,形參2,……]宏定義體;指令語(yǔ)句的組合ENDM宏調(diào)用宏名

[實(shí)參1,實(shí)參2,…

…]例題5.4a+5.4b24第

級(jí)

語(yǔ)

設(shè)

計(jì)宏展開(kāi)宏展開(kāi)匯編時(shí),用宏體取代宏調(diào)用,用實(shí)參取代形參,稱(chēng)為宏展開(kāi)。???宏展開(kāi)時(shí),實(shí)參替代形參按位置匹配的原則實(shí)參與形參的個(gè)數(shù)可以不等,參數(shù)替換時(shí),的實(shí)參不于考慮;多余的形參以空格替代。實(shí)參替代形參時(shí),不進(jìn)行類(lèi)型檢查,完全是串的替代,替代后是否合法有效,由匯編程譯時(shí)進(jìn)行語(yǔ)法檢查。宏展開(kāi)后5.4B25第

級(jí)

語(yǔ)

設(shè)

計(jì)宏的參數(shù)及宏操作符2.宏的參數(shù)參數(shù)的形式靈活多變,可以是常數(shù)、變量、存儲(chǔ)單元、指令操作碼或它們的一部分,也可以是表達(dá)式,使用靈活多變的參數(shù),同一個(gè)宏定義甚至可以執(zhí)行不同的操作。?幾個(gè)宏操作符?&:替換操作符:用于將參數(shù)與其他字符分開(kāi)。用在宏體中。如果參數(shù)緊接在26其他字符之前或之后,第

級(jí)

語(yǔ)

設(shè)

計(jì)宏操作符?<>:字符串傳遞操作符:用在宏調(diào)用的在宏調(diào)用中,如果傳遞的字符串實(shí)參數(shù)含有逗號(hào)、空格等間隔符號(hào),則必須用這對(duì)操作符,以保證字符串的完整?!:轉(zhuǎn)義操作符:指示其后的一個(gè)字符字符,無(wú)特殊意義。如

!!/!&?%:表達(dá)式操作符:將后面跟的表達(dá)式實(shí)參,而不是將表達(dá)式本身作為參?實(shí)參中。;;:宏注釋符,用于表示在宏定義中用這個(gè)符號(hào)的注釋?zhuān)诤暾归_(kāi)時(shí)不“:REQ、:=默認(rèn)值”可參考《宏匯編大全》例題5.5A、5.5B、5.627第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)與宏有關(guān)的偽指令13.與宏有關(guān)的偽指令①局部標(biāo)號(hào)偽指令LOCAL 標(biāo)號(hào)列表;當(dāng)宏定義體內(nèi)有標(biāo)號(hào),同一程序內(nèi)多次調(diào)用,會(huì)造成標(biāo)號(hào)的重復(fù)定義。用LOCAL說(shuō)明的標(biāo)號(hào),第一次宏展開(kāi)時(shí),產(chǎn)生的標(biāo)號(hào)為??0000,第二次宏展開(kāi)時(shí)產(chǎn)生的標(biāo)號(hào)為??0001,(??ffff)注釋?zhuān)骸荒茉诤牦w內(nèi)使用。※只能緊接在宏定義語(yǔ)句之后使用。28第

級(jí)

語(yǔ)

設(shè)

計(jì)與宏有關(guān)的偽指令2如宏定義:ABSOL

MACRO

OPRDLOCAL

NEXTCMP

OPRD,0JGE

NEXT

NEG

OPRDNEXT:ENDM宏調(diào)用1:ABSOL

WORD

PTR

[BX]宏調(diào)用2:

ABSOL

BX29第

級(jí)

語(yǔ)

設(shè)

計(jì)與宏有關(guān)的偽指令3宏展開(kāi)后的代碼:

CMP

WORD

PTR[BX],0JGE

??0000NEG

WORD

PTR[BX]??0000:第一個(gè)宏展開(kāi)第二個(gè)宏展開(kāi)CMP

BX,0JGE

??0001NEG

BX??0001:30第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)與宏有關(guān)的偽指令2②宏定義刪除PURGE

宏名表;在各類(lèi)名字中,只有宏名可以和指令同名;當(dāng)同名時(shí),宏定義優(yōu)先級(jí)最高。③宏定義退出(宏展開(kāi)退出)EXITM;對(duì)EXITM后面的語(yǔ)句停止宏展開(kāi)。31第

級(jí)

語(yǔ)

設(shè)

計(jì)宏與子程序4.宏與子程序相同點(diǎn):簡(jiǎn)化源程序的設(shè)計(jì)和結(jié)構(gòu)不同點(diǎn):※處理時(shí)間段不同?!鶎?duì)目標(biāo)程序的長(zhǎng)度影響不同。※對(duì)目標(biāo)程序執(zhí)行速度的影響不同?!鶄鬟f參數(shù)的方式不同;傳遞參數(shù)過(guò)程中如出現(xiàn)錯(cuò)誤,錯(cuò)誤的性質(zhì)不同。(宏:語(yǔ)法;子程序:邏輯)通常,當(dāng)程序段較短,要求較快執(zhí)行時(shí),用宏定義當(dāng)程序段較長(zhǎng),或?yàn)闇p小目標(biāo)代碼長(zhǎng)度,用子程序?;?.232第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)5.2.2重復(fù)匯編5.2.2重復(fù)匯編重復(fù)匯編指在匯編過(guò)程中,重復(fù)展開(kāi)一段(基本)相同的語(yǔ)句。如果程序中需要連續(xù)重復(fù)一段相同的語(yǔ)句或基本相同的語(yǔ)句,可以使用重復(fù)匯編偽指令,也就是讓匯編程序代替程序員完成重復(fù)的工作。重復(fù)匯編偽指令常在宏體內(nèi)使用,但也可以在宏體外使用。重復(fù)匯編沒(méi)有名字,不能被調(diào)用。重復(fù)匯編偽指令有3條,3條偽指令區(qū)別在于如何規(guī)定重復(fù)次數(shù)。33第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)按參數(shù)值重復(fù)偽指令1.按參數(shù)值重復(fù)偽指令重復(fù)次數(shù)REPEAT重復(fù)體

ENDM例5.8定義26個(gè)大寫(xiě)字母char=‘A’Aztabel

EQU

THIS

BYTEREPEAT

26DB

charchar

=

char+1ENDM匯編結(jié)果:DB

charchar

=

char+1DB

charchar

=

char+1……DB

charchar

=

char+134第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)1.按參數(shù)個(gè)數(shù)重復(fù)偽指令FOR 形參,<實(shí)參表>重復(fù)體ENDM例5.9a保護(hù)常用寄存器FOR

regad

,<AX,BX,CX,DX>PUSH

regadENDM匯編結(jié)果:PUSH

AXPUSH

BXPUSH

CXPUSH

DX按參數(shù)個(gè)數(shù)重復(fù)偽指令35第

級(jí)

語(yǔ)

設(shè)

計(jì)按參數(shù)字符個(gè)數(shù)重復(fù)偽指令1.按參數(shù)字符個(gè)數(shù)重復(fù)偽指令;FORC

形參,<字符串>FORC

形參,字符串重復(fù)體ENDM例5.9b恢復(fù)常用寄存器FORC

regad

,dcbaPOP

®ad&xENDM匯編結(jié)果:POP

DXPOP

CXPOP

BXPOP

AX回5.236第

級(jí)

語(yǔ)

設(shè)

計(jì)5.2.3條件匯編5.2.3

條件匯編條件匯編偽指令使匯編程序根據(jù)某種條件是否成立決定是否匯編某段語(yǔ)句序列條件匯編偽指令格式:IFxx表達(dá)式分支語(yǔ)句體

1[ELSE分支語(yǔ)句體

2]ENDIF偽指令中的“xx”為組成條件匯編偽指令的其他字不同的“xx”,表達(dá)的條件不同。如“IF 表達(dá)式”,的條件為:如表達(dá)式的值不為0,則條件滿(mǎn)足;“IFE

表達(dá)式”表達(dá)的條件為:如表達(dá)式的值為0,則滿(mǎn)足。(見(jiàn)教材表5.3)37第

級(jí)

語(yǔ)

設(shè)

計(jì)條件匯編偽指令(IF|IFE)中的表達(dá)式條件匯編偽指令(IF|IFE)中的表達(dá)式:①運(yùn)算符使用第三章介紹的關(guān)系運(yùn)算符:

EQ、NE、GT、LT、GE、LE注意,不同于條件控制偽指令(.IF)中使用的算符。②表達(dá)式用0FFFFH(或任意非0數(shù))表示真,用0表示假。38例5.11

略第

級(jí)

語(yǔ)

設(shè)

計(jì)例5.10例5.10:定義一個(gè)元素個(gè)數(shù)不超過(guò)100個(gè)的數(shù)組。PDATA

MACRONUMIF

NUM

LT

100100

DUP(?)DB

NUM

DUP(?)ELSEDBENDIFENDM39第

級(jí)

語(yǔ)

設(shè)

計(jì)例5.11/1例5.11編寫(xiě)宏MAXNUM,計(jì)算3個(gè)以?xún)?nèi)的數(shù)據(jù)中的最大值并將結(jié)果送入AX寄存器,要求根據(jù)宏調(diào)用時(shí)的實(shí)參個(gè)數(shù)展開(kāi)相應(yīng)代碼。分析:1)至少應(yīng)有一個(gè)參數(shù),故第一個(gè)參數(shù)設(shè)為可缺少;2)宏指令應(yīng)能夠作到:根據(jù)實(shí)參情況產(chǎn)生同的程序段,進(jìn)行不同的處理。實(shí)參可分三種情況:A.只有一個(gè)參數(shù)B.有兩個(gè)參數(shù)

C.有三個(gè)參數(shù)顯然,應(yīng)使用條件匯編。40第

級(jí)

語(yǔ)

設(shè)

計(jì)/2MAXNUMMACROWX:REQ,WY,WZLOCALMAXNUM1,MAXNUM2MOV

AX,WX

;只有一個(gè)實(shí)參替換WXIFNB

<WY>;還有CMP

AX,WYJGE

MAXNUM1MOV

AX,WYENDIFMAXNUM1:;當(dāng)有WZ時(shí),匯編本段AX,WZMAXNUM2AX,WZMAXNUM2:IFNB

<WZ>CMPJGEMOVENDIFENDM41第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)/3宏調(diào)用:匯編結(jié)果:Maxnum

bx;只有1個(gè)參數(shù)Mov

ax

,

bx;只有1個(gè)參數(shù)Maxnum 3,

4;有2個(gè)參數(shù)Mov

ax,

3Cmp

ax,

4Jge

??0000Mov

ax,

4??0000:42第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)/4宏調(diào)用:匯編結(jié)果:Maxnum

n1,

n2,

n3;有3個(gè)參數(shù)mov

ax,

n1cmp

ax,

n2jge

??0000mov

ax,

n2??0000:cmp

ax,

n3jge

??0001mov

ax,

n3??0001:注意區(qū)別條件控制偽指令和條件匯編偽指令43第

級(jí)

語(yǔ)

設(shè)

計(jì)P149例題/1P149例題:用宏結(jié)構(gòu)實(shí)現(xiàn)信息顯示。dstring

MACRO

string

;;定義字符串db

"&string&",0dh,0ah,"$"ENDMmainbegin

MACRO

dsseg;;設(shè)置數(shù)據(jù)段地址mov

ax,dssegmov

ds,axENDMdispmsg

MACRO

message;;顯示,形參為偏移地址mov

dx,offset

messagemov

ah,09hint

21hENDM44第

級(jí)

語(yǔ)

設(shè)

計(jì)/2mainend

MACRO

retnum;;返回DOS,可不帶參數(shù);;宏調(diào)用沒(méi)有實(shí)參數(shù)ifb

<retnum>mov

ah,4chelse;;

有參數(shù)mov

ax,4c00h+(retnum

AND

0ffh)endifint

21hENDM45第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)/3.model

small.stack

256msg1.dataequ

this

bytedstring

<Hello,Everybody

!!>msg2

equ

this

bytedstring

<You

see,I

made

it.>.codestart:mainbegin@data;建立DS內(nèi)容dispmsg

msg1;顯示msg1字符串dispmsg

msg2;顯示msg2字符串mainend;返回DOSend

start回5.2返回第五46第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)5.3模塊化程序設(shè)計(jì)5.3

模塊化程序設(shè)計(jì)開(kāi)發(fā)大型或較復(fù)雜的程序時(shí),往往需要結(jié)合使用其他方法,如源程序文件的包含、目標(biāo)代碼文件的連接、子程序庫(kù)的使用等等。本節(jié)簡(jiǎn)單介紹以上三種方法。源程序文件的包含目標(biāo)代碼文件的連接子程序庫(kù)的使用返回第五47高級(jí)匯編語(yǔ)言程序設(shè)計(jì)5.3.1源程序文件的包含第

章5.3.1

源程序文件的包含對(duì)大型源程序,可以分成幾個(gè)源文件,待匯編時(shí)在用包含偽指令I(lǐng)NCLUDE將它們結(jié)合成一個(gè)文件進(jìn)行匯編格式為:INCLUDE 文件名匯編時(shí),匯編程序?qū)⒅付ǖ奈募逶趥沃噶钏诘奈恢?,與其他部分同時(shí)匯編。適用于:匯集常用的子程序?yàn)橐粋€(gè)源文件(.asm);匯集常用的宏定義為一個(gè)宏庫(kù)文件(.mac);匯集常用的常量定義和聲明為一個(gè)包含文件(.inc)。當(dāng)源程序需要使用上述文件中的某些內(nèi)容時(shí),不用重新編寫(xiě),只要使用包含偽指令將文件包含即可。48第

級(jí)

語(yǔ)

設(shè)

計(jì)例5.12a例5.12a 利用源程序包含的方法實(shí)現(xiàn)將輸入的數(shù)據(jù)按升序輸出。要求:最多輸入100個(gè)無(wú)符號(hào)字節(jié)數(shù)據(jù);以十六進(jìn)形式輸入;按照升序排序并顯示。源程序由三個(gè)單獨(dú)的文件組成:① 宏庫(kù)文件

lt512a.mac(顯示字符和字符串)② 子程序文件

sub512a.asm(輸入、排序)③ 主程序文件

lt512a.asm(提供入口參數(shù)出口參數(shù)、排序、顯示)49高級(jí)匯編語(yǔ)言程序設(shè)計(jì)宏庫(kù)文件lt512a.mac第

章1)宏庫(kù)文件

lt512a.macdispchar

macro

char;顯示char字符mov

dl,charmov

ah,2int

21h

endmdispmsg

macro

message;顯示message字符串movdx,offsetmessagemovah,9int21hendm50第

級(jí)

語(yǔ)

設(shè)

計(jì)子程序文件sub512a.asm2)子程序文件

sub512a.asm子程序源文件有3個(gè)子程序ALdisp

;顯示2位16進(jìn)制數(shù)子程序(例4.10)sorting;排序子程序(例4.8)input

;鍵盤(pán)輸入子程序(后面分析)還包含一個(gè)宏convert;;將DX兩位ASCII碼轉(zhuǎn)換為兩位16進(jìn)制數(shù)51高級(jí)匯編語(yǔ)言程序設(shè)計(jì)主程序文件lt512a.asm第

章3)主程序文件

lt512a.asminclude

lt421a.mac;包含宏庫(kù)文件,置于主.model

/.stack

/.data/.code等序頭部dispmsg

msg1 ;提示輸入數(shù)據(jù)mov

bx,offset

buf;顯示輸入的數(shù)據(jù);數(shù)據(jù)排序;顯示經(jīng)排序后的數(shù)據(jù).........start4:.exit

0;包含子程序文件include

sub421a.asmend將三個(gè)文件分別編輯,主程序文件用兩條包含c偽al指l

令in將pu宏t庫(kù)文件和子程;數(shù)序據(jù)文輸件入包入含(注意c包mp含c偽x,指0令的位置),然后匯編并連接主程j序e

文st件ar,t4即可得到可執(zhí)行文件;。沒(méi)有輸入數(shù)據(jù)則退出mov

count,cx52第

章鍵盤(pán)輸入子程序/1鍵盤(pán)輸入子程序:;每次輸入1位或2位十六進(jìn)制數(shù)字;的數(shù)據(jù);;回車(chē)表示所有數(shù)據(jù)輸入結(jié)束。;入口參數(shù):ds:bx=存放數(shù)據(jù)的緩沖區(qū);出口參數(shù):cx=數(shù)據(jù)個(gè)數(shù)轉(zhuǎn)換和保存返回轉(zhuǎn)換和保存錯(cuò)誤處理A輸入一個(gè)字符退格?空格?;空格或逗號(hào)確認(rèn)輸入;回車(chē)?;退格鍵刪除當(dāng)前輸入逗號(hào)?有效?高級(jí)匯編語(yǔ)言程序設(shè)計(jì)AA存入DH

DL53第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)/2;數(shù)據(jù)個(gè)數(shù)清0xor

dx,dx

;輸入字符清0mov

ah,1

;鍵盤(pán)輸入一個(gè)字符input

procpush

axpush

dxxor

cx,cxinput01:input02:int

21h54第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)/3input10:

cmp

al,0dhje

input30

;是回車(chē),結(jié)束整個(gè)數(shù)據(jù)的輸入cmp

al,’

’je

input20cmp

al,’,’je

input20

;是空格和逗號(hào),確認(rèn)輸入了一個(gè)數(shù)據(jù)cmp

al,08hje

input17

;是退格,丟棄本次輸入的數(shù)據(jù),出錯(cuò)55第

級(jí)

語(yǔ)

設(shè)

計(jì);有效數(shù)字判斷(圖5.2b);小于’0’,不是有效數(shù)字,出錯(cuò);大于’f’,不是有效數(shù)字cmp

al,’0’jb

input17cmp

al,’f’ja

input17cmp

al,’a’jb

input11sub

al,20hjmp

input12;檢查是否再‘a(chǎn)—F’之間;’a’~’f’轉(zhuǎn)換成大寫(xiě)’A’~;有效數(shù)據(jù)處理input11:

cmp

al,’F’ja

input17

;字符小于’a’、大于’F’,出;是’A’~’F’,有效字符cmp

al,’A’jae

input12cmp

al,’9’ja

input170/4

07Fh0

9A;字符小于’A’、大于’9’,出F

a

f56第

級(jí)

語(yǔ)

設(shè)

計(jì)/5input12:

cmp

dl,0

;有效字符的處理jne

input13

;dl≠0(已經(jīng)有一位數(shù)據(jù))mov

dl,al;dl=0,輸入了一個(gè)數(shù)據(jù)的高位,則dl←aljmp

input02

;轉(zhuǎn)到字符輸入input13:

cmp

dh,0jne

input17;dl≠0,dh≠0輸入3位數(shù)據(jù),出錯(cuò)mov

dh,dl;dl≠0,dh=0輸入了一個(gè)數(shù)據(jù)的低位mov

dl,al

;dh←dl,dl←aljmp

input02

;轉(zhuǎn)到字符輸入57/6input17:第

五mov

dl,7章

級(jí)

語(yǔ)

設(shè)

計(jì);輸入錯(cuò)誤處理(07h,控制碼:movah,2int21hmovdl,"?"movah,2int21hjmpinput01;轉(zhuǎn)到輸入一個(gè)數(shù)據(jù)58第

級(jí)

語(yǔ)

設(shè)

計(jì)/7;確認(rèn)一個(gè)數(shù)據(jù)后,轉(zhuǎn)換正確的輸入數(shù)據(jù)(圖5.2c)input20:

convertjmp

input01

;轉(zhuǎn)到輸入一個(gè)數(shù)據(jù);收到回車(chē)符,最后一個(gè)數(shù)據(jù)輸入結(jié)束,轉(zhuǎn)此convertinput30:pop

dxpop

axretinput;返回,出口參數(shù)已設(shè)定

endp59第

級(jí)

語(yǔ)

設(shè)

計(jì)宏:convert

macro/1;將DX兩位十六進(jìn)制形式的ASCII碼轉(zhuǎn)換為兩位16制數(shù)(8位二進(jìn)制數(shù)):convert

macrolocal

input21,input22local

input24,input25cmp

dl,0je

input25

;;dl=0,沒(méi)有要轉(zhuǎn)換的數(shù)據(jù),退出60第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)/2cmp

dl,"9"

jbe

input21sub

dl,7;;字符A~F,則減7and

dl,0fh;;轉(zhuǎn)換低位input21:cmp

dh,0;;dh=0,沒(méi)有高位數(shù)據(jù)je

input24cmp

dh,"9"jbe

input22sub

dh,7;;字符A~F,則減7input22:

shl

dh,1;;高位乘16shl

dh,1shl

dh,1shl

dh,1or

dl,dh;;轉(zhuǎn)換高位;;合并高、低位61/3(end)input24:inc

bxinc

cx第

級(jí)

語(yǔ)

設(shè)

計(jì)mov

[bx],dl

;;存入緩沖區(qū);;數(shù)據(jù)個(gè)數(shù)加1input25:endmBack5.362第

級(jí)

語(yǔ)

設(shè)

計(jì)5.3.2目標(biāo)代碼文件的連接5.3.2

目標(biāo)代碼文件的連接將常用子程序?qū)懗梢粋€(gè)或多個(gè)源文件,并對(duì)其進(jìn)行匯編,得到一個(gè)個(gè)單獨(dú)的OBJ文件;對(duì)主程序也單獨(dú)進(jìn)匯編得到OBJ文件,最后利用連接程序把多個(gè)OBJ文件連接,形成可執(zhí)行文件。用這種方法可縮短匯編時(shí)間,但宏結(jié)構(gòu)文件、常

量定義、聲明文件等文件通常仍編輯成包含文件,因此這種方法往往和“源程序文件的包含”共同使用。需要遵循的原則:①

聲明共用的變量、過(guò)程等②

實(shí)現(xiàn)正確的段組合③

處理好參數(shù)傳遞問(wèn)題63第

級(jí)

語(yǔ)

設(shè)

計(jì)/原則1原則1?各個(gè)模塊間公用的變量、過(guò)程等要說(shuō)明PUBLIC

標(biāo)識(shí)符

[,標(biāo)識(shí)符...];定義標(biāo)識(shí)符的模塊使EXTERN

標(biāo)識(shí)符:類(lèi)型

[,標(biāo)識(shí)符:類(lèi)型...];調(diào)用標(biāo)識(shí)符的模塊使標(biāo)識(shí)符是變量名、過(guò)程名等類(lèi)型是byte

/

word

/

dword(變量)或near

/

fa(過(guò)程)?在一個(gè)源程序中,public/extern語(yǔ)句可以有多條?各模塊間的public/extern偽指令要互相配對(duì),并且指明的類(lèi)型互相一致64第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)/原則2原則2?子程序文件必須定義在代碼段中,也可以具有局部的數(shù)據(jù)變量?采用簡(jiǎn)化段定義格式,只要采用相同的存儲(chǔ)模式,容易實(shí)現(xiàn)正確的近或遠(yuǎn)調(diào)用?完整段定義格式中,為了實(shí)現(xiàn)模塊間的段內(nèi)近調(diào)用(near類(lèi)型),各自定義的段名、類(lèi)別必須相同,組合類(lèi)型都是public。實(shí)際的程序開(kāi)發(fā)中,各個(gè)模塊往往不同的程序員完成,不易實(shí)現(xiàn)段同名及類(lèi)別相同,所索性定義成遠(yuǎn)調(diào)用(far類(lèi)型)?定義數(shù)據(jù)段時(shí),同樣也要注意這個(gè)問(wèn)題。當(dāng)各個(gè)模塊的數(shù)據(jù)段不同時(shí),要正確設(shè)置數(shù)據(jù)段DS寄存器的段基地址65第

級(jí)

語(yǔ)

設(shè)

計(jì)/原則3原則3?少量參數(shù)可用寄存器或堆棧直接傳送數(shù)據(jù)本身?大量數(shù)據(jù)可以安排在緩沖區(qū),用寄存器或堆棧傳送數(shù)據(jù)的存儲(chǔ)地址?還可利用變量傳遞參數(shù),但是要采用public/extern聲明為公共(全局)變量這些也是子程序間的參數(shù)傳遞方法?另外,更好的傳遞參數(shù)方法是用堆棧傳遞參數(shù)。66第

級(jí)

語(yǔ)

設(shè)

計(jì)例5.12b例5.12b 利用目標(biāo)代碼文件連接的方法,實(shí)現(xiàn)將輸入的數(shù)據(jù)按升序輸出。?宏定義并入主程序lt512b.asm。?子程序文件sub512b.asm,要加上段定義語(yǔ)句、聲明語(yǔ)句等,但不需要起始點(diǎn)和結(jié)束點(diǎn)。模塊連接的操作步驟:①

分別編輯生成各個(gè)文件②

分別匯編各個(gè)文件③

連接各個(gè)目標(biāo)文件,形成可執(zhí)行文件67第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)例5.12b主程序例5.12b 主程序:;宏定義(也可以使用包含語(yǔ)句)....codepublic

count

;定義(本模塊的)count公用extern

ALdisp:near,sorting:near,input:far;聲明其他模塊中的子程序.startup....exit

0;去掉(lt512a.asm中的)包含語(yǔ)句

end68第

級(jí)

語(yǔ)

設(shè)

計(jì)例5.12b子程序(end)例5.12b子程序.model

small

;定義同樣的存儲(chǔ)模式extern

count:word.code;在其他模塊定義了字變量count;子程序在代碼段中public

aldisp,sorting,input;3個(gè)子程序是共用的;仍然作為近調(diào)用;仍然作為近調(diào)用Aldisp

procsorting

procinput

proc

far;修改為遠(yuǎn)調(diào)用;提供出口參數(shù).m.m.o.o.v.v

count,cxinp.u.t.

endpend;結(jié)束匯編Back5.369第

級(jí)

語(yǔ)

設(shè)

計(jì)5.3.3子程序庫(kù)的使用5.3.3

子程序庫(kù)的使用將子程序源文件生成OBJ文件,然后和主程序連接由于被連接的每個(gè)OBJ文件的全部代碼都會(huì)成為可執(zhí)行序的一部分,在最后生成的可執(zhí)行文件中,會(huì)包括無(wú)用的子程序,造成可執(zhí)行程序龐大。為此,可使用子程序庫(kù)。子程序庫(kù)(.LIB文件)是子程序模塊的集合,庫(kù)文件中存放著各子程序的名稱(chēng)、目標(biāo)代碼以及有關(guān)的定位信息。執(zhí)行連接程序時(shí),只要指定所需要的庫(kù)文件,連接程序?qū)膸?kù)文件中摘取主程序調(diào)用的子程序,而未調(diào)用的子程序不會(huì)進(jìn)入最后的可執(zhí)行程序。庫(kù)文件由MASM提供的LIB.EXE程序管理。70第

級(jí)

語(yǔ)

設(shè)

計(jì)例題5.12c/1例題5.12c 利用子程序庫(kù)的調(diào)入方法,實(shí)現(xiàn)將輸入的數(shù)據(jù)按升序輸出。實(shí)現(xiàn)步驟:1)編輯4個(gè)文件:①主程序文件lt512c.asm②子程序文件sub512c1.asm(顯示)③子程序文件sub512c2.asm(排序)④子程序文件sub512c3.asm(輸入)71第

級(jí)

語(yǔ)

設(shè)

計(jì)例題5.12c/2分別匯編,得到4個(gè)目標(biāo)模塊(obj文件)生成子程序庫(kù)文件(或加入其它子程序庫(kù))LIB 庫(kù)文件名

+ 子程序目標(biāo)文件名LIB

sub512c.lib

+

sub512c1.obj

+

sub512c2.ob+

sub512c3.obj4)運(yùn)行連接程序:link

lt512c.obj提示輸入庫(kù)文件時(shí),輸入sub512c.lib( 也可在主程序源文件中使用子程序庫(kù)包含偽指令includelib

sub512c.lib 。)72第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)例題5.12主程序例題5.12主程序..

;宏定義.codeExtern

ALdisp:near,sorting:near,input:near;聲明其他模塊中的子程序.startup...call

input....exit

0end73高級(jí)匯編語(yǔ)言程序設(shè)計(jì)sub512c1.asm第

章sub512c1.asm.model

small.codepublic

aldispprocendpAldisp...Aldispend74第

級(jí)

語(yǔ)

設(shè)

計(jì)sub512c2.asmsub512c2.asm.model

small.codepublic

sortingsorting

proc...sorting

endpend75第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)sub512c3.asm(end)sub512c3.asm.model

small.code

public

inputprocendpinput...inputendBack5.3返回第五章76第

級(jí)

語(yǔ)

設(shè)

計(jì)5.4輸入輸出程序設(shè)計(jì)5.4

輸入輸出程序設(shè)計(jì)完成CPU與外設(shè)端口之間數(shù)據(jù)傳送的程序稱(chēng)為輸入出程序。通常有3種端口,數(shù)據(jù)口、狀態(tài)口以及控制口,分對(duì)應(yīng)接口中的數(shù)據(jù)寄存器、狀態(tài)寄存器以及控制寄存器每個(gè)端口有一個(gè)端口地址,CPU使用該地址訪問(wèn)接口中相應(yīng)寄存器,執(zhí)行輸入輸出的指令為IN指令和OUT指令輸入輸出(數(shù)據(jù)交換)的方式分為兩大類(lèi):程序控制輸入輸出方式和直接存儲(chǔ)器存取方式(DMA方式)。由于該部分內(nèi)容是《微機(jī)原理和接口技術(shù)》的主要內(nèi)容之一,本節(jié)只進(jìn)行簡(jiǎn)單介紹。返回第五77第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)數(shù)據(jù)交換方式數(shù)據(jù)交換方式程序控制D

M

A2.查

詢(xún) 傳送方式3.中

斷 傳送方式數(shù)據(jù)交換方式:1.無(wú)條件傳送方式78第

級(jí)

語(yǔ)

設(shè)

計(jì)1.無(wú)條件傳送方式1.無(wú)條件傳送方式CPU可以在任何時(shí)刻向端口寫(xiě)入數(shù)據(jù)和從端口讀入據(jù),也就是說(shuō),CPU假設(shè)外設(shè)接口電路總是處于準(zhǔn)備好狀態(tài)。采用無(wú)條件傳送方式,只適用于簡(jiǎn)單外設(shè)(或定時(shí)關(guān)系以知的外設(shè)),如輸出設(shè)備為數(shù)碼顯示電路,或輸入設(shè)備為一組提供某種數(shù)據(jù)的開(kāi)關(guān),在這種情況下,

CPU執(zhí)行輸出或輸入操作不需要任何先決條件。無(wú)條件傳送方式局限性比較大,對(duì)大部分外設(shè)不適用,因而采用較少。79第

級(jí)

語(yǔ)

設(shè)

計(jì)2.查詢(xún)方式2.查詢(xún)方式CPU在執(zhí)行輸入輸出操作時(shí),先查詢(xún)外設(shè)的狀態(tài)口當(dāng)狀態(tài)口表示外設(shè)已準(zhǔn)備好時(shí),CPU執(zhí)行輸入輸出操作當(dāng)狀態(tài)口反映外設(shè)未準(zhǔn)備好時(shí),CPU繼續(xù)查詢(xún)狀態(tài)口,到外設(shè)準(zhǔn)備好,再執(zhí)行輸入輸出操作。讀入狀態(tài)口執(zhí)行IN或OUTN準(zhǔn)備好?Y查詢(xún)方式適用于大部分外設(shè),但CPU的利用率較低。80第

章高級(jí)匯編語(yǔ)言程序設(shè)計(jì)3.中斷傳送方式3.中斷傳送方式中斷傳送方式基于計(jì)算機(jī)的中斷控制系統(tǒng)。當(dāng)外設(shè)準(zhǔn)備好傳送數(shù)據(jù)時(shí),向CPU發(fā)出中斷請(qǐng)求,如有關(guān)條件足,則CPU響應(yīng)中斷請(qǐng)求,執(zhí)行相應(yīng)中斷服務(wù)程序,完數(shù)據(jù)的輸入或輸出,然后繼續(xù)執(zhí)行原來(lái)的程序。中斷傳送方式相對(duì)查詢(xún)方式,可提高CPU的利用率以上三種傳送方式雖然各不相同,但有一點(diǎn)是相同的,即通過(guò)CPU執(zhí)行輸入輸出程序?qū)崿F(xiàn)數(shù)據(jù)的傳送,因數(shù)據(jù)傳輸率低,要得到高數(shù)據(jù)傳輸速率,應(yīng)采用直接存儲(chǔ)器存取方式,即DMA方式,用DMA控制器控制數(shù)據(jù)的傳輸過(guò)程?;?.4

返回第五81第

級(jí)

語(yǔ)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論