版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第第 5 章章 程序設(shè)計及匯編語言程序設(shè)計及匯編語言內(nèi)容安排內(nèi)容安排一一. 程序設(shè)計步驟程序設(shè)計步驟二二. 程序設(shè)計程序設(shè)計三三. 匯編語言及匯編程序匯編語言及匯編程序四四. 匯編語言源程序格式及實例匯編語言源程序格式及實例五五. 上機操作上機操作5.1 程序設(shè)計步驟程序設(shè)計步驟(1分析問題分析問題(2建立數(shù)學(xué)模型建立數(shù)學(xué)模型(3確定算法確定算法(4繪制程序流程圖繪制程序流程圖(5內(nèi)存空間分配內(nèi)存空間分配(6編制程序與靜態(tài)檢查編制程序與靜態(tài)檢查(7程序調(diào)試實驗)程序調(diào)試實驗)開場開場完畢完畢初始化初始化處置處置處置處置分支分支是是否否5.2 程序設(shè)計程序設(shè)計特點:計算機執(zhí)行程序的方式是特點:計
2、算機執(zhí)行程序的方式是“從頭到尾逐條執(zhí)行從頭到尾逐條執(zhí)行指令語句,直至程序結(jié)束指令語句,直至程序結(jié)束1. 簡單程序簡單程序例例5-1:用數(shù)據(jù)運算指令,對兩個:用數(shù)據(jù)運算指令,對兩個16位數(shù)做加法位數(shù)做加法運算。這兩個數(shù)從地址運算。這兩個數(shù)從地址10050H開始連續(xù)存放,開始連續(xù)存放,低位在小地址一端,結(jié)果存放在這兩個數(shù)之后低位在小地址一端,結(jié)果存放在這兩個數(shù)之后 流程圖:流程圖:開場開場暫停暫停AX 10054H和和10055H單元單元被加數(shù)被加數(shù)+加數(shù)加數(shù) AX初始化初始化加數(shù)加數(shù) AXMOVAX,1000HMOV DS,AX;DS1000HMOVSI,50H;被加數(shù)指針;被加數(shù)指針SI50H
3、MOVDI,52H;加數(shù)指針;加數(shù)指針DI52HMOVBX,54H;和的指針;和的指針BX54HCLC;清;清CFXORAX,AX;清;清AXMOVAX,SI;取一個字到;取一個字到AXADCAX,DI;AXAXDI+CFMOVBX,AX;存一個字到;存一個字到BXHLT;暫停;暫停程序:程序:例例5-2:將內(nèi)存:將內(nèi)存10050H單元的內(nèi)容單元的內(nèi)容拆成兩段,每段拆成兩段,每段4位,位,并將它們分別存入并將它們分別存入內(nèi)存內(nèi)存10051H和和10052H單元。即單元。即10050H單元中的低單元中的低4位放入位放入10051H的的低低4位,位,10050H單單元中的高元中的高4位放入位放入1
4、0052H的低的低4位,位,而而10051H和和10052H的高的高4位均為零位均為零 流程圖:流程圖:開場開場暫停暫停邏輯右移得高邏輯右移得高4位,存入內(nèi)存位,存入內(nèi)存10052H單元單元用邏輯與指令將該數(shù)用邏輯與指令將該數(shù)“與與0FH取得低四位,存入內(nèi)存取得低四位,存入內(nèi)存10051H單元單元初始化初始化用間址方法取數(shù)用間址方法取數(shù) AL再取出原始數(shù)再取出原始數(shù) AL程序:程序: MOV AX,1000H MOV DS,AX;DS1000H MOV SI,50H;需拆字節(jié)的指針;需拆字節(jié)的指針SI=50H MOV AL,SI;取一個字節(jié)到;取一個字節(jié)到AL中中 ANDAL,0FH;把;把A
5、L的前的前4位清位清0 MOVSI+1,AL;把得到的后;把得到的后4位放到位放到10051H單元單元 MOVAL,SI;再取出需拆字節(jié)放到;再取出需拆字節(jié)放到AL中中 MOVCL,4 SHRAL,CL;邏輯右移四次,前;邏輯右移四次,前4位補位補0 MOVSI+2,AL;放入;放入10052H單元單元 HLT2. 分支程序分支程序 利用條件轉(zhuǎn)移指令,使程序執(zhí)行到某一指令后,根據(jù)利用條件轉(zhuǎn)移指令,使程序執(zhí)行到某一指令后,根據(jù)條件即上面運算的情況是否滿足,改變程序執(zhí)行條件即上面運算的情況是否滿足,改變程序執(zhí)行的次序的次序特點:先用比較指令、數(shù)據(jù)操作、位測指令等改變標(biāo)志特點:先用比較指令、數(shù)據(jù)操作
6、、位測指令等改變標(biāo)志寄存器各個標(biāo)志位,然后用條件轉(zhuǎn)移指令進行分支寄存器各個標(biāo)志位,然后用條件轉(zhuǎn)移指令進行分支例例5-3:求:求AX累加器和累加器和BX寄存器中兩個無符號數(shù)寄存器中兩個無符號數(shù)之差的絕對值,結(jié)果放在內(nèi)存之差的絕對值,結(jié)果放在內(nèi)存2800H單元中單元中 流程圖:流程圖:開始初始化:清除CFAX-BXAXAX-BX0?AX內(nèi)存(2800H)和(2801H)單元BX-AXBXBX內(nèi)存(2800H)和(2801H)單元暫停是否程序:程序: CLC;清除;清除CF MOV CX,AX SUBAX,BX;AXAXBX,影響影響CF JCAA ;CF1轉(zhuǎn)轉(zhuǎn)AA去執(zhí)行即去執(zhí)行即AXBX時轉(zhuǎn)移)時
7、轉(zhuǎn)移) MOV DI,2800H;結(jié)果指針;結(jié)果指針DI2800H MOV DI,AX;結(jié)果送到;結(jié)果送到2800H和和2801H單元單元 JMPLP;暫停;暫停AA:SUBBX, CX ;BXBXCX MOVDI,2800H MOVDI,BXLP: HLT例例5-4:編制程序:編制程序 從外設(shè)從外設(shè)71H端端口中取一個數(shù)口中取一個數(shù)M,判斷其值,判斷其值是否在是否在10和和20之間,即之間,即10M20。如。如果果M20,則,則送送0FFH給外給外設(shè)設(shè)73H端口;端口;如果如果M10,則送則送00H給外給外設(shè)設(shè)73H;如果;如果10M20,則,則送送88H給外設(shè)給外設(shè)73H 開場開場暫停暫停
8、輸出輸出BL值到值到73號外設(shè)去號外設(shè)去輸入輸入71號外號外設(shè)的值設(shè)的值 AL令令BL=88H令令BL=00H令令BL=0FFHAL值值 20AL值值 10是是是是否否否否LP1LP2START: IN AL,71H;將;將71H端口的字節(jié)讀入端口的字節(jié)讀入AL CLC;清除;清除CF CMP AL,10;ALAL10 JC Lw10;小于;小于10轉(zhuǎn)轉(zhuǎn)LP1 CMP AL,20;ALAL20 JC L10to20 ;10AL1,并且放在,并且放在內(nèi)存內(nèi)存2019H單單元中,而數(shù)據(jù)元中,而數(shù)據(jù)塊本身是從塊本身是從2019H單元開單元開始存放的,最始存放的,最后,把找出的后,把找出的最大值放到最
9、大值放到2000H單元中,單元中,假設(shè)這段數(shù)據(jù)假設(shè)這段數(shù)據(jù)塊中的數(shù)都是塊中的數(shù)都是無符號的無符號的8位位數(shù),請設(shè)計成數(shù),請設(shè)計成一段可調(diào)用的一段可調(diào)用的子程序子程序 開場開場暫停暫停SI=2019H,CL=SI00 AL , SI SI+1修改指針修改指針SI SI+1是是否否CX CX-1CX=0AL SIAL值值 SIAL 2000H是是否否LP程序:程序:MAXSub:PUSHFPUSH AXPUSH CXPUSH SIMOV SI,2019HMOV CL,SIINC SIMOV AL,00HMOV CH,00HLP:CLCCMP AL,SIJNCAAMOV AL,SIAA:INC SI
10、LOOPLPMOV 2000H,ALPOPSIPOPCXPOPAXPOPFRET5.3 匯編語言及匯編程序匯編語言及匯編程序匯編語言易識別,但機器不能直接執(zhí)行;機器語言相反匯編語言易識別,但機器不能直接執(zhí)行;機器語言相反1. 匯編語言與機器語言匯編語言與機器語言匯編語言匯編語言源程序源程序目標(biāo)程序目標(biāo)程序匯編程序匯編程序匯編匯編匯編語言程序設(shè)計的特點:匯編語言程序設(shè)計的特點: 匯編語言是面向機器的語言,匯編語言是面向機器的語言,CPU不同的機器有不同不同的機器有不同的匯編語言的匯編語言 可以充分利用機器的硬件功能和結(jié)構(gòu)特點可以充分利用機器的硬件功能和結(jié)構(gòu)特點 可有效地加快程序的執(zhí)行速度,減少目
11、標(biāo)程序所占用可有效地加快程序的執(zhí)行速度,減少目標(biāo)程序所占用的存儲空間的存儲空間 可以對輸入可以對輸入/輸出端口進行控制,實時性能好輸出端口進行控制,實時性能好 匯編語言程序移植性、通用性、可讀性差匯編語言程序移植性、通用性、可讀性差匯編語言的指令匯編語言的指令機器語言的指令機器語言的指令一一對應(yīng)一一對應(yīng)匯編程序:匯編程序:ASM-86/MASM-862. 偽指令語句偽指令語句特點:不同于指令語句,偽指令語句又稱命令語句特點:不同于指令語句,偽指令語句又稱命令語句中的偽指令本身不產(chǎn)生對應(yīng)的機器目標(biāo)代碼中的偽指令本身不產(chǎn)生對應(yīng)的機器目標(biāo)代碼功能:僅僅是告訴匯編程序,對后面的指令語句和偽指功能:僅僅
12、是告訴匯編程序,對后面的指令語句和偽指令語句的操作數(shù)應(yīng)該如何產(chǎn)生機器目標(biāo)代碼令語句的操作數(shù)應(yīng)該如何產(chǎn)生機器目標(biāo)代碼偽指令語句格式:偽指令語句格式:標(biāo)號:指令助記符操作數(shù);注釋,偽指令3. 偽指令偽指令(1符號定義偽指令賦值語句)符號定義偽指令賦值語句) 格式:格式: EQU 功能:把表達式的值賦給符號名功能:把表達式的值賦給符號名偽指令偽指令機器指令機器指令一一對應(yīng)一一對應(yīng)特點:偽指令不是由特點:偽指令不是由86系列系列CPU執(zhí)行,而是由執(zhí)行,而是由MASM-86識別,并完成相應(yīng)的功能識別,并完成相應(yīng)的功能注意:用注意:用EQU語句賦值的符號名不能被重新賦值語句賦值的符號名不能被重新賦值(2內(nèi)
13、存數(shù)據(jù)定義偽指令內(nèi)存數(shù)據(jù)定義偽指令格式:格式:名字名字 DB 名字名字 DW 功能:表達式或項表中的每一項是一個功能:表達式或項表中的每一項是一個/兩個字兩個字節(jié)數(shù),他們從符號名地址開始按字節(jié)連續(xù)存放,節(jié)數(shù),他們從符號名地址開始按字節(jié)連續(xù)存放,直到表中數(shù)據(jù)項結(jié)束直到表中數(shù)據(jù)項結(jié)束如:如:D1 DB 12H, 12H 12H D1 DB 3 DUP (12H) MOV AX, D1注意:注意: 表達式或數(shù)據(jù)項表多于一項時,項與項之間用表達式或數(shù)據(jù)項表多于一項時,項與項之間用逗號逗號“,”或空格分隔或空格分隔 表達式或數(shù)據(jù)項重復(fù)書寫時,可用重復(fù)格式表達式或數(shù)據(jù)項重復(fù)書寫時,可用重復(fù)格式DUP 需考
14、慮符號名的類型一致需考慮符號名的類型一致(3段定義偽指令段定義偽指令格式:格式: SEGMENT 定位方式定位方式連接方式連接方式類別類別名名 ENDS功能:給存儲器在邏輯上分段,它為程序的匯編和連接說功能:給存儲器在邏輯上分段,它為程序的匯編和連接說明了段名、分段的各種屬性以及分段的開始和結(jié)束明了段名、分段的各種屬性以及分段的開始和結(jié)束定位方式:又稱定位類型,指定段的起始地址邊界定位方式:又稱定位類型,指定段的起始地址邊界PAGEPARAWORDBYTE指定起始地址的低指定起始地址的低8 8位是位是0 0指定起始地址的低指定起始地址的低4 4位是位是0 0指定起始地址的最低位是指定起始地址的
15、最低位是0 0指定起始地址是任意值指定起始地址是任意值連接方式:又稱組合類型,告訴連接程序本段與其他段連接方式:又稱組合類型,告訴連接程序本段與其他段可按某種方式連接可按某種方式連接PUBLICSTACK空缺空缺NONE)COMMONMEMORYAT 表達式表達式把本段與其他同名同類型的段連接起來,共用一個把本段與其他同名同類型的段連接起來,共用一個段的起點地址,形成一個物理段段的起點地址,形成一個物理段表示本段是堆棧段,連接方式同表示本段是堆棧段,連接方式同PUBLIC表示本段不與任何段連接,是系統(tǒng)隱含連接方式表示本段不與任何段連接,是系統(tǒng)隱含連接方式表示本段與同名同類型的段共用同一段的起點
16、地址,表示本段與同名同類型的段共用同一段的起點地址,即同名同類段相重疊,段的長度是最長段的長度即同名同類段相重疊,段的長度是最長段的長度表示本段在連接時定位在所有段之上,即高地址處表示本段在連接時定位在所有段之上,即高地址處表示本段定位在表達式值指定的段地址處表示本段定位在表達式值指定的段地址處類別名:需用單引號括起來,凡是類型名相同的段在連類別名:需用單引號括起來,凡是類型名相同的段在連接時均按先后順序連接起來接時均按先后順序連接起來(4段寄存器說明偽指令段寄存器說明偽指令格式:格式:ASSUME 段寄存器:段定義名段寄存器:段定義名1 ,段寄存器:,段寄存器:段定義名段定義名2, 功能:告
17、訴匯編程序在匯編時,段寄存器功能:告訴匯編程序在匯編時,段寄存器CS:DS:SS:和和ES:應(yīng)具有的符號段基址,以便匯編指令時確定段:應(yīng)具有的符號段基址,以便匯編指令時確定段和建立錯誤信息。但是段寄存器實際值和建立錯誤信息。但是段寄存器實際值CS除外還除外還要有傳送指令在執(zhí)行程序時賦值要有傳送指令在執(zhí)行程序時賦值(5模塊開始偽指令模塊開始偽指令格式:格式:NAME 模塊名模塊名功能:指明程序模塊的開始,并指出模塊名,一般取源功能:指明程序模塊的開始,并指出模塊名,一般取源程序文件名為模塊名程序文件名為模塊名(6過程子程序定義偽指令過程子程序定義偽指令格式:格式: PROC NEAR (或(或F
18、AR) ENDP功能:定義過程是為了實現(xiàn)子程序調(diào)用而設(shè)的功能:定義過程是為了實現(xiàn)子程序調(diào)用而設(shè)的調(diào)用格式:調(diào)用格式:CALL 過程由過程由RET指令返回指令返回(7模塊結(jié)束偽指令模塊結(jié)束偽指令格式:格式:END 啟動標(biāo)號或過程名啟動標(biāo)號或過程名功能:告訴匯編程序源文件結(jié)束,并給出執(zhí)行程序的入口位置功能:告訴匯編程序源文件結(jié)束,并給出執(zhí)行程序的入口位置(8定位偽指令定位偽指令格式:格式:ORG 功能:把以下語句定義的內(nèi)存數(shù)據(jù)或程序,從表達式指功能:把以下語句定義的內(nèi)存數(shù)據(jù)或程序,從表達式指定的起點偏移地址開始連續(xù)存放,直至遇到新的定的起點偏移地址開始連續(xù)存放,直至遇到新的ORG指令。表達式值是一
19、個無符號數(shù)指令。表達式值是一個無符號數(shù)(9列表偽指令列表偽指令格式:格式:PAGE 行數(shù),行字數(shù)行數(shù),行字數(shù)功能:為列表文件定義每頁行數(shù)功能:為列表文件定義每頁行數(shù)10255和每行字符和每行字符數(shù)數(shù)60132),默認值是),默認值是66行,行,80列列5.4 匯編語言源程序格式及實例匯編語言源程序格式及實例DATA SEGMENT 存放數(shù)據(jù)項的數(shù)據(jù)段存放數(shù)據(jù)項的數(shù)據(jù)段DATA ENDSEXTRA SEGMENT 存放數(shù)據(jù)項的附加段存放數(shù)據(jù)項的附加段EXTRA ENDSTACK1 SEGMENT PARA STAC 作堆棧用的堆棧段作堆棧用的堆棧段STACK1 ENDS(1匯編語言源程序基本格式
20、匯編語言源程序基本格式COSEG SEGMENT ASSUME CS :COSEG , DS : DATA ASSUME SS : STACK1, ES: EXTRABEING : MOV AX ,DATA MOV DS ,AX 存放指令序列存放指令序列COSEG ENDS END BEING注意:排列的先后順序可以是任意的注意:排列的先后順序可以是任意的 例例5-8:從鍵盤上輸入任意一個:從鍵盤上輸入任意一個1位十進制數(shù)位十進制數(shù)09),用移位指令乘),用移位指令乘10,并將結(jié)果顯示出,并將結(jié)果顯示出來來 (2實例實例程序:程序:NAME EX1PAGE 50,70DAT SEGMENT P
21、ARA DAT BUFF DB 4 DUP(?)DAT ENDSSTAC SEGMENT PARA STACK STA STA1 DB 100 DUP(?)STAC ENDSCODE SEGMENT PARA CODE ASSUME CS: CODE, DS: DAT ASSUME SS: STAC, ES: DATSTART PROC FAR PUSH DS XOR AX, AX PUSH AX MOV AX, DAT MOV DS, AX LEA SI, BUFF ;建立緩沖區(qū)首址指針;建立緩沖區(qū)首址指針 CALL P1 ;調(diào)鍵盤輸入子程序;調(diào)鍵盤輸入子程序 CALL P2 ;調(diào)乘;調(diào)乘1
22、0子程序子程序 CALL P3 ;調(diào)顯示子程序;調(diào)顯示子程序 RET;返回;返回DOS;設(shè)置;設(shè)置DS值值P1 PROC ;鍵盤輸入子程序;鍵盤輸入子程序RE: MOV AH, 1 INT 21H CMP AL, 0 JC RE CMP AL, A JNC RE AND AL, 0FH MOV SI, AL MOV DL, 0DH MOV AH, 2 INT 21H MOV DL, 0AH MOV AH, 02H INT 21H RETP1 ENDP;從鍵盤輸入一個數(shù)并顯示;從鍵盤輸入一個數(shù)并顯示;判數(shù)據(jù)輸入合法否?若不合法,重新輸入;判數(shù)據(jù)輸入合法否?若不合法,重新輸入;將輸入數(shù)據(jù)轉(zhuǎn)換為;將
23、輸入數(shù)據(jù)轉(zhuǎn)換為BCD碼存緩沖區(qū)碼存緩沖區(qū);回車換行符送顯示;回車換行符送顯示P2 PROC ;乘;乘10子程序子程序 MOV AL, SI ;從緩沖區(qū)取數(shù);從緩沖區(qū)取數(shù) SHL AL, 1 MOV BL, AL MOV CL, 2 SHL AL, CL ADD AL, BL MOV AH, 0 MOV BL, 10 DIV BL ADD AH, 30H ADD AL, 30H MOV SI, AL MOV SI+1, AH RET P2 ENDP;乘;乘10;將積轉(zhuǎn)換成;將積轉(zhuǎn)換成ASC碼存緩沖區(qū)碼存緩沖區(qū) P3 PROC ;顯示子程序;顯示子程序 MOV DL, SI MOV AH, 2 INT 21H MOV DL, SI+1 MOV AH, 2 INT 21H RETP3 ENDPCODE ENDSEND START5.5 上機操作上機操作編輯程序編輯程序 .ASMMASM .OBJ LINK .EXE匯編語言上機過程:匯編語言上機過程:開機進行系統(tǒng)選擇開機進行系統(tǒng)選擇DOS進入進入DOS環(huán)境環(huán)
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版翡翠手鐲授權(quán)合同范本3篇
- 中小學(xué)校長職業(yè)聘用協(xié)議示例(2024版)版B版
- 2024版勞動合同烏魯木齊
- 個人對個人汽車租賃合同樣本2024版B版
- 西華師范大學(xué)《工程地質(zhì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五版城市公交出租車服務(wù)承包管理合同3篇
- 無錫學(xué)院《水聲學(xué)原理》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024版建筑工程保險條款標(biāo)準(zhǔn)協(xié)議樣本版B版
- 二零二五版合同能源服務(wù)與節(jié)能技術(shù)研發(fā)合作協(xié)議3篇
- 二零二五年酒店客房用品綠色包裝設(shè)計采購合同2篇
- 《血管活性藥物靜脈輸注護理》團體標(biāo)準(zhǔn)解讀
- GB/T 3324-2024木家具通用技術(shù)條件
- NGS二代測序培訓(xùn)
- 《材料合成與制備技術(shù)》課程教學(xué)大綱(材料化學(xué)專業(yè))
- 小紅書食用農(nóng)產(chǎn)品承諾書示例
- 釘釘OA辦公系統(tǒng)操作流程培訓(xùn)
- 新生兒科年度護理質(zhì)控總結(jié)
- GB/T 15934-2024電器附件電線組件和互連電線組件
- 《工貿(mào)企業(yè)有限空間作業(yè)安全規(guī)定》知識培訓(xùn)
- 高層次人才座談會發(fā)言稿
- 垃圾清運公司管理制度(人員、車輛、質(zhì)量監(jiān)督、會計管理制度)
評論
0/150
提交評論