計(jì)算機(jī)組成原理 課件 8 匯編語言程序設(shè)計(jì)_第1頁
計(jì)算機(jī)組成原理 課件 8 匯編語言程序設(shè)計(jì)_第2頁
計(jì)算機(jī)組成原理 課件 8 匯編語言程序設(shè)計(jì)_第3頁
計(jì)算機(jī)組成原理 課件 8 匯編語言程序設(shè)計(jì)_第4頁
計(jì)算機(jī)組成原理 課件 8 匯編語言程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第8章匯編語言程序設(shè)計(jì)匯編源程序的一般格式例8-1編寫一個(gè)兩字相加的程序。DSEGSEGMENTDATADB12HSUMDB0DSEGENDS

ESEGSEGMENTDW512DUP(0)ESEGENDSCSEGSEGMENT

ASSUMECS:CSEG,DS:DSEG,ES:ESEGSTART:

MOVAX,DSEG

MOVDS,AX

MOVAX,ESEGMOVES,AX

MOVAL,DATA

ADDAL,16H

MOVSUM,AL

MOVAH,ACHINT21HCSEGENDS

ENDSTART源程序的結(jié)構(gòu)特點(diǎn)(1)匯編語言程序通常由若干段組成,段由偽指令SEGMENT與ENDS定義,各段順序任意,段的數(shù)目按需要確定,原則上不受限制。(2)段由若干語句組成,語句以指令為主體而構(gòu)成。一條語句寫在一行上,書寫時(shí)語句的各部分應(yīng)盡量對齊(3)匯編語言程序中至少要有一個(gè)啟動(dòng)標(biāo)號,作為程序開始執(zhí)行時(shí)目標(biāo)代碼的入口地址。啟動(dòng)標(biāo)號常用START、BEGIN、MAIN等命名。(4)為增加程序的可讀性,可在匯編語言語句“;”后加上注釋。隱藏部分匯編語言語句類型及格式1.匯編語言語句的類型(1)指令語句是可執(zhí)行語句,在匯編中要產(chǎn)生對應(yīng)的目標(biāo)代碼,CPU根據(jù)這些代碼才能執(zhí)行相應(yīng)的操作。(2)偽指令語句是不可執(zhí)行語句,在匯編中不產(chǎn)生目標(biāo)代碼,用于指示匯編程序如何匯編源程序,利用它定義和說明常量和變量的屬性及存儲器單元的分配等。(3)宏指令語句是以一個(gè)宏名定義的一段指令序列,在匯編中凡是出現(xiàn)宏指令語句的地方,都會有相應(yīng)的指令語句序列的目標(biāo)代碼插入。2.語句的格式

[標(biāo)號:]<指令助記符>[操作數(shù)][;注釋]

[符號名]<偽指令助記符>[操作數(shù)][;注釋]隱藏部分段定義偽指令格式:段名SEGMENT定位類型組合類型類別名┇段名ENDS1.段名一個(gè)段開始和結(jié)尾的段名必須一致,否則會出現(xiàn)語法錯(cuò)誤2.定位類型(1)BYTE(2)WORD(3)PARA(4)PAGE3.組合類型(1)NONE(2)PUBLIC(3)COMMON(4)STACK(5)MEMORY(6)AT表達(dá)式4.類別名隱藏部分變量、標(biāo)號與地址表達(dá)式——變量(1)變量變量:是數(shù)據(jù)段或附加數(shù)據(jù)段中一個(gè)數(shù)據(jù)存貯單元的名字,是這個(gè)存儲單元的地址的符號表示??纱硪慌鎯卧氖字?。①變量的屬性段屬性:定義變量所在段的段首址,當(dāng)訪問該變量時(shí)該段首址應(yīng)在某一段寄存器中,即為CPU當(dāng)前可訪問段;偏移地址:該變量所占存儲單元到所在段的段首址的字節(jié)距離;類型:類型是指存取該變量中的數(shù)據(jù)所需要的字節(jié)數(shù),變量的類型由定義該變量時(shí)所使用的偽指令確定;隱藏部分匯編源程序的一般格式DSEGSEGMENTDATADB12HSUMDB0DSEGENDS

ESEGSEGMENTDW512DUP(0)ESEGENDSCSEGSEGMENT

ASSUMECS:CSEG,DS:DSEG,ES:ESEGSTART:CSEGENDS

ENDSTART②變量的定義一般在數(shù)據(jù)段或附加數(shù)據(jù)段中使用數(shù)據(jù)定義偽指令DB、DW、DD、DQ和DT來定義格式:[變量名]數(shù)據(jù)定義偽指令表達(dá)式[,…]功能:定義了一變量,并開辟了由變量屬性所決定的一片連續(xù)存儲區(qū),其存儲區(qū)所占字節(jié)數(shù)=表達(dá)式個(gè)數(shù)*變量的類型。變量的類型:存儲單元的大小,由數(shù)據(jù)定義偽指令定義。隱藏部分?jǐn)?shù)據(jù)定義偽指令.BYTE(字節(jié))DB.WORD(字)DW.DWORD(雙字)DD.FWORD(3個(gè)字)DF.QWORD(4個(gè)字)DQ例8-2SUMDW1122

;將1個(gè)字存入變量SUM

NUMDW100*5+88;定義一個(gè)字類型變量NUM,其初值為表達(dá)式的值數(shù)據(jù)定義偽指令思考:數(shù)組、字符串如何表示呢?DATADB11H,33H

;定義包含兩個(gè)元素的字節(jié)變量DATASTR1DB‘COMPUTER’;定義一個(gè)字符串,字符串的首地址為STR1DATADW?,?,?;為DATA預(yù)留6個(gè)存儲單元DATA2DW?;為DATA2分配2個(gè)字節(jié)的空間,初值為任意值DATA3DB20DUP(30H);為DATA3分配20個(gè)字節(jié)的空間,初值均為30HDATA1DB20DUP(?);為DATA1分配20個(gè)字節(jié)的空間,初值為任意值思考:下面幾種形式又作何解釋呢?匯編源程序的一般格式DSEGSEGMENTDATADB12HSUMDB0DSEGENDS

ESEGSEGMENTDW512DUP(0)ESEGENDSCSEGSEGMENT

ASSUMECS:CSEG,DS:DSEG,ES:ESEGSTART:CSEGENDS

ENDSTART例8-2:DB3DUP(‘A’,12H)

‘A’,12H,‘A’,12H,‘A’,12HDB2DUP(‘A’,2DUP(3),‘B’)

‘A’,3,3,‘B’,‘A’,3,3,‘B’數(shù)據(jù)定義偽指令例4-2DATADB11H,33H;定義包含兩個(gè)元素的字節(jié)變量DATANUMDW100*5+88;定義一個(gè)字類型變量NUM,其初值為表達(dá)式的值SUMDQ0011223344556677;將4個(gè)字存入變量SUM。STR1DB‘COMPUTER’;定義一個(gè)字符串,字符串的首地址為STR1STR2DW‘AA’,‘BC’,‘DE’;給兩個(gè)字符組成的字符串分配兩個(gè)字節(jié)存儲單元DATADW?,?,?;為DATA預(yù)留6個(gè)存儲單元DATA1DB20DUP(?);為變量DATA1分配20個(gè)字節(jié)的空間,初值為任意值DATA2DW?;為變量DATA2分配2個(gè)字節(jié)的空間,初值為任意值DATA3DB20DUP(30H);為變量DATA3分配20個(gè)字節(jié)的空間,初值均為30H隱藏部分變量定義中的表達(dá)式,指定了變量的初值:(i)數(shù)值表達(dá)式(ii)ASCII字符串(iii)?變量值不確定(iv)重復(fù)子句:nDUP(表達(dá)式),表示定義了n個(gè)數(shù)據(jù)存儲單元隱藏部分匯編源程序的一般格式DSEGSEGMENTDATADB12HSUMDB0DSEGENDSESEGSEGMENTDW512DUP(0)ESEGENDS

CSEGSEGMENT

ASSUMECS:CSEG,DS:DSEG,ES:ESEGSTART:CSEGENDS

ENDSTART示例2START

PROCFAR…CALLSUBMOVAH,4CHINT21HSTARTENDPCSEGENDS

ENDSTARTSUB

PROCNEARRETSUBENDP示例1段尋址偽指令格式:ASSUME段寄存器名:段名,段寄存器名:段名,……例求從NUM開始的12個(gè)無符號字節(jié)數(shù)的和,結(jié)果放在SUM字單元中。DATASEGMENTNUMDB95H,83H,36H,2DHDB33H,22H,1AH,34HDB62H,45H,75H,49HSUMDW?DATAENDSSTACKSEGMENTDB100DUP(?)STACKENDSCODESEGMENT

ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK

BEGIN:MOVAX,DATAMOVDS,AXMOVES,AXMOVAX,STACKMOVSS,AX

LEASI,NUM

MOVCX,12

XORAX,AX

NEXT:ADDAL[SI]

ADCAH,0

INCSI

LOOPNEXT

MOVSUM,AXHLTCODEENDSENDBEGIN隱藏部分過程定義偽指令格式:過程名PROC[NEAR/FAR]┇[RET] ┇RET

過程名ENDP隱藏部分匯編語言的數(shù)據(jù)與表達(dá)式1.常量數(shù)值常量、字符串常量、符號常量2.變量例4-2用數(shù)據(jù)定義偽指令DB、DW、DD定義變量DATASEGMENTDA1DB12H;定義一個(gè)字節(jié)數(shù)據(jù)DA2DD0FEDCBA90H;定義一個(gè)雙字?jǐn)?shù)據(jù)DA3DW5678H;定義一個(gè)字?jǐn)?shù)據(jù)DATAENDS3.標(biāo)號4.表達(dá)式和運(yùn)算符算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、數(shù)值返回運(yùn)算符、修改屬性運(yùn)算符隱藏部分符號常量的定義:等價(jià)偽指令EQU等號偽指令=●使用:定義后直接引用符號名?!褡⒁猓孩俜柍A坎环峙浯尜A單元,只建立等價(jià)代換關(guān)系,可出現(xiàn)在任何段。②用EQU語句定義的符號常量在該程序中不能再重新賦值,而用“=”定義的符號常量可多次重新賦值,使用時(shí),以最后一次定義的值為準(zhǔn)。隱藏部分例1:DATASEGMENTNUMBEREQU4;COUNT=35TABDW70,80H,-5,NUMBER┇MOVAX,NUMBERMOVSI,COUNTMOVDX,TABCOUNT=10MOVBX,COUNT[ECX]MOVCX,TAB[ECX];注意這兩條指令的區(qū)別●符號常量特點(diǎn):①在匯編期間被代換成相應(yīng)等價(jià)的數(shù)據(jù);②提高程序的可讀性;③便于隨時(shí)修改程序中的參數(shù)隱藏部分符號定義偽指令1.等值語句例4-10等值語句CREQU0DH ;常量TENEQU0AH ;常量AAEQUASCII_TABLE ;變量VAREQUTEN*2+1024 ;數(shù)值表達(dá)式ADREQUES:[BP+DI+5]

;地址表達(dá)式GOTOEQUJMP ;指令助記符2.等號語句例4-11等號語句NUM=488 ;定義NUM等于488NUM=NUM+1 ;定義NUM等于489隱藏部分特殊運(yùn)算符——屬性分離算符格式:屬性分離算符變量或標(biāo)號●功能:屬性分離算符可分離出變量、標(biāo)號的段、偏移地址、類型的屬性值。運(yùn)算結(jié)果為數(shù)值常量。a.取段址算符SEG●格式:SEG<變量或標(biāo)號>●功能:分離出其后變量或標(biāo)號的段首址。b.取偏移算符OFFSE●格式:OFFSET<變量>●功能:分離出其后變量或標(biāo)號的偏移地址。隱藏部分程序設(shè)計(jì)基本方法順序結(jié)構(gòu)程序設(shè)計(jì)分支結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)程序設(shè)計(jì)舉例程序設(shè)計(jì)概述1.程序設(shè)計(jì)的步驟(1)分析問題(2)建立數(shù)學(xué)模型(3)確定算法。(4)繪制流程圖(5)分配內(nèi)存空間(6)編制程序(7)上機(jī)調(diào)試(8)試運(yùn)行和分析結(jié)果(9)整理資料投入運(yùn)行2.返回DOS的方法MOVAH,4CH;功能號送AHINT21H;返回DOS3.程序的基本結(jié)構(gòu)順序結(jié)構(gòu),分支結(jié)構(gòu),循環(huán)結(jié)構(gòu)隱藏部分例題1(順序結(jié)構(gòu))算術(shù)運(yùn)算指令的綜合應(yīng)用:試計(jì)算(W-(X*Y+Z-5000))/X設(shè)W,X,Y,Z均為16位的帶符號數(shù),分別存放在數(shù)據(jù)段的W,X,Y,Z變量單元中。要求將計(jì)算結(jié)果的商存入AX,余數(shù)存入DX,或者存放到RESULT單元開始的數(shù)據(jù)區(qū)中。DATASEGMENTWDW5000XDW200YDW-250ZDW20000RESULTDW2DUP(?)DATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATAMOVAX,DATAMOVDS,AXMOVAX,XIMULYMOVCX,DXMOVBX,AX

MOVAX,ZCWDADDBX,AXADCCX,DXSUBBX,5000SBBCX,0MOVAX,WCWDSUBAX,BXSBBDX,CXIDIVXMOVRESULT,AXMOVRESULT+2,DX

MOVAH,4CHINT21H

MAINENDPCODEENDSENDMAIN

分支結(jié)構(gòu)程序設(shè)計(jì)圖

兩路分支結(jié)構(gòu)圖T程序段1條件F程序段2隱藏部分分支結(jié)構(gòu)程序設(shè)計(jì)例8-3用比較指令和條件轉(zhuǎn)移指令實(shí)現(xiàn)兩路分支的程序段?!璏OVAX,M;假定M和N為有符號數(shù)MOVBX,NCMPAX,BX

;比較M和N的大小,影響標(biāo)志位,準(zhǔn)備條件JGNEXT

;M>N時(shí)轉(zhuǎn)移,注意若M、N為無符號數(shù)時(shí)用JA指令……;分支程序2JMPDONENEXT:……;分支程序1……DONE:RET例題2(分支結(jié)構(gòu))

比較以存儲變量D1和D2表示的兩個(gè)有符號字?jǐn)?shù)據(jù)的大小,將其中較大的數(shù)據(jù)放在BX寄存器中。DATASEGMENT

D1DW-123HD2DW-120HDATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATAMOVAX,DATAMOVDS,AX

MOVBX,D1CMPBX,D2JGENEXTMOVBX,D2Next:MOVAH,4CHINT21H

MAINENDPCODEENDSENDMAIN

分支結(jié)構(gòu)示例(動(dòng)畫)示例循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)體圖

先判斷后執(zhí)行循環(huán)結(jié)構(gòu)循環(huán)初始化NY循環(huán)控制部分循環(huán)初始化循環(huán)體N循環(huán)控制部分Y圖

先執(zhí)行后判斷循環(huán)結(jié)構(gòu)隱藏部分例題3(循環(huán)結(jié)構(gòu))

單重循環(huán)。找出從無符號字?jǐn)?shù)據(jù)存儲變量BUF開始存放的N個(gè)數(shù)中的最小數(shù)放在AX中。示例DATASEGMENTVARDB5,7,19H,23H,0A0HNEQU$-VARDATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATAMOVAX,DATAMOVDS,AX

MOVCX,

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論