版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
匯編語言程序設(shè)計第1頁,課件共63頁,創(chuàng)作于2023年2月1.設(shè)計步驟:根據(jù)實際問題抽象出數(shù)學(xué)模型確定算法畫程序流程圖分配內(nèi)存工作單元和寄存器程序編碼調(diào)試第2頁,課件共63頁,創(chuàng)作于2023年2月2.繪制程序流程圖(1)用方框表示工作框(2)用菱形框表示判斷框
NY?(4)各框之間用直線連起來表示程序走向。(3)用
框表示調(diào)用子程序或過程。3.源程序的基本結(jié)構(gòu):順序、分支、循環(huán)、子程序第3頁,課件共63頁,創(chuàng)作于2023年2月程序流程圖符號起始:功能:判斷:子過程:第4頁,課件共63頁,創(chuàng)作于2023年2月順序程序設(shè)計,又叫直接程序設(shè)計。它是相對于分支程序和循環(huán)程序設(shè)計而言的。因此,可以說順序程序是既不包含分支,又不包含循環(huán)的程序,順序程序是從第一條指令開始,按其自然順序,一條指令一條指令地執(zhí)行,在運行期間,CPU既不跳過某些指令,也不重復(fù)執(zhí)行某些指令,一直執(zhí)行到最后一條指令為止。4.1順序結(jié)構(gòu)程序第5頁,課件共63頁,創(chuàng)作于2023年2月例:將某段中的字符串“Hello!”傳送到另一段中(內(nèi)存數(shù)據(jù)塊的傳送)。開始建立傳送方向DS:SI←
源串首地址
ES:DI
←目的串首地址CX
←
串長度串傳送返回DOS4.1順序結(jié)構(gòu)程序(順序執(zhí)行,無轉(zhuǎn)移、無循環(huán))第6頁,課件共63頁,創(chuàng)作于2023年2月aa SEGMENT
;數(shù)據(jù)段1xx DB'Hello!’;定義源串a(chǎn)a ENDSbb SEGMENT
;數(shù)據(jù)段2yy DB6dup(?);定義目的串bb ENDScc SEGMENT
;代碼段
ASSUMECS:cc,DS:aa,ES:bb
;分配段寄存器start
: CLD;設(shè)置傳送方向
MOVAX,aa
;DS:SI←
源串首地址
MOVDS,AX
LEASI,xx
MOVAX,yy
;ES:DI←
目的串首地址
MOVES,AX MOVDI,OFFSETyy
MOVCX,6;CX←
串的長度
REPMOVSB;串傳送
MOVAH,4CH;調(diào)用4CH系統(tǒng)功能,返回DOS INT21Hcc ENDS
ENDstart
;程序結(jié)束第7頁,課件共63頁,創(chuàng)作于2023年2月
4.1順序程序設(shè)計
例4.1.1
把在字節(jié)存儲單元AA和BB中的兩個壓縮BCD數(shù)相加,結(jié)果存到字節(jié)單元CC中。分析:實現(xiàn)BCD碼相加,要通過二進制數(shù)加法指令實現(xiàn)。然后再用十進制調(diào)整指令進行調(diào)整,以獲得正確的BCD結(jié)果。因為是單字節(jié)相加,只用一條二進制加法指令即可。如果考慮相加結(jié)果有進位,則可以將表示進位的CF標(biāo)志位存入單元CC+1中。為此,在存儲單元CC處留有兩個字節(jié),用來存放相加的結(jié)果。第8頁,課件共63頁,創(chuàng)作于2023年2月程序:DATASEGMENTAADB23H;被加數(shù)BBDB18H;加數(shù)CCDB2DUP(?);結(jié)果單元DATAENDSBCDADDSEGMENTASSUMECS:BCDADD,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,AA;取被加數(shù)
ADDAL,BB;二數(shù)相加
DAA;調(diào)整為十進制結(jié)果
MOVCC,ALLAHF;取標(biāo)志位
ANDAH,01;取CF位
MOVCC+1,AH;存進位到C+1單元
MOVAH,4CHINT21HBCDADDENDSENDSTART第9頁,課件共63頁,創(chuàng)作于2023年2月
例4.1.4
在內(nèi)存地址SQREA起有0~15的平方數(shù)表。在ABB單元任給---個小于等于15的整數(shù),求其平方值。分析:因為平方表已順序排放在內(nèi)存中。又已知首地址為SQREA,只要把給定單元的內(nèi)容作位移量與表首址相加,就指向了表中要求值的地址,取其內(nèi)容即為該數(shù)的平方值。第10頁,課件共63頁,創(chuàng)作于2023年2月源程序:DATA SEGMENTSQREADB0,1,4,9,16,25,36,49,64,81DB100,121,144,169,196,225ABBDB8DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTARTPROC FARPUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVBL,ABB;取給定單元中數(shù)
MOVBH,0MOVSI,OFFSETSQREA;平方表首地址指針
MOVAL,[SI+BX];取給定數(shù)的平方值
MOVABB,AL;存回原單元
RETFSTARTENDPCODEENDSENDSTART第11頁,課件共63頁,創(chuàng)作于2023年2月條件滿足?處理P1處理P2標(biāo)號1:標(biāo)號2:NY1.簡單分支結(jié)構(gòu)4.2分支程序分支結(jié)構(gòu)程序設(shè)計的關(guān)鍵在于準(zhǔn)確地知道操作結(jié)果影響的標(biāo)志位狀態(tài)和正確地使用條件轉(zhuǎn)移指令。根據(jù)對條件的判斷而選擇不同的處理方法是人的基本智能體現(xiàn)。第12頁,課件共63頁,創(chuàng)作于2023年2月2.多種分支結(jié)構(gòu)標(biāo)號1:條件1成立?P1NY條件2成立?條件n成立?…Pn+1標(biāo)號2:標(biāo)號n:標(biāo)號n+1:P2PnNNYY第13頁,課件共63頁,創(chuàng)作于2023年2月
①用比較指令
CMPDEST,SRCJEEQUL……EQUL:②用測試指令
TESTDEST,SRCJNZNEXT……NEXT:③用邏輯指令
SHRDEST,CLJCNEXT……NEXT:第14頁,課件共63頁,創(chuàng)作于2023年2月例:編程實現(xiàn)下列函數(shù)的功能,其中X、Y為無符號字節(jié)數(shù)。(AL)=X(BL)=Y開始(AL)=(BL)?Z=0YZ=1Y(AL)>(BL)?NZ=-1N結(jié)束第15頁,課件共63頁,創(chuàng)作于2023年2月程序;--數(shù)據(jù)段定義----------------------------------
DAT
SEGMENT X DB 242 Y DB 67 Z DB ?
DAT
ENDS;--代碼段定義----------------------------------
COD SEGMENT ASSUMEDS:DAT,CS:COD START:MOVAX,DAT
MOVDS,AX
;初始化DS
MOVAL,X MOVBL,Y第16頁,課件共63頁,創(chuàng)作于2023年2月;-------------------------------------------------------------------------------- CMP AL,BL
JE
C1
;(AL)=(BL)則跳轉(zhuǎn)至C1
JA
C2
;(AL)>(BL)則跳轉(zhuǎn)至C2 MOV AL,-1
JMPEXT
C1: MOV AL,0
JMP EXTC2: MOV AL,1EXT:MOVZ,ALMOV AH,4CH INT21H ;返回DOS;------------------------------------------------------------------------------------ COD ENDS
END START第17頁,課件共63頁,創(chuàng)作于2023年2月
4.2
分支程序設(shè)計例4.2.1
設(shè)在A、B兩個存貯單元各有一個無符號數(shù),比較兩個無符號數(shù)的大小,并根據(jù)判斷結(jié)果,在屏幕顯示A>B或B>A或A=B。分析:兩個無符號數(shù)比較大小,使用比較指令CMP,產(chǎn)生標(biāo)志位,然后根據(jù)標(biāo)志位,使用無符號條件轉(zhuǎn)移指令實現(xiàn)轉(zhuǎn)移。源程序:DATASEGMENTADB3BHBDB8EHASTRDB‘A>B$’BSTRDB‘B>A$’CSTRDB‘A=B$’DATAENDS
第18頁,課件共63頁,創(chuàng)作于2023年2月CODESEGMENTASSUMECS:CODE,DS:DATAMOVAX,DATAMOVDS,AXMOVAL,A;取A中數(shù)
CMPB,AL;A與B比較
JAEBGA;B≥A,轉(zhuǎn)BGAMOVDX,OFFSETASTR;顯示A>BMOVAH,9INT21HJMPCOMBGA:JZAEBMOVDX,OFFSETBSTR;顯示B>AMOVAH,9INT21HJMPCOMAEB:MOVDX,OFFSETCSTR;顯示A=BMOVAH,9INT21HCOM:MOVAH,4CHINT21HCODEENDS
第19頁,課件共63頁,創(chuàng)作于2023年2月例4.2.2
在一個字符串中,找出其ASCII碼值最大的字符,并顯示在屏幕上。分析:可以把每個字符的ASCII碼,看做是一個無符號數(shù)。這樣,就轉(zhuǎn)化為在一組數(shù)中查找一個最大數(shù)的操作。通常使用逐個比較法,即把第一個數(shù)作比較標(biāo)準(zhǔn),與其后的數(shù)比較。如標(biāo)準(zhǔn)數(shù)大,則再與下一個數(shù)比較。如標(biāo)準(zhǔn)數(shù)小,則將大數(shù)做為新的標(biāo)準(zhǔn)數(shù),再與下一個數(shù)比較。依此類推,逐個比較,直到最后一個標(biāo)準(zhǔn)的數(shù),就是要找的最大數(shù),即值為最大的字符。第20頁,課件共63頁,創(chuàng)作于2023年2月源程序:
DATASEGMENTBLOKDB‘Searchacharactertohave';字符串
DB‘thelargestvalue$'COUNTEQU$-BLOK;串長
DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBLOKMOVCX,COUNT-1MOVAL,[SI];取一個字符,
INCSI;調(diào)整指針COMP:CMPAL,[SI];字符比較
JANEXT;若AL值大,轉(zhuǎn)NEXT第21頁,課件共63頁,創(chuàng)作于2023年2月
MOVAL,[SI];否則,取大值到ALNEXT:INCSI;調(diào)整指針
LOOPCOMP;循環(huán)查找
MOVDL,AL;顯示所找到的最大字符
MOVAH,2INT21HMOVAH,4CHINT21HCODEENDSENDSTART第22頁,課件共63頁,創(chuàng)作于2023年2月循環(huán)程序的組成:循環(huán)程序是在滿足某些條件時對一段程序的重復(fù)執(zhí)行,一般由四部分組成。
4.3循環(huán)程序(1)循環(huán)初值部分:這是為了保證循環(huán)程序能正常進行循環(huán)操作而必須做的準(zhǔn)備工作。循環(huán)初值分兩類:一類是循環(huán)工作部分的初值,別一類是控制循環(huán)結(jié)束條件的初值。(2)工作部分:即需要重復(fù)執(zhí)行的程序段。這是循環(huán)的中心,稱之為循環(huán)體。(3)修改部分:按一定規(guī)律修改操作數(shù)地址及控制變量,以便每次執(zhí)行循環(huán)體時得到新的數(shù)據(jù)。(4)控制部分:用來保證循環(huán)程序按規(guī)定的次數(shù)或特寫條件正常循環(huán)。第23頁,課件共63頁,創(chuàng)作于2023年2月循環(huán)體循環(huán)控制繼續(xù)循環(huán)?初始化YN(2)先判斷后執(zhí)行循環(huán)體可能一次都不執(zhí)行初始化循環(huán)體循環(huán)控制繼續(xù)循環(huán)?YN2.基本結(jié)構(gòu)形式(1)先執(zhí)行后判斷(do—while)至少執(zhí)行一次循環(huán)體第24頁,課件共63頁,創(chuàng)作于2023年2月
①MOVCX,COUNTAGAIN:……LOOPAGAIN②MOVCX,COUNTAGAIN:……DECCXJNZAGAIN③MOVCX,COUNTAGAIN:JCXZNEXT……DECCXJMPAGAINNEXT:第25頁,課件共63頁,創(chuàng)作于2023年2月2、循環(huán)程序設(shè)計(1)循環(huán)的控制方法下面介紹最常見的兩種控制方法:計數(shù)控制和條件控制。①計數(shù)控制當(dāng)循環(huán)次數(shù)已知時,通常使用計數(shù)控制法。假設(shè)循環(huán)次數(shù)為n,常常用以下三種方法實現(xiàn)計數(shù)控制和條件控制先將循環(huán)次數(shù)n送入循環(huán)體計數(shù)器中,然后,每循環(huán)一次,計數(shù)器減1,直至循環(huán)計數(shù)器中的內(nèi)容為0時結(jié)束循環(huán)。如:
MOVCX,n
…
;循環(huán)初值部分LOOPA:…
;工作部分
…
;修改部分
DECCX;控制部分
JNZLOOPA:第26頁,課件共63頁,創(chuàng)作于2023年2月其中工作部分、修改部分被重復(fù)執(zhí)行n次,即當(dāng)(CX)=n,n-1,…,1時,重復(fù)執(zhí)行循環(huán)體,當(dāng)(CX)=0時,結(jié)束循環(huán)。先將循環(huán)次數(shù)的負(fù)值送入循環(huán)計數(shù)器中,然后每循環(huán)一次,計數(shù)器加1,直至計數(shù)器中的內(nèi)容為零時結(jié)束循環(huán)。例如:
MOV
CX,-n
…
;循環(huán)初值部分LOOPA:…
;工作部分
…
;修改部分
INC
CX;控制部分
JNZLOOPA其中工作部分、修改部分被重復(fù)執(zhí)行n次,即當(dāng)(CX)=-n,-(n-1),…,-1時重復(fù)執(zhí)行,當(dāng)(CX)=0時結(jié)束循環(huán)。第27頁,課件共63頁,創(chuàng)作于2023年2月先將0送入循環(huán)計數(shù)器中,然后每循環(huán)一次,計數(shù)器加1,直到循環(huán)計數(shù)器的內(nèi)容與循環(huán)次數(shù)n相等時退出循環(huán)。例如:
MOVCX,0
…
;循環(huán)初值部分
LOOPA:…
;工作部分
…
;修改部分
INCCX;修改部分
CMPCX,nJNELOOPA其中工作部分、修改部分重復(fù)執(zhí)行n次,即當(dāng)(CX)=0,1,…,n-1時重復(fù)執(zhí)行,當(dāng)(CX)=n時結(jié)束循環(huán)。第28頁,課件共63頁,創(chuàng)作于2023年2月②條件控制有些情況下,循環(huán)次數(shù)事先無法確定,但它與問題的某些條件有關(guān)。這些條件可以通過指令來測試。若測試比較的結(jié)果表明滿足循環(huán)條件,則繼續(xù)循環(huán),否則結(jié)束循環(huán)。
[例]:統(tǒng)計AX寄存器中1的個數(shù),并將結(jié)果存放在CL寄存器中?!璏OVCL,0L:ANDAX,AXJZEXITSALAX,1;將AX中的最高位移入CF中
JNCL;如果CF=0,轉(zhuǎn)LINCCL;如果CF=1,則(CL)+1→CLJMPL;轉(zhuǎn)L處繼續(xù)循環(huán)
EXIT:…第29頁,課件共63頁,創(chuàng)作于2023年2月2、單重循環(huán)程序設(shè)計所謂單重循環(huán)指循環(huán)體內(nèi)不再包含循環(huán)結(jié)構(gòu)。下面分循環(huán)次數(shù)已知和未知兩種情況討論其程序設(shè)計方法。(1)循環(huán)次數(shù)已知的循環(huán)程序設(shè)計對于循環(huán)次數(shù)已知的情況,通常采用計數(shù)控制方法來實現(xiàn)循環(huán)。(2)最大循環(huán)次數(shù)未知的循程序設(shè)計對于循環(huán)次數(shù)未知的情況,常用條件來控制循環(huán)。3、多重循環(huán)程序設(shè)計多重循環(huán)即循環(huán)體內(nèi)套有循環(huán)。設(shè)計多重循環(huán)程序時,可以從外層循環(huán)到內(nèi)層循環(huán)一層一層地進行。
第30頁,課件共63頁,創(chuàng)作于2023年2月
4.3循環(huán)程序設(shè)計例4.3.1
在BUFFER開始的地址處,有一組有符號數(shù)。要求統(tǒng)計其中負(fù)數(shù)的個數(shù)。程序:DATASEGMENTBUFFERDB2,-3,18,-24,87,-98NEQU$-BUFFERRESLTDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTARTPROC FARPUSHDSXORAX,AXPUSHAXMOVAX,DATAMOVDS,AX第31頁,課件共63頁,創(chuàng)作于2023年2月MOVBX,OFFSETBUFFERMOVCX,NMOVDL,0LOP:MOVAL,[BX]ANDAL,ALJNSNEXTINCDLNEXT:INCBXLOOPLOPMOVRESLT,DLADDDL,30HMOVAH,2INT21HRETSTARTENDPCODEENDSENDSTART第32頁,課件共63頁,創(chuàng)作于2023年2月例4.3.2 在地址ADDR開始處,存放有100個無序的無符號數(shù)。要求按降序排列(大數(shù)在前、小數(shù)在后),結(jié)果仍存放到原地址區(qū)。分析:在前面的例子中,已討論過求最大值的問題,現(xiàn)在要求是在找到最大值后再找次大數(shù),且置于最大數(shù)后,以此類推,直到將所有的數(shù)都按降序排列完為止。所以,這是一個重復(fù)尋找最大數(shù)問題。每找一個最大數(shù),要逐個與數(shù)列比較,將其作為內(nèi)循環(huán)處理。當(dāng)找到一個最大數(shù)后,還要在數(shù)列中找下一個次大的數(shù),要重復(fù)使用循環(huán)程序,用控制重復(fù)執(zhí)行內(nèi)循環(huán)的程序部分作為外循環(huán)程序,這是一個二重循環(huán)程序。
第33頁,課件共63頁,創(chuàng)作于2023年2月源程序:DATASEGMENTADDRDB4AH,63H,27H,48H,22H,39H,…DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTARTPROCFARPUSHDSXORAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVCX,100-1;置計數(shù)器初值
MOVSI,OFFSETADDR;取數(shù)據(jù)序列首指針
LP1:MOVDX,CX;置內(nèi)循環(huán)計數(shù)器
MOVDI,SI;置內(nèi)循環(huán)地址指針
MOVAL,[DI];取數(shù)
第34頁,課件共63頁,創(chuàng)作于2023年2月
LP2:INCDI;指向下一個數(shù)地址
CMPAL,[DI];判大小
JAENEXT;AL大,轉(zhuǎn)NEXTMOVBL,AL;否則,交換數(shù)據(jù)
MOVAL,[DI]MOV[DI],BLNEXT:DECDX;本遍比較完?JNZLP2;未完,轉(zhuǎn)LP2MOV[SI],AL;完,存最大數(shù)
INCSI;調(diào)整外循環(huán)地址指針
LOOPLP1;未排完隊列,轉(zhuǎn)LP1RET;排完,返回
CODEENDSENDSTART第35頁,課件共63頁,創(chuàng)作于2023年2月子程序:重復(fù)使用的程序段或具有通用性便于共享的程序段1.調(diào)用子程序用CALL指令,返回調(diào)用程序用RET指令2.現(xiàn)場的保護和恢復(fù)現(xiàn)場:指轉(zhuǎn)向子程序執(zhí)行時主程序的狀態(tài),包括當(dāng)時標(biāo)志寄存器、段寄存器、通用寄存器的內(nèi)容主程序和子程序的設(shè)計是分開進行的,為保證主、子程序所使用的寄存器不會發(fā)生沖突,進入子程序時要保護主程序的運行狀態(tài)和使用的寄存器內(nèi)容(保護現(xiàn)場),退出子程序前要恢復(fù)現(xiàn)場?,F(xiàn)場的保護和恢復(fù)分別用PUSH和POP指令實現(xiàn)4.4子程序設(shè)計第36頁,課件共63頁,創(chuàng)作于2023年2月
調(diào)用前要預(yù)先確定子程序中要使用哪些寄存器,并定義入口參數(shù)和出口參數(shù)。參數(shù)傳遞的方法:(1)使用約定的寄存器傳遞(2)使用約定的存儲單元傳遞(3)使用堆棧傳遞(要用BP尋址)第37頁,課件共63頁,創(chuàng)作于2023年2月4.4子程序例4.4.2
對存于ADD1地址起的20個非壓縮的十進制數(shù),要求用十進制數(shù)轉(zhuǎn)ASCII碼的子程序完成代碼轉(zhuǎn)換,并存于ADD2地址起的單元中,轉(zhuǎn)換后的字符在屏幕上進行顯示。十進制數(shù)轉(zhuǎn)ASCII碼子程序使用段間調(diào)用。第38頁,課件共63頁,創(chuàng)作于2023年2月源程序:NAMESUBPROGEXTRNADD1:BYTECODE2SEGMENTPARAPUBLIC‘CODE’SPRGPROCFARASSUMECS:CODE2PUBLICSPRGSTT:MOVAL,ADD1[SI]ADDAL,30HRETSPRGENDPCODE2ENDSENDNAMEEXDATASEGMENTADD1DB04H,05H,06H,02H,07H,05H,02H,03H,05H,08HDB08H,07H,09H,04H,09H,08H,05H,06H,07H,06HADD2DB20DUP(?)ADD3EQU20DATAENDS第39頁,課件共63頁,創(chuàng)作于2023年2月STACKSEGMENTPARASTACK‘STACK’DW100DUP(?)STACKENDSPUBLICADD1EXTRNSPRG:FARCODE1SEGMENTPARAPUBLIC‘CODE’ASSUMECS:CODE1,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVDI,0MOVSI,0MOVCX,ADD3LP:CALLSPRG;段間調(diào)用
MOVADD2[DI],ALINCDIINCSI
第40頁,課件共63頁,創(chuàng)作于2023年2月MOVDL,ALMOVAH,02INT21HMOVDL,‘’
INT21HLOOPLPMOVAH,4CHINT21HCODE1ENDSENDSTART第41頁,課件共63頁,創(chuàng)作于2023年2月4.4.4調(diào)用程序和子程序間的參數(shù)傳遞一、子程序說明文件子程序說明文件主要信息:(1)子程序的名稱及其功能;(2)子程序的入口參數(shù)說明;(3)子程序的出口參數(shù)說明;(4)子程序所使用的寄存器及存儲區(qū);(5)子程序調(diào)用其它子程序的方式及名稱。第42頁,課件共63頁,創(chuàng)作于2023年2月
二、主程序和子程序之間的參數(shù)傳遞方式1.利用寄存器傳遞參數(shù)
2.利用存儲器傳遞參數(shù)
3.利用堆棧傳遞參數(shù)
利用存儲器傳遞參數(shù)舉例例4.4.4在ABCD地址起有N位帶符號十進制數(shù),其首字符表示為符號(用全0、全1碼分別表示正和負(fù))。數(shù)的高位在低地址,低位在高地址,將其轉(zhuǎn)為對應(yīng)的二進制數(shù)(負(fù)數(shù)用補碼表示),并存于ABIN起的地址單元中,限定十進制數(shù)在士65535范圍之中。
第43頁,課件共63頁,創(chuàng)作于2023年2月分析:為實現(xiàn)N位帶符號的十進制數(shù)轉(zhuǎn)換為二進制數(shù),將十進制數(shù)表示為下式:d0、d1、d2、d3、d4、…d(n-1),其中d0為符號位。考慮相鄰位數(shù)權(quán)值相差10倍,則該十進制數(shù)的二進制數(shù)值可用下式表示:(…((d1*1O+d2)*1O+d3)*10+…)*10+d(n-1)若符號位為正,則該值即為二進制正數(shù)值。若符號位為負(fù),則應(yīng)將該數(shù)轉(zhuǎn)為負(fù)數(shù)的補碼。為了實現(xiàn)存儲器參數(shù)傳遞,由SI作十進制數(shù)地址指針,DI作二進制數(shù)地址指針,CX指示十進制數(shù)位長。子程序返回參數(shù)由AX提供,AX=0,表示十進制數(shù)有錯或結(jié)果溢出。AX≠0,表示其內(nèi)容為正確的二進制數(shù)結(jié)果。
第44頁,課件共63頁,創(chuàng)作于2023年2月源程序:STACKSEGMENT
PARASTACK‘STACK’
DB200DUP(?)STACKENDSDATASEGMENT
ABCDDB0,0,0,3,4,5ABINDB3DUP(O)NEQU6DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAASSUMESS:STACKSTART:MOVAX,DATAMOVDS,AX第45頁,課件共63頁,創(chuàng)作于2023年2月LEASI,ABCD;置數(shù)據(jù)地址指針(含符號位)LEADI,ABIN;置結(jié)果數(shù)據(jù)地址指針(含符號位)MOVCX,N-1;置計數(shù)器初值
CALLDTOB;調(diào)用DTOB子程序
CMPAX,O;返回碼表錯?JNEFIN;無錯,轉(zhuǎn)FINMOVDL,‘0’;顯示‘0’,表示結(jié)果有錯。
MOVAH,02HINT21HFIN:MOVAH,4CHINT21HCODEENDS第46頁,課件共63頁,創(chuàng)作于2023年2月
;子程序名:DTOB;功能:把由SI指出的存儲單元中的有符號十進制數(shù)轉(zhuǎn)換為二進制數(shù),結(jié)果存于AX寄存器中。;入口參數(shù):SI指向十進制數(shù)(非壓縮BCD數(shù))首址;DI指向二進制數(shù)存儲區(qū)首址;CX=十進制數(shù)位長(含符號位);出口參數(shù):AX=返回碼,AX=0,十進制數(shù)有錯或結(jié)果溢出;AX≠0,
AX中為轉(zhuǎn)換后的二進制數(shù)。;使用寄存器:BX為存放各十進制數(shù)位運算值,DX存放乘積運算的高位值。DTOBPROCPUSHDX;保護寄存器
PUSHBXMOVBL,[SI];取符號
CMPBL,0JZPLUS;為正,轉(zhuǎn)PLUSCMPBL,OFFH;為負(fù)嗎?JNZEROR;非負(fù)非正轉(zhuǎn)EROR處第47頁,課件共63頁,創(chuàng)作于2023年2月PLUS:MOV[DI],BL;存結(jié)果的符號DECCXINCSIMOVAL,[SI];取十進制數(shù)高位存AX中MOVAH,0MOVDX,10NEXT:PUSHDXMULDX;AX*10→AXPOPDXINCSIMOVBL,[SI];取低位十進制數(shù)MOVBH,0ADDAX,BX;AX加上低位數(shù)JCEROR;進位,轉(zhuǎn)ERORLOOPNEXT;未處理完循環(huán)第48頁,課件共63頁,創(chuàng)作于2023年2月CMPBYTEPTR[DI],OFFH;判結(jié)果符號
JNZDONE;非負(fù)數(shù),結(jié)束
NEGAX;負(fù)數(shù),取補
MOVWORDPTR[DI],AX;補碼送回
JMPDONEEROR:MOVAX,0;置錯誤返回碼DONE:POPBXPOPDXRETDTOBENDPCODEENDSENDSTART第49頁,課件共63頁,創(chuàng)作于2023年2月利用堆棧傳遞參數(shù)舉例例4.4.5NUMB開始的地址處,有5個壓縮型BCD碼,將它們相加,其和在屏幕上顯示。源程序:STACKSEGMENTPARASTACK'STACK'DW50DUP(?)TOPLABELWORDSTACKENDSDATASEGMENTNUMBDB25H,36H,78H,49H,07HNOUTDB5DUP(?)NEQU5DATAENDS
第50頁,課件共63頁,創(chuàng)作于2023年2月
EXTRNADDS:FARDISMACROXMOVDL,XORDL,30HMOVAH,02INT21HENDMMCODESEGMENTPARAPUBLIC'CODE'ASSUMECS:MCODE,DS:DATA,SS:STACK
START:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVSP,OFFSETTOPMOVAX,OFFSETNUMBPUSHAXMOVAX,NPUSHAXCALLADDSCALLDISPMOVAH,4CHINT21H第51頁,課件共63頁,創(chuàng)作于2023年2月DISPPROCMOVBX,AX;存累加和MOVCL,4SHRAH,CL;右移叫工DISAH;顯示高位值MOVAH,BHANDAH,OFH;取低位數(shù)
DISAH;顯示低位數(shù)
SHRAL,CLDISALMOVAL,BLANDAL,0FHDISALRETDISPENDPMCODEENDSENDSTART第52頁,課件共63頁,創(chuàng)作于2023年2月NAMEADDSRSCODESEGMENTPARAPUBLIC‘CODE’
ASSUMECS:SCODEADDSPROCFARPUBLICADDSPUSHBPMOVBP,SPPUSHCXPUSHBXMOVCX,[BP+6];取數(shù)據(jù)項數(shù)NMOVBX,[BP+8];取數(shù)據(jù)首地址MOVAX,0ADER:ADDAL,[BX]DAAADCAH,0INCBXLOOPADERPOPBXPOPCXPOPBPRET4;退回到本例使用前的棧頂
ADDSENDPSCODEENDSEND第53頁,課件共63頁,創(chuàng)作于2023年2月
4.5軟中斷和BIOS調(diào)用
4.5.18088/8086的中斷系統(tǒng)一、8088/8086的中斷源
第54頁,課件共63頁,創(chuàng)作于2023年2月軟中斷
軟中斷指令格式:INTn
n為中斷類型號,n=0~256。0~7中斷類型號做為內(nèi)部中斷不可屏蔽中斷的類型號。8~0FH做為外部硬中斷。內(nèi)部中斷(1)除法溢出中斷(2)溢出中斷(3)單步中斷第55頁,課件共63頁,創(chuàng)作于2023年2月二、中斷矢量表
1.中斷矢量表結(jié)構(gòu)與功能中斷矢量表存256個中斷處理程序入口地址的表,共占用1024個字節(jié),位于物理(0段)地址OOO0OH-003FFH。每個入口地址占四個字節(jié),高兩個字節(jié)存放中斷處理程序的段地址,低兩個
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年醫(yī)療醫(yī)院科技成果轉(zhuǎn)化服務(wù)合同
- 2026年農(nóng)業(yè)量子計算農(nóng)業(yè)合同
- 2025年環(huán)境監(jiān)測技術(shù)在可持續(xù)發(fā)展中的應(yīng)用可行性研究報告
- 2025年新型文化產(chǎn)業(yè)發(fā)展項目可行性研究報告
- 2025年智能家居產(chǎn)品開發(fā)與市場拓展可行性研究報告
- 2025年數(shù)據(jù)安全保護技術(shù)實施可行性研究報告
- 海蜇收購合同范本
- 物流合同協(xié)議范本
- 臨時租憑協(xié)議書
- 中草藥訂協(xié)議書
- 鋼筋棚拆除合同范本
- 斷絕親子協(xié)議書
- 【MOOC答案】《光纖光學(xué)》(華中科技大學(xué))章節(jié)作業(yè)期末慕課答案
- 小學(xué)生班級管理交流課件
- DB21T 3722.7-2025高標(biāo)準(zhǔn)農(nóng)田建設(shè)指南 第7部分:高標(biāo)準(zhǔn)農(nóng)田工程施工質(zhì)量評定規(guī)范
- 近八年寧夏中考數(shù)學(xué)試卷真題及答案2024
- 超星爾雅學(xué)習(xí)通《帶您走進西藏(西藏民族大學(xué))》2025章節(jié)測試附答案
- 超星爾雅學(xué)習(xí)通《科學(xué)計算與MATLAB語言(中南大學(xué))》2025章節(jié)測試附答案
- 綠色簡約風(fēng)王陽明傳知行合一
- 【MOOC】宇宙簡史-南京大學(xué) 中國大學(xué)慕課MOOC答案
- 重精管理培訓(xùn)
評論
0/150
提交評論