版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 國(guó)際幼兒園財(cái)務(wù)制度
- 小區(qū)財(cái)務(wù)制度范本
- 蛋糕連鎖店財(cái)務(wù)制度
- 公司消防規(guī)章和防火制度
- 養(yǎng)老院老人康復(fù)護(hù)理制度
- 施工現(xiàn)場(chǎng)施工防化學(xué)毒品泄漏制度
- 外墻施工方案講解(3篇)
- 標(biāo)識(shí)牌工廠管理制度(3篇)
- 施工現(xiàn)場(chǎng)環(huán)境保護(hù)制度
- 活動(dòng)器材管理制度
- 2026國(guó)家保安員資格考試題庫(kù)及參考答案【完整版】
- 微生物檢驗(yàn)質(zhì)控措施分析
- 2026年黑龍江農(nóng)業(yè)工程職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫(kù)及參考答案詳解1套
- 婦科腫瘤保留生育功能治療策略
- 淺談盲人按摩行業(yè)的現(xiàn)狀、困境及出路
- 宮頸癌病理課件
- 2025版中國(guó)經(jīng)皮冠狀動(dòng)脈介入治療指南課件
- 2025東航股份綜合管理部招聘筆試歷年參考題庫(kù)附帶答案詳解
- YY/T 1973-2025醫(yī)用下肢外骨骼機(jī)器人
- 解讀-2025年版《普通高中課程標(biāo)準(zhǔn)》化學(xué)解讀
- 食堂餐廳維修項(xiàng)目方案(3篇)
評(píng)論
0/150
提交評(píng)論