![河科大微機(jī)原理七課件_第1頁(yè)](http://file4.renrendoc.com/view/22840c902f3fcae99eb5f33362dd8ca9/22840c902f3fcae99eb5f33362dd8ca91.gif)
![河科大微機(jī)原理七課件_第2頁(yè)](http://file4.renrendoc.com/view/22840c902f3fcae99eb5f33362dd8ca9/22840c902f3fcae99eb5f33362dd8ca92.gif)
![河科大微機(jī)原理七課件_第3頁(yè)](http://file4.renrendoc.com/view/22840c902f3fcae99eb5f33362dd8ca9/22840c902f3fcae99eb5f33362dd8ca93.gif)
![河科大微機(jī)原理七課件_第4頁(yè)](http://file4.renrendoc.com/view/22840c902f3fcae99eb5f33362dd8ca9/22840c902f3fcae99eb5f33362dd8ca94.gif)
![河科大微機(jī)原理七課件_第5頁(yè)](http://file4.renrendoc.com/view/22840c902f3fcae99eb5f33362dd8ca9/22840c902f3fcae99eb5f33362dd8ca95.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
用指令助記符、標(biāo)號(hào)、寄存器名、數(shù)字等符號(hào)構(gòu)成的編寫(xiě)程序的語(yǔ)言叫匯編語(yǔ)言。匯編語(yǔ)言是機(jī)器語(yǔ)言的表示,它比機(jī)器語(yǔ)言好讀,比高級(jí)語(yǔ)言占用的內(nèi)存少、執(zhí)行速度快。因此匯編語(yǔ)言總是程序設(shè)計(jì)的重要手段。
第七章匯編語(yǔ)言程序設(shè)計(jì)1§7.1概述用匯編語(yǔ)言編寫(xiě)的程序叫匯編語(yǔ)言程序,簡(jiǎn)稱源程序。機(jī)器語(yǔ)言程序稱目標(biāo)程序。將源程序翻譯成目標(biāo)程序的過(guò)程叫做匯編。2上機(jī)環(huán)境硬件系統(tǒng)軟件
應(yīng)用軟件
操作系統(tǒng):DOS系統(tǒng)編輯器:EDIT.exe匯編程序:MASM.exe連接程序:LINK.exe調(diào)試程序:DEBUG.exe用戶開(kāi)發(fā)的程序:ABC.exe等CPU、存儲(chǔ)器(ROM、RAM)、I/O接口、輸入、輸出設(shè)備3編輯源程序EDITABC.ASM匯編源程序MASMABC.ASM形成目標(biāo)程序ABC.OBJ連接目標(biāo)程序LINKABC.OBJ形成可執(zhí)行程序ABC.EXE運(yùn)行程序用DEBUG調(diào)試5偽指令是匯編語(yǔ)言程序中的指示性語(yǔ)句,它體現(xiàn)程序員的匯編意圖,其作用是在源程序匯編時(shí)指導(dǎo)匯編程序匯編,而本身不會(huì)產(chǎn)生目標(biāo)代碼和占用內(nèi)存。偽指令的具體功能是向匯編程序提供下列信息:如何分段、段的定義和說(shuō)明,段間關(guān)系,模塊的定義和說(shuō)明以及模塊間的關(guān)系,數(shù)據(jù)的定義,開(kāi)始匯編和結(jié)束匯編等。§7.2偽指令(指示性語(yǔ)句)6指令性語(yǔ)句是用指令系統(tǒng)中的指令構(gòu)成的語(yǔ)句。例
MOVAX,BX指示性語(yǔ)句是指示匯編程序進(jìn)行匯編的操作。例MOVAX,4+8中的+
codeSEGMENT
中的SEGMENTMOVBX,OFFSETstring中的OFFSET指示性語(yǔ)句與指令性語(yǔ)句:7
1、等值語(yǔ)句:
格式
符號(hào)名EQU表達(dá)式作用是用符號(hào)名等值指定的表達(dá)式。其中表達(dá)式可以是任何有效的操作數(shù),匯編時(shí)用語(yǔ)句中的表達(dá)式代替程序中符號(hào)所在的地方。應(yīng)用:1.定義符號(hào)常量,方便修改程序。2.某表達(dá)式多次出現(xiàn)時(shí),用等值偽指令可以方便編程。一、符號(hào)定義偽指令9例如:EMPEQU8COUNTEQUEMP+6
2、等號(hào)語(yǔ)句:格式
符號(hào)名=表達(dá)式作用是用符號(hào)名等值指定的表達(dá)式,用“=”定義的符號(hào)名可重新定義。
例如:NMU=6NMU=NMU+610
格式
變量名助記符操作數(shù)[,操作數(shù),...]
用來(lái)定義程序中所用的內(nèi)存操作數(shù)。其中變量名指示內(nèi)存操作數(shù)的地址(符號(hào)地址);助記符指示內(nèi)存操作數(shù)的類型(字節(jié)、字、雙字等);
操作數(shù)指示內(nèi)存操作數(shù)的內(nèi)容。二、數(shù)據(jù)定義偽指令11例:DATA-BYTEDB10,4,10HDATA-WORDDW100,100H,—5HDATA-DWDD6+20,0FFFDH數(shù)據(jù)定義偽指令中的表達(dá)式也可以是字符串如: MESS DB
‘ABCD’數(shù)據(jù)定義偽指令的表達(dá)式中會(huì)出現(xiàn)“?”數(shù)據(jù)項(xiàng),ABCDB ?,?,DEFDW ?,50,?這時(shí)匯編程序會(huì)對(duì)“?”數(shù)據(jù)項(xiàng)保留相應(yīng)的存儲(chǔ)空間,而不存入數(shù)據(jù)。130AH04H10HDATA-BYTE64H00HDATA-WORD00H01HFBHFFH1AH00H00H00HDATA-DW100100H-52614MESS41H42H43H44HABCDEF32H注意:3個(gè)及其以上的字符,只能用DB定義15格式
段名SEGMENT[定位類型][組合類型][類別]、、、、、、段名ENDS
段定義由偽操作SEGMENT開(kāi)始、ENDS結(jié)束。其中:SEGMENT和ENDS必須成對(duì)出現(xiàn),且語(yǔ)句前必須有段名,段名必須相同。
SEGMENT和ENDS語(yǔ)句之間可以有指令和其他偽操作,
表示存放在該段內(nèi)存的變量、指令或其他偽操作對(duì)該段內(nèi)存的處理程序中可以定義多個(gè)段。程序經(jīng)匯編、連接及裝入內(nèi)存后,段名為一具體的段值。三、段定義偽操作17AASEGMENT;數(shù)據(jù)段1
str1DB'Hello!’AAENDSBBSEGMENT;數(shù)據(jù)段2
str2DB6dup(?)BBENDSCCSEGMENT;代碼段
ASSUMECS:CCASSUMEDS:AA,ES:BB
start:CLDMOVAX,AA
MOVDS,AXLEASI,str1
MOVAX,BB
MOVES,AXLEADI,str2MOVCX,6REPMOVSBMOVAH,4CHINT21HCCENDSENDstart數(shù)據(jù)傳送源程序:18定位類型、組合類型和類別說(shuō)明段的屬性,它們用方括號(hào)括起來(lái)表示可以缺省。若不缺省,各項(xiàng)排序不能錯(cuò),項(xiàng)與項(xiàng)要用空格分開(kāi)。
定位類型有四種:
PAGE(頁(yè))型要求該段物理地址低8位全為0PARA(節(jié))型要求該段物理地址低4位全為0WORD型要求該段物理地址碼為偶數(shù)(最低位為0)
BYTE型該段的物理地址可為任意值。
組合類型說(shuō)明本段與其它段的關(guān)系。
‘類別’它可以是任何合法的名稱。19
ASSUME偽操作的作用指示匯編程序指令中用到的標(biāo)號(hào)、過(guò)程及變量所在的段。其中對(duì)標(biāo)號(hào)、過(guò)程必須用CS段寄存器指示,對(duì)變量可用CS、DS、ES、SS段寄存器指示。
若未用ASSUME語(yǔ)句指示指令中用到的標(biāo)號(hào)、過(guò)程和變量所在的段,匯編程序?qū)⒔o出錯(cuò)誤信息。
ASSUME語(yǔ)句只起指示作用,并無(wú)實(shí)際的操作。在程序中引用定義的變量做內(nèi)存操作數(shù)時(shí),需按尋址方式用傳送指令(如MOV)給相應(yīng)的段寄存器賦值。21例用程序?qū)崿F(xiàn)1234H+5678HdataSEGMENTvalueDW1234H,5678HresultDW?
dataENDS
codeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;給DS賦值MOVDS,AXMOVAX,value;取數(shù)ADDAX,value+2;兩數(shù)相加MOVresult,AX;保存結(jié)果MOVAH,4CH;返回DOSINT21H
codeENDSENDstart12H34H78H56Hvalueresult22
格式
過(guò)程名PROC類型、、、過(guò)程名ENDP
過(guò)程定義由偽操作PROC開(kāi)始、ENDP結(jié)束。其中:PROC和ENDP必須成對(duì)出現(xiàn),
且語(yǔ)句前必須有過(guò)程名,過(guò)程名必須相同。
PROC和ENDP語(yǔ)句之間為子程序的指令序列。程序中可以定義多個(gè)過(guò)程。五、過(guò)程定義偽操作23例1displayPROC、、、、、、RET;NEAR屬性的過(guò)程對(duì)應(yīng)段內(nèi)返回displayENDP例2displayPROCFAR、、、、、、RET;FAR屬性的過(guò)程對(duì)應(yīng)段間返回displayENDP251、NAME和TITLE偽操作
格式:
NAME
模塊名
格式:
TITLE
模塊名在源程序開(kāi)始可用NAME或TITLE為模塊命名,模塊名的作用是指示給連接程序進(jìn)行連接用。源程序中可無(wú)模塊定義,此時(shí)源文件名作為模塊名。六、模塊定義和程序結(jié)束偽操作26格式:
END啟動(dòng)地址作用是指示源程序到此結(jié)束。匯編程序?qū)ND之后的語(yǔ)句不進(jìn)行處理。程序中所有有效語(yǔ)句應(yīng)放在END語(yǔ)句之前。源程序中必須有END結(jié)束語(yǔ)句。匯編程序?qū)o(wú)END語(yǔ)句的源程序不進(jìn)行處理,
只給出無(wú)END語(yǔ)句錯(cuò)誤信息。2、END偽操作27包括:TYPE,LENGTH,SIZE,SEG,OFFSET。把一些特征或存貯器地址的一部分作為數(shù)值回送。八、數(shù)值回送操作符:29·TYPE格式:TYPEvariable回送該變量的以字節(jié)數(shù)表示的類型。(DB為1,DW為2,DD為4,DQ為8,DT為10)或label標(biāo)號(hào),回送標(biāo)號(hào)類型數(shù)值(NEAR為-1,F(xiàn)AR為-2)例:ARRAYDW1,2,3ADDSI,TYPEARRAY匯編程序其形式:ADDSI,230格式:
LENGTHvariable對(duì)于變量中使用DUP匯編回送分配給變量項(xiàng)數(shù),其他情況回送1。例:FESSDW100DUP(0) 對(duì)于MOVCX,LENGTH
FESS 匯編程序?qū)⑵湫问剑篗OVCX,100 其他情況,回送1?!ENGTH31例:ARRAYDW1,2,3 對(duì)于指令MOVCX,LENGTHARRAY 匯編程序?qū)⑹蛊湫问綖椋篗OVCX,1例:TABLEDB‘ABCD’ 對(duì)于指令MOVCX,LENGTHTABLE匯編程序使其形式為:MOVCX,1LENGTH(續(xù))32格式:SIZEvariable 回送分配給該變量的字節(jié)數(shù)LENGTH*TYPE例:FEESDW100DUP(0) MOVCX,SIZEARRAY 將形成:MOVCX,200·SIZE33例:TABLEDB‘ABCD’ MOVCX,SIZETABLE 將形成MOVCX,1例:ARRAYDW1,2,3 MOVCX,SIZEARRAY 形式MOVCX,2 LENGTH*TYPE=2SIZE(續(xù))34
TYPE變量的返回值是類型的字節(jié)數(shù):DB為1,DW為2,DD為4,DQ為8,DT為10
TYPE標(biāo)號(hào)的返回值是:
NEAR為-1,F(xiàn)AR為-2。
LENGTH變量返回DUP分配的項(xiàng)數(shù),對(duì)于其他情況則返回1。
SIZE返回值是:
LENGTH和TYPE值的乘積,即變量的字節(jié)數(shù)。小結(jié):35
SEG取符號(hào)地址的段地址例MOVAX,SEG
yy
OFFSET取符號(hào)地址的偏移地址例MOVBX,OFFSET
yy
SEG(OFFSET)36SEG、OFFSET只能對(duì)符號(hào)地址操作MOVAX,SEG[BX]MOVBX,OFFSET[SI]
注意:37一、概述(一)判斷程序質(zhì)量的標(biāo)準(zhǔn)簡(jiǎn)明、易讀、易維護(hù)。速度快、執(zhí)行時(shí)間短。占用內(nèi)存空間小?!?.4匯編語(yǔ)言程序設(shè)計(jì)381.編寫(xiě)程序主體。分析問(wèn)題,建立模型,確定算法。按算法畫(huà)出程序流程圖。按流程圖編寫(xiě)程序。(二)編寫(xiě)匯編語(yǔ)言程序步驟392.分配內(nèi)存空間,編寫(xiě)匯編程序。分配內(nèi)存空間,規(guī)劃必要的區(qū)段。編寫(xiě)完整的匯編語(yǔ)言程序。(二)編寫(xiě)匯編語(yǔ)言程序步驟3.調(diào)試、優(yōu)化。檢查源程序,優(yōu)化結(jié)構(gòu)。上機(jī)運(yùn)行,調(diào)試。40
順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)子程序結(jié)構(gòu)(三)幾種程序結(jié)構(gòu)41順序結(jié)構(gòu)42兩個(gè)分支YN
、、、CMPAL,BLJGgreat
JMPexitgreat:
exit:、、、、、、
AL≤BL處理AL>BL處理分支結(jié)構(gòu)43三個(gè)分支
、、、CMPAL,0
JGgreat
JLless
JMPexitless:
JMPexitgreat:
exit:、、、AL=0處理AL>0處理AL<0處理YYNN分支結(jié)構(gòu)44循環(huán)結(jié)構(gòu)當(dāng)型循環(huán)(當(dāng)條件成立進(jìn)入循環(huán))循環(huán)初始設(shè)置循環(huán)體循環(huán)條件判斷?YN直到型循環(huán)(直到條件成立退出循環(huán))YN循環(huán)初始設(shè)置循環(huán)體循環(huán)條件判斷?45多處調(diào)用完成同一功能的子程序:codeSEGMENTstart:、、
CALLsub、、
CALLsub、、
CALLsub、、MOVAH,4CHINT21HsubPROC、、、、RETsubENDPcodeENDSENDstart子程序結(jié)構(gòu)46例:試設(shè)計(jì)一個(gè)對(duì)兩個(gè)32位二進(jìn)制數(shù)相加的程序。設(shè)被加數(shù)2A3B078EH和加數(shù)4C508F55H從數(shù)據(jù)段的BGS單元(令BGS=2000H)開(kāi)始依次存放,要求將兩數(shù)和放在加數(shù)之后。分析:這是一個(gè)簡(jiǎn)單的加法問(wèn)題,因?yàn)閿?shù)據(jù)不長(zhǎng),可采用順序程序設(shè)計(jì)方法。因?yàn)槭莾蓚€(gè)32位數(shù)相加,應(yīng)先加低16位,再加高16位,加高16位時(shí)還要考慮低16位相加產(chǎn)生的進(jìn)位,應(yīng)選用帶進(jìn)位加法指令。還要注意,多字節(jié)數(shù)在內(nèi)存是放在連續(xù)的存儲(chǔ)單元中,且高字節(jié)放高地址單元,低字節(jié)放低地址單元。二、匯編語(yǔ)言程序設(shè)計(jì)舉例47內(nèi)存單元分配如下:BGS=2000H8EH07H3BH2AH55H8FH50H4CH…被加數(shù)加數(shù)和48DATASEGMENTORG2000HBGSDD2A3B078EH,4C5D8F55HDD?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAORG1000HSTART:MOVAX,DATAMOVDS,AXMOVBX,BGS49MOVAX,[BX]MOVBX,BGS+4ADDAX,[BX]MOVBX,BGS+8MOV[BX],AXMOVBX,BGS+2MOVAX,[BX]MOVBX,BGS+6ADCAX,[BX]MOVBX,BGS+10MOV[BX],AX低4位高4位50MOVAH,4CHINT21HCODEENDSENDSTART返回DOS同一問(wèn)題,若數(shù)據(jù)很長(zhǎng),或采用字節(jié)加法,則重復(fù)很多次,可考慮采用循環(huán)程序設(shè)計(jì)方法:DATASEGMENTORG2000HBGSDB8EH,07H,3BH,2AHDB55H,8FH,5DH,4CHDB4DUP(?)DATAENDS51CODESEGMENTASSUMECS:CODE,DS:DATAORG1000HSTART:MOVAX,DATAMOVDS,AXMOVCX,4CLCMOVSI,BGSLOOP1:MOVAX,[SI]ADCAX,[SI+4]MOV[SI+8],AX一次加法52INCSILOOPLOOP1MOVAH,4CHINT21HCODEENDSENDSTART53例:已知從內(nèi)存10000H單元開(kāi)始連續(xù)存放著大小不同的兩個(gè)16位二進(jìn)制無(wú)符號(hào)數(shù)X1和X2。試設(shè)計(jì)一個(gè)程序,將其中的大數(shù)放到10050H單元,小數(shù)放到10052H單元。
解:顯然,這是一個(gè)雙分支程序。根據(jù)比較結(jié)果(CF標(biāo)志)用條件轉(zhuǎn)移指令實(shí)現(xiàn)分支。
X1LX1HX2LX2H10000H10050H大數(shù)小數(shù)54DATA SEGMENTORG 0000HMADDWX1,X2ORG0050HMAX DW 2 DUP (?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOVDS, AX MOV AX,[0000H] 55MOV BX,[0002H]CMP AX, BX JNC LOP1 MOV [MAX] ,BX MOV [MAX+2], AXLOPT:MOVAH,4CH
INT21HLOP1:MOV [MAX], AX MOV [MAX+2], BX JMP LOPTCODEENDSENDSTART56例將寄存器BX中的內(nèi)容以十六進(jìn)制形式顯示出來(lái)。 (二進(jìn)制十六進(jìn)制)有關(guān)字符、數(shù)碼轉(zhuǎn)換的處理1.
計(jì)算機(jī)處理字符時(shí),常用的字符編碼是ASCII碼。2.
數(shù)字和字母的ASCII碼是一個(gè)有序序列數(shù)字0~9:30H~39H大寫(xiě)字母A~Z:41H~5AH小寫(xiě)字母a~z:61H~7AH573.計(jì)算機(jī)處理信息時(shí),其對(duì)象都是二進(jìn)制數(shù)。外設(shè)(顯示器、打印機(jī)、鍵盤等)用ASCII碼與CPU進(jìn)行信息傳送。例如:1)在鍵盤上按下某一字符鍵(如’9’),鍵盤接口向鍵盤緩沖區(qū)送去的是該字符的ASCII碼(如39H),不是送數(shù)字09H。2)在文本方式下,要在顯示器上顯示某一字符(如’A’),須將該字符的ASCII碼(如41H)送顯示緩沖區(qū),不是送數(shù)字0AH。
計(jì)算機(jī)要利用顯示器、鍵盤等外設(shè)時(shí),須據(jù)程序設(shè)計(jì)的需要進(jìn)行有關(guān)轉(zhuǎn)換。58例1將BX寄存器中的內(nèi)容以十六進(jìn)制形式顯示出來(lái)。
BX是一個(gè)16位寄存器二進(jìn)制1010100100111110
用十六進(jìn)顯示時(shí),每4位用一個(gè)字符顯示,共4個(gè)其中0000→’0’30H,1010→’A’41H
0001→’1’31H
,1011→’B’42H
、、、、
1001→’9’39H
,1111→’F’46H?十六進(jìn)制A93E屏幕上的顯示‘A’‘9’‘3’‘E’對(duì)應(yīng)的ASCII41H39H33H45H59算法:取出要顯示的某4位,轉(zhuǎn)換為對(duì)應(yīng)的ASCII碼,再調(diào)用DOS系統(tǒng)功能進(jìn)行顯示。1)對(duì)于0000~1001(0~9),先擴(kuò)展成一個(gè)字節(jié),高4位清0,加上30H后,即可得字符’0’~’9’對(duì)應(yīng)的ASCII碼。00000001B+30H=31H;00001001B+30H=39H
0001B‘1’1001B‘9’2)對(duì)于1010~1111(A~F),先擴(kuò)展成一個(gè)字節(jié),高4位清0,加上30H后,還要再加上07H,才能得到’A’~’F’對(duì)應(yīng)的ASCII碼00001010B+30H+07H=41H1010B‘A’00001111B+30H+07H=46H1111B‘F’60CODESEGMENTASSUMECS:codestart:MOVCH,4;字符個(gè)數(shù)MOVCL,4;循環(huán)移位次數(shù)next:ROLBX,CL;取顯示位的值
MOVDL,BL;保存在DL中
ANDDL,0FH;清除高4位
ADDDL,30H;轉(zhuǎn)變?yōu)閿?shù)字的ASCII
CMPDL,39H;大于39H,則應(yīng)轉(zhuǎn)變
JLEprint;為字母A~F的ASCII
ADDDL,07H
61print:MOVAH,02H;顯示DL中的字符INT21HDECCH;顯示結(jié)束?JNZnextMOVAH,4CH;返回DOSINT21HCODEENDS
ENDstart62編程將CPU內(nèi)SP、BP、SI、DI4個(gè)16位寄存器當(dāng)前的內(nèi)容分別用十六進(jìn)制形式顯示出來(lái)。
要點(diǎn):將上例改寫(xiě)為一個(gè)子程,入口參數(shù)為BX
子程中注意寄存器值的保存和恢復(fù)注意CS、IP、PSW寄存器值的獲取方法63CODESEGMENTASSUMECS:CODEstart:MOVBX,SP;顯示SP
CALLLISTBXMOVBX,BP;顯示BP
CALLLISTBXMOVBX,SI;顯示SI
CALLLISTBX
MOVBX,DI;顯示DI
CALLLISTBX
MOVAH,4CH;返回DOSINT21H64LISTBXPROCPUSHF
;保存寄存器
MOVCH,4MOVCL,4next:ROLBX,CLMOVDL,BLANDDL,0FHADDDL,30HCMPDL,39HJLEprintADDDL,07Hprint:MOVAH,02H;輸出字符INT21HDECCHJNZnextMOVDL,20H;顯示空格符MOVAH,02HINT21HRET
;子程返回LISTBXENDPCODEENDENDstart65子程與主程的參數(shù)傳送:用寄存器傳送用定義的變量傳送3)利用地址表傳送4)
用堆棧傳送66
一、概述:
例:編寫(xiě)完整匯編語(yǔ)言程序,要求:清屏,顯示“HelloChina!”方法:將0AH功能輸入的字符串,用09H功能顯示出來(lái)。結(jié)果如下:dataSEGMENTmaxDB12,?,4DUP(?)stringDB‘HelloWorld!’,’$’dataENDS§7.7DOS功能調(diào)用67
codeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;置緩沖區(qū)地址于DS:DXMOVDS,AXLEADX,maxMOVAH,0AH;調(diào)用0AH輸入功能INT21HLEADX,stringMOVAH,09H;調(diào)用09H顯示功能INT21HMOVAH,4CHINT21H;返回DOScodeENDSENDstart68
PC—DOS是IBMPC微型計(jì)算機(jī)的磁盤操作系統(tǒng)。它為用戶提供了許多命令,也有80多個(gè)子程序可供用戶調(diào)用。這些子程序的功能主要是實(shí)現(xiàn)對(duì)存儲(chǔ)器和基本I/O設(shè)備的管理等。為了便于調(diào)用將所有子程序順序編號(hào),如PCDOS2.0有87個(gè)子程序,編號(hào)從0開(kāi)始到57H。
用戶編程原則:盡可能使用DOS的系統(tǒng)功能調(diào)用,提高程序可移植性。②在DOS功能不能實(shí)現(xiàn)情況下,考慮用BIOS功能調(diào)用。③在DOS和BIOS的中斷子程不能解決問(wèn)題時(shí),使用
IN/OUT指令直接控制硬件。691.調(diào)用方法DOS系統(tǒng)功能調(diào)用是一種內(nèi)部中斷方式,它是通過(guò)INT21H指令進(jìn)入功能調(diào)用,再通過(guò)功能號(hào)進(jìn)入具體子程序。
需要三個(gè)語(yǔ)句:①將入口參數(shù)送指定寄存器②將功能號(hào)(0~57H)送AH寄存器③使用內(nèi)部中斷指令:INT21H70設(shè)置入口參數(shù)在AH設(shè)置功能號(hào)m執(zhí)行中斷指令I(lǐng)NTN分析、應(yīng)用出口參數(shù)1.調(diào)用方法71使用DOS功能調(diào)用還要注意下列問(wèn)題:(1)從鍵盤輸入的字符由系統(tǒng)自動(dòng)轉(zhuǎn)換為ASCII碼,在進(jìn)行數(shù)據(jù)處理時(shí)要特別注意;(2)需要在屏幕上顯示的字符要在程序中將其轉(zhuǎn)換為ASCII碼。
2、DOS功能調(diào)用要注意的問(wèn)題721.顯示單字符(02H功能)入口參數(shù)DL=要顯示字符的ASCII碼功能號(hào)
AH=02H類型號(hào)
INT21H出口參數(shù)無(wú)實(shí)現(xiàn)功能顯示指定字符,光標(biāo)隨動(dòng)。例
顯示字符AMOVDL,‘A’MOVAH,02HINT21H二、DOS系統(tǒng)功能調(diào)用(21H類型中斷調(diào)用)73入口參數(shù)①定義要顯示的字符串,字符串尾應(yīng)為’$’,作為結(jié)束顯示的標(biāo)志。②DS:DX=字符串的首地址功能號(hào)
AH=09H類型號(hào)
21H出口參數(shù)無(wú)實(shí)現(xiàn)功能顯示字符串,遇’$’停止顯示,光標(biāo)隨動(dòng)。2.顯示字符串(09H功能)74例編程顯示字符串’TsinghuaUniversity’dataSEGMENT
;定義顯示的子符串striDB‘TsinghuaUniversity’,‘$’dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data
;置緩沖區(qū)地址于DS:DXMOVDS,AXLEADX,stri
MOVAH,09H;調(diào)顯示功能
INT21HMOVAH,4CH;返回DOS
INT21HcodeENDS
ENDstart75①入口參數(shù)無(wú)
功能號(hào)
AH=01H
類型號(hào)
21H
出口參數(shù)AL=鍵入字符的ASCII碼
實(shí)現(xiàn)功能
等待從鍵盤輸入一個(gè)字并在屏幕上回顯,光標(biāo)移動(dòng),檢測(cè)
Ctrl-Break鍵3.單字符輸入(01H、07H功能)76例利用鍵盤輸入的字符產(chǎn)生分支:MOVAH,1INT21H;等待從鍵盤輸入
CMPAL,‘Y’
;是’Y’?
JZyesno:......JMPexityes:......exit:...77②
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 金融服務(wù)行業(yè)綠色金融與投資顧問(wèn)方案
- 公司計(jì)時(shí)工作勞動(dòng)合同書(shū)
- 行政合同的主體是
- 農(nóng)民合作社經(jīng)營(yíng)管理方案
- 企業(yè)服務(wù)質(zhì)量管理作業(yè)指導(dǎo)書(shū)
- 保安員工合同
- 2025年南陽(yáng)b2貨運(yùn)上崗證模擬考試
- 小學(xué)二年級(jí)數(shù)學(xué)上冊(cè)口算練習(xí)題
- 電商代運(yùn)營(yíng)合同(2篇)
- 電力合同管理協(xié)議(2篇)
- 蔬菜采購(gòu)項(xiàng)目投標(biāo)書(shū)
- 肩周炎康復(fù)護(hù)理
- 2022年安徽管子文化旅游集團(tuán)有限公司招聘筆試試題及答案解析
- SAPPM設(shè)備管理解決方案
- Q-HN-1-0000.08.004《風(fēng)力發(fā)電場(chǎng)電能質(zhì)量監(jiān)督技術(shù)標(biāo)準(zhǔn)》
- 多指畸形-課件
- 5G NSA站點(diǎn)開(kāi)通指導(dǎo)書(shū)(臨時(shí)IP開(kāi)站)
- 宗教與社會(huì)課件
- 3人-機(jī)-環(huán)-管理本質(zhì)安全化措施課件
- 生殖醫(yī)學(xué)中心建設(shè)驗(yàn)收標(biāo)準(zhǔn)分析-講座課件PPT
- DB44∕T 1811-2016 石灰?guī)r山地造林技術(shù)規(guī)程
評(píng)論
0/150
提交評(píng)論