微機原理與應用08 MASM_第1頁
微機原理與應用08 MASM_第2頁
微機原理與應用08 MASM_第3頁
微機原理與應用08 MASM_第4頁
微機原理與應用08 MASM_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

微機原理與應用四川化工職業(yè)技術學院信息工程系課程資料目標知識目標掌握匯編語言程序編寫的基本方法。專業(yè)能力目標能設計簡單匯編程序;掌握順序結構、分支結構、循環(huán)結構。方法能力目標有自學能力、獲取新工藝、新技術的能力;利用網絡、各種資料獲取信息的能力;自我約束、身心健康與管理能力;制定工作計劃、評價工作結果的能力。社會能力目標交流、合作能力;決策和執(zhí)行能力;語言、文字表達能力;社會責任心和環(huán)境保護意識;尊紀守法、良好職業(yè)道德和敬業(yè)精神。匯編語言程序1.匯編語言的基本概念指令MOVAX,1234H對應的機器代碼B83412。使用助記符號來表示二進制格式的指令代碼和變量地址的指令稱為符號指令。匯編語言程序運行之前要將其轉換成機器代碼,轉換的過程是由編譯程序完成。匯編語言程序2.匯編語言源程序的格式匯編語言源程序采用分段式結構,一個匯編語言源程序由若干個邏輯段組成。每個邏輯段以SEGMENT語句開始,以ENDS語句結束。整個源程序以END語句結束(表示結束匯編)。簡單的匯編語言源程序DATASEGMENT;定義一個名字為DATA的段DATDB1,2,0;在DATA段內定義3字節(jié)數(shù)據DATAENDS

;DATA段結束;---------------------------------------------------------STACK

SEGMENTPARASTACK;定義名字為STACK的堆棧段DW20DUP(0);堆棧段大小為20個字STACKENDS

;堆棧段結束;---------------------------------------------------------CODESEGMENT;定義一個名為CODE的程序代碼段ASSUMECS:CODE,DS:DATA,SS:STACKSTART:

MOVAX,DATAMOVDS,AX;給DS賦數(shù)據段初值MOVAL,DATADDAL,DAT+1;前兩個數(shù)據相加

MOVDAT+2,AL

;和存入第三個數(shù)據的位置MOVAH,4CHINT21H

;使用系統(tǒng)調用返回操作系統(tǒng)CODEENDS

;代碼段結束;----------------------------------------------------------ENDSTART;源程序結束,入口地址為BEGIN程序是計算機命令的有序集合,用計算機求解某些問題時往往需要編制程序,其設計步驟歸納如下:(1)分析問題(2)建立數(shù)學模型(3)確定算法(4)繪制程序流程圖(5)內存空間分配(6)編制程序與靜態(tài)檢查(7)程序調試程序設計步驟程序的基本結構及基本程序設計順序結構與簡單程序設計條件結構與分支程序設計循環(huán)結構與循環(huán)程序設計匯編語言程序設計方法1.簡單程序設計簡單程序,又稱為順序程序。這種程序的形式最簡單,計算機執(zhí)行程序的方式是“從頭到尾”,逐條執(zhí)行指令語句,直到程序結束,這是最基本的形式,任何程序都離不開這種形式。在匯編語言程序中簡單程序主要由數(shù)據傳送指令、算術運算指令和邏輯運算指令組合而成?!纠烤幊逃嬎鉠=(X2-3Y)/2DATASEGMENTXDB25YDB32ZDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,XMULALMOVBL,YADDBL,BLADDBL,YSUBAX,BXSHRAX,1MOVZ,AXMOVAH,4CHINT21HCODEENDSENDSTART計算X*X計算3*Y計算=(X2-3Y)/2→Z開始結束數(shù)據段代碼段【例】編程計算Z=(X2-3Y)/2【例】:存儲器單元XYZ中存放了一個兩位的BCD碼數(shù),試將其拆開,其中十位送AL低位,個位送BL低位。

開始結束95→BLBL→ALAL高4位移到低位BL高4位清零【例】:存儲器單元XYZ中存放了一個兩位的BCD碼數(shù),試將其拆開,其中十位送AL低位,個位送BL低位。

參考程序:DATASEGMENTXYZDB95HDATAENDSSTACKSEGMENTSTACKDB100DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK

START:MOVAX,DATAMOVDS,AX

MOVBL,XYZMOVAL,BLANDBL,0FHMOVCL,4SHRAL,CLMOVAH,4CHINT21HCODEENDSENDSTART數(shù)據段定義XYZ堆棧段設定堆棧范圍代碼段放置主程序開始結束95→BLBL→ALAL高4位移到低位BL高4位清零順序結構【例】

對兩個4位十進制數(shù)進行求和運算,十進制數(shù)用BCD碼表示(1234+5678)。DATASEGMENTDATlDB12H,34HDAT2DB56H,78HSUMDB?,?DATAENDSSTACKSEGMENTDW20DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAL,DAT1+1ADDAL,DAT2+1DAAMOVSUM+1,ALMOVAL,DAT1ADCAL,DAT2DAAMOVSUM,ALMOVAH,4CHINT21H

CODEENDSENDSTART解:根據題意,在程序的數(shù)據段放置BCD碼形式的十進制數(shù)。在計算中考慮到多位運算,高位使用帶進位加法指令,并注意進行十進制加法調整?!纠?/p>

對兩個4位十進制數(shù)進行求和運算,十進制數(shù)用BCD碼表示(1234+5678)。指令A指令B在順序結構中每條指令僅被執(zhí)行一次。開始結束順序結構小結順序結構小結【思考題】將16位無符號數(shù)X加Y的結果存放到地址3000H開始的單元。開始結束X→AXAX+Y→AXBL加進位位BL清零傳送【分析】16位無符號數(shù)X加Y,可能產生進位,存儲單元需要至少3個單元?!舅伎碱}】將16位無符號數(shù)X加Y的結果存放到地址3000H開始的單元。順序結構【例】試編制匯編語言程序,并按公式Z=((X+Y)*8-X)/4計算Z值,并將結果保存在RESULT中。分析:按題意,本題為典型的順序結構。在已知X、Y的情況下,只需按公式計算Z值即可,故在數(shù)據段設定了X、Y的值?!纠吭嚲幹茀R編語言程序,并按公式Z=((X+Y)*8-X)/4計算Z值,并將結果保存在RESULT中。分支程序根據條件是真或假決定執(zhí)行與否判斷的條件是各種指令,如CMP、TEST等執(zhí)行后形成的狀態(tài)標志轉移指令JC和JMP可以實現(xiàn)分支控制分支結構有單分支結構雙分支結構多分支結構分支程序設計分支程序設計的結構形式(a)雙分支(b)單分支(c)多分支 CMPAX,0

JGENOTNEG ;條件滿足(AX≥0),轉移NEGAX ;條件不滿足,求補NOTNEG

: MOVRESULT,AX ;條件滿足AX>=0?求補NY簡單分支程序設計【例】計算AX中有符號數(shù)的絕對值。負正不恰當?shù)姆种?/p>

CMPAX,0 JLYESNEG ;條件滿足(AX<0),轉移

JMPNOTNEGYESNEG: NEGAX ;條件滿足,求補NOTNEG: MOVRESULT,AX ;條件不滿足AX<0?求補YNJMP簡單分支程序設計

合適的分支

CMPAX,0JGENOTNEG NEGAX NOTNEG

:MOVRESULT,AX

不恰當?shù)姆种?/p>

CMPAX,0 JLYESNEG

JMPNOTNEGYESNEG: NEGAXNOTNEG: MOVRESULT,AXAX>=0?求補NYAX<0?求補YNJMP簡單分支程序設計

【例】顯示BX的最高位(解1)

SHLBX,1 ;BX最高位移入CF標志

JCONE

;CF=1,即最高位為1,轉移 MOVDL,30H ;CF=0,即最高位為0:DL←30H=‘0’ JMPTWO ;一定要跳過另一個分支體ONE: MOVDL,31H ;DL←31H=‘1’TWO: MOVAH,2 INT21H ;顯示BX.15=1?DL=31HDL=30HYN顯示雙分支程序設計

【例】顯示BX的最高位(解2)

MOVDL,’0’ ;DL←30H=‘0’ SHLBX,1 ;BX最高位移入CF標志

JNCTWO

;CF=0,即最高位為0,轉移

MOVDL,’1’ ;CF=1,即最高位為1:DL←31H=‘1’TWO: MOVAH,2 INT21H ;顯示BX.15=0?DL=‘1’YN顯示DL=‘0’雙分支程序設計雙分支程序設計【例】設有單字節(jié)無符號數(shù)X、Y、Z,若X+Y>255,則求X+Z,否則求X-Z,運算結果放在F1中。分析:因為X,Y均為無符號數(shù),所以當X+Y>255時則會產生進位,即CF=1,所以可以用進位標志來判斷。【例】編程計算下列函數(shù)的值:

1(X>0)

Y=0(X=0)

-1(X<0) X的取值范圍:-128~+127X>=0?YNX→(AL)X=0?Y←-1Y←0Y←1NY多分支程序設計分支程序可以有兩種形式:簡單分支結構和多分支結構。其中簡單分支結構有兩種,相當于高級語言中的IFTHEN和IFTHENELSE結構;多分支結構則相當于高級語言中的DO-CASE結構。條件成立嗎處理1處理2YN分支結構小結【思考題】試判斷寄存器AL中的帶符號數(shù),若是正數(shù)傳送到80H端口,若是負數(shù)傳送到90H端口。 【思考題】試判斷寄存器AL中的帶符號數(shù),若是正數(shù)傳送到80H端口,若是負數(shù)傳送到90H端口。 【分析】判斷一個數(shù)符號位的方法很多,最直接的辦法是和80H比較。 (凡是大于80H的數(shù),最高位一定是1,即是一個負數(shù)。)AL>80HAL→90HAL→80HYN開始結束分支結構循環(huán)結構(1)循環(huán)程序的結構與組成1)循環(huán)的初始化部分。2)循環(huán)工作部分。3)循環(huán)控制部分。4)循環(huán)結束部分。(2)循環(huán)控制方法1)計數(shù)法2)條件控制法(3)多重循環(huán)計數(shù)循環(huán)結構【例】變量BUF中有20個帶符號數(shù),統(tǒng)計其中正數(shù)個數(shù)。開始初始化Bl+1[SI]<0?Cx<>0?ENDYYMOVCX,20MOVBL,0LEASI,BUFA1:CMPBYTEPTR[SI],0JLA2INCBLA2:INCSIDECCXJNZA1條件循環(huán)結構【例】變量BUF是一個以‘$’為結束標志的字符串,統(tǒng)計其字符個數(shù)。開始初始化Al+1[SI]=‘$’?ENDYJMPLEASI,BUFMOVAL,1A1:CMPBYTEPTR[SI],’$’

溫馨提示

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

評論

0/150

提交評論