版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第4章8086匯編語言程序設(shè)計(jì)幾個(gè)概念8086匯編語言的語句8086匯編中的偽指令8086匯編中的運(yùn)算符匯編語言程序設(shè)計(jì)宏定義與宏調(diào)用匯編語言程序設(shè)計(jì)實(shí)例幾個(gè)概念匯編語言匯編語言源程序匯編匯編程序4.18086匯編語言的語句匯編語言由指令性語句和指示性語句組成一、指令性語句格式
[標(biāo)號(hào):]操作碼[操作數(shù)1,][操作數(shù)2];[注釋]二、指示性語句格式
[標(biāo)識(shí)符(名字)]指示符(偽指令)表達(dá)式三、標(biāo)號(hào)和名字(變量)的有關(guān)屬性
屬性有三種:段值、段內(nèi)偏移量和類型。4.28086匯編中的偽指令一、符號(hào)定義語句1、等值語句 格式:符號(hào)名EQU表達(dá)式 例: ⑴PORT EQU1234 ⑵BUFFEQUPORT+58 ⑶MEM EQUDS:[BP+20H] ⑷COUNTEQUCX ⑸ABCEQUAAA2、等號(hào)語句 格式: NUM=34 …… NUM=34+1二、變量定義語句
格式:符號(hào)名DB/DW/DD表達(dá)式1、定義一組數(shù)據(jù) 例1:BUFFDW1234H,0ABCDH,8EH DW–79DH,7B6AH2、定義一串字符 例2:STRDB‘Welcome!’3、定義保留存儲(chǔ)單元 例3:SUMDW?,?4、復(fù)制操作 復(fù)制操作符DUP(Duplication)可預(yù)置重復(fù)的數(shù)值 例4:ALL_ZERODB0,0,0,0,0 用復(fù)制操作可改為: ALL_ZERODB5DUP(0)5、將已定義的地址存入內(nèi)存單元 例5:LITDDCYC… CYC:MOVAX,BX三、段定義語句1、段定義語句格式:段名SEGMENT ……
段名ENDS2、段假設(shè)語句
ASSUME段寄存器名:段名[,…]3、
ORG偽指令與地址計(jì)數(shù)器$
ORG偽指令格式:ORG<表達(dá)式>四、過程定義語句
過程名PROCNEAR/FAR …… RET 過程名ENDP4.38086匯編中的運(yùn)算符一、常用運(yùn)算符1、算術(shù)運(yùn)算符+(加)、-(減)、*(乘)、/(除)、MOD(求余)。2、邏輯運(yùn)算符
AND、OR、XOR、NOT
3、關(guān)系運(yùn)算符
EQ(相等)、NE(不等)、LT(小于)、GT(大于)、 LE(小于等于)、GE(大于等于)。
例:MOVDL,10HLT16
例:ANDAX,555GT222
4、常用解析運(yùn)算符1)SEG操作符 例:MOVAX,SEGBUFF2)OFFSET操作符
例:MOVBX,OFFSETBUFF3)TYPE操作符對(duì)于變量有3種:1
字節(jié)型;2
字型;4
雙字型;對(duì)于標(biāo)號(hào)有2種:-1
NEAR(段內(nèi)),-2
FAR(段間)。
4)LENGTH操作符5)SIZE操作符 SIZE=TYPE×LENGTH
例:BUFDW10DUP(?) MOVCX,LENGTHBUF
MOVCX,10
MOVCX,SIZEBUF
MOVCX,205、綜合運(yùn)算符(合成操作符)1)PTR運(yùn)算符 格式:類型PTR表達(dá)式
例:INCWORDPTR[BX]2)THIS操作符 格式:THIS類型(或?qū)傩?
例:FIRSTEQUTHISBYTE SECONDDW100DUP(?)
4.4匯編語言程序設(shè)計(jì)常用的匯編語言程序框架:
DATA SEGMENT ;定義數(shù)據(jù)段 VAL1DB12H,8EH ;定義變量 …… DATA ENDS ;數(shù)據(jù)段結(jié)束 CODE SEGMENT ;定義代碼段 ASSUMEDS:DATA,CS:CODE ;段屬性說明 START:MOVAX,DATA ;初始化DS MOVDS,AX …… MOVAX,4C00H ;返回DOS INT21H CODEENDS ;代碼段結(jié)束 ENDSTART ;源程序結(jié)束一、匯編語言程序設(shè)計(jì)基本步驟分析問題->繪制流程圖->編寫程序->檢查和調(diào)試二、匯編語言程序的基本結(jié)構(gòu)1、順序結(jié)構(gòu)2、分支結(jié)構(gòu)3、循環(huán)結(jié)構(gòu)4、子程序Callproc1ret4.5宏定義與宏調(diào)用1、宏定義宏指令名MACRO<形式參量表>……
ENDM2、宏調(diào)用 宏指令名實(shí)元表例:MULTYMACROOPR1,OPR2,RESULT ;宏定義 PUSHAX MOVAL,OPR1 MOVAH,OPR2 IMULOPR2 MOVRESULT,AX POPAX ENDM ……DATA SEGMENTXX DB12YY DB34 ZZ DW? …… MULTYXX,YY,ZZ;宏調(diào)用,實(shí)參替代虛參 ……4.6匯編語言程序設(shè)計(jì)實(shí)例1、算術(shù)運(yùn)算例題
例1:在偏移首地址為ARRAY的內(nèi)存儲(chǔ)區(qū),有100個(gè)字型數(shù)據(jù),要求將數(shù)組的每個(gè)元素加1,試編寫匯編語言程序完成該要求。
DATASEGMENT ARRAYDW100DUP(?);定義100個(gè)字型隨機(jī)數(shù) DATAEDNS CODE SEGMENT ASSUMEDS:DATA,CS:CODE ……
LEABX,ARRAY ;設(shè)數(shù)組首地址指針
MOVCX,LENGTHARRAY ;數(shù)組數(shù)據(jù)長AA1:INCWORDPTR[BX] ;指定為字型數(shù)加1
ADDBX,2 ;移動(dòng)地址指針
……
LOOPAA1 ;循環(huán)操作
……例2:有兩個(gè)無符號(hào)字節(jié)型數(shù)組,設(shè)數(shù)組元素個(gè)數(shù)相等,編程將數(shù)組中的對(duì)應(yīng)元素相加,結(jié)果存入另一內(nèi)存區(qū)。
DATA SEGMENT M1 DB20DUP(?) M2 DB20DUP(?) M3 DW20DUP(0) DATAENDS CODESEGMENT ……
……LEASI,M1;設(shè)數(shù)組1的地址指針
LEADI,M2;設(shè)數(shù)組2的地址指針
LEABX,M3;設(shè)結(jié)果區(qū)的地址指針
MOVCX,20AA1:MOVAL,[SI]ADDAL,[DI]MOV[BX],ALADCBYTEPTR[BX+1],0;存結(jié)果的進(jìn)位
INCSIINCDIADDBX,2LOOPAA1 ……2、位操作類例題例1:將寄存器AL中高、低4位交換 …… MOVAL,0ABH MOVCL,4 ROLAL,CL;移出位補(bǔ)充移空位4次 ……例2:將AX中的內(nèi)容按相反順序存入BX中 ……
MOVAX,1234H MOVCX,16 AA1:SHLAX,1;移出的位進(jìn)到CF RCRBX,1;AX中移出的位進(jìn)入BX LOOPAA1 ……
3、跳轉(zhuǎn)類例題
例1:編程將以$結(jié)束的字符串中的小寫字母改為大寫字母。 DATA SEGMENT STR DB‘heLLo,eveRyboBY!’,’$’ DATA ENDS ……
LEABX,STRA1: MOVAL,[BX] CMPAL,‘$’;是$符,則結(jié)束
JEDONE CMPAL,‘a(chǎn)’ JBNEXT;低于,則為大寫字母
CMPAL,’z’ JANEXT;高于,則不是字母
SUBAL,20H;將小寫字母改為大寫
MOV[BX],ALNEXT: INCBX JMPA1 …… 例2:十六進(jìn)制數(shù)到十進(jìn)制數(shù)的轉(zhuǎn)換。 (除10取余法) …… MOVAX,4B6CH MOVCX,0;統(tǒng)計(jì)除法次數(shù)
MOVBX,10;A1:MOVDX,0;被除數(shù)擴(kuò)展為32位
DIVBXPUSHDX;將轉(zhuǎn)換好的數(shù)存入堆棧
INCCXORAX,AX;轉(zhuǎn)換直到商為0
JNZA1……4、表格處理題 例1:編程序?qū)?-9的數(shù)字轉(zhuǎn)換成所要求的密碼 明碼和密碼的映射關(guān)系為: 0
123456789 2
716908345 DATASEGMENT TABLEDB2,7,1,6,9,0,8,3,4,5;密碼表 VAL1DB8,4,1,7,5 ;被加密碼(明碼) VAL2DB5DUP(?) DATAENDS …… ……
MOVSI,OFFSETVAL1MOVDI,OFFSETVAL2MOVCX,5LEABX,TABLE ;表格首地址指針A1:MOVAL,[SI] ;取明碼
XLAT ;轉(zhuǎn)換為密碼
MOV[DI],ALINCSIINCDILOOPA1 ……5、按數(shù)據(jù)大小排序題
例1:編程序?qū)崿F(xiàn),從一串帶符號(hào)字型數(shù)據(jù)中找出最大值。DATASEGMENTBLOCKDW762EH,6A8BH,-664AH,0B945H,-85DHCOUNTEQU($-BLOCK)/2DATAENDS……
LEASI,BLOCKMOVCX,COUNTMOVAX,[SI] ;取第1個(gè)數(shù)
DECCX ;準(zhǔn)備與下個(gè)數(shù)比較AA1:ADDSI,2 CMPAX,[SI] ;與下個(gè)數(shù)比較 JGAA2;前一個(gè)數(shù)大,則保留下次再比 MOVAX,[SI];否則,取后一個(gè)數(shù)下次再比AA2:LOOPAA1 ……4.7DOS功能調(diào)用與子程序設(shè)計(jì)
調(diào)用過程為: ⑴DOS功能調(diào)用號(hào)送AH寄存器; ⑵如果需要,按要求給定輸入?yún)?shù)(有的不需要輸入?yún)?shù)); ⑶寫入中斷指令I(lǐng)NT21H。 調(diào)用結(jié)束,按功能使用其輸出參數(shù)。1、單字符輸入-1號(hào) 功能:從鍵盤輸入1個(gè)字符 輸入?yún)?shù):無 輸出參數(shù):AL=ASCII碼2、單字符輸出-2號(hào)功能:在屏幕上顯示1個(gè)字符(ASCII碼)輸入?yún)?shù):DL=ASCII碼輸出參數(shù):無
MOVAH,1 ;DOS調(diào)用輸入第一個(gè)數(shù)
INT21HMOVBL,AL ;保存輸入的第一個(gè)數(shù)
MOVAH,1INT21HADDAL,BL ;兩個(gè)ASCII碼相加
AAA ;調(diào)整加法結(jié)果為非壓縮BCD數(shù)
MOVDL,ALADDDL,30H ;加法結(jié)果轉(zhuǎn)換成ASCII碼
MOVAH,2 ;DOS調(diào)用輸出到屏幕
INT21H例:從鍵盤輸入兩個(gè)1位十進(jìn)制數(shù),求兩數(shù)之和并在屏幕上顯示結(jié)果。3、多字符輸入-0AH
功能:多個(gè)字符輸入到緩沖區(qū)輸入?yún)?shù):DS:DX=輸入緩沖區(qū)首地址輸出參數(shù):DS:DX=輸入字符串所在緩沖區(qū)地址
4、多字符輸出-9號(hào)功能:多個(gè)字符輸出到屏幕顯示輸入?yún)?shù):DS:DX=輸出字符緩沖區(qū)首地址輸出參數(shù):無
例1:在屏幕上顯示一串字符。
DATASEGMENTBUFFDB‘Howdoyoudo?’,0DH,0AH,’$’DATAENDS
CODESEGMENT ASSUMEDS:DATA,CS:CODESTART:MOVAX,DATA MOVDS,AX LEADX,BUFF MOVAH,9 INT21H ……5、單字符輸入/輸出-6號(hào)6號(hào)DOS功能實(shí)際上是1號(hào)和2號(hào)功能的組合,當(dāng)DL寄存器的內(nèi)容為0FFH時(shí),6號(hào)功能與1號(hào)功能同,即從鍵盤輸入單個(gè)字符;而當(dāng)DL寄存器中放入字符的ASCII值,它就是2號(hào)功能。
6、過程終止-4CH號(hào)該調(diào)用的功能是結(jié)束當(dāng)前程序,并返回調(diào)用它的程序,如在DEBUG狀態(tài)下運(yùn)行,則返回DEBUG;如果在DOS下運(yùn)行,則返回DOS。
在匯編語言程序結(jié)束處放上MOVAX,4C00H和INT21H兩條指令,以利于程序執(zhí)行完畢,返回操作系統(tǒng)控制。
7、子程序設(shè)計(jì)設(shè)計(jì)子程序要提供以下信息:⑴子程序的功能⑵調(diào)用時(shí)需要的輸入?yún)?shù)(入口參數(shù))⑶調(diào)用后提供的輸出參數(shù)(出口參數(shù))⑷子程序中所使用的寄存器(以便調(diào)用前做必要的保護(hù))例1:編寫一子程序,完成一個(gè)2位十六進(jìn)制數(shù)到對(duì)應(yīng)的ASCII碼的轉(zhuǎn)換。
子程序名:CONHA功能:將2位十六進(jìn)制數(shù)轉(zhuǎn)換成對(duì)應(yīng)的ASCCII碼輸入?yún)?shù):AL=待轉(zhuǎn)換的數(shù)輸出參數(shù):BX=轉(zhuǎn)換好的ASCII碼使用寄存器:AL、AH、BX、CL
CONHA PROCFAR MOVAH,AL;保存待轉(zhuǎn)換的數(shù) ANDAL,0FH;處理十六進(jìn)制數(shù)低位 CMPAL,0AH;是16進(jìn)制中的字母嗎? JBASC1;否,轉(zhuǎn)移 ADDAL,07;是,先加7 ASC1: ADDAL,30H;轉(zhuǎn)換為ASCII碼
MOVBL,AL;保存轉(zhuǎn)換好的低位
MOVCL,4;移位控制
SHRAH,CL;將原數(shù)右移,處理高位 CMPAH,0AH;是16進(jìn)制中的字母嗎? JBASC2;否,轉(zhuǎn)移 ADDAH,07;是,先加7 ASC2: ADDAH,30H MOVBH,AH;保存轉(zhuǎn)換好的高位 RETCONHA ENDP例2:用子程序調(diào)用形式,編寫從鍵盤輸入4位16進(jìn)制數(shù)的程序。子程序名:ZH功能:檢查鍵盤輸入錯(cuò)誤,將鍵入值轉(zhuǎn)換成16進(jìn)制數(shù)輸入?yún)?shù):AL輸出參數(shù):AL使用寄存器:BX,CX
CODESEGMENTASSUMECS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年版派遣員工工作協(xié)議范本
- 二零二五年度住宅小區(qū)綠化帶病蟲害防治與維修協(xié)議3篇
- 2024年版離婚協(xié)議書(無子女)
- 2025年度智能客服軟件服務(wù)協(xié)議合同3篇
- 停車場租用協(xié)議書
- 軟件授權(quán)許可使用協(xié)議
- 國際綠色能源項(xiàng)目投資協(xié)議書模板
- 品牌推廣與市場營銷合作協(xié)議
- 個(gè)人和醫(yī)院體檢協(xié)議書
- 2025年分期付款網(wǎng)絡(luò)直播服務(wù)協(xié)議
- 2023-2024學(xué)年人教版高中信息技術(shù)必修二第二章第二節(jié)《 信息系統(tǒng)的開發(fā)過程》教案
- 2024六年級(jí)英語上冊 Module 9 Unit 1 Do you want to visit the UN building教案 外研版(三起)
- 2024年廣東省高中學(xué)業(yè)水平合格性考試語文試卷真題(含答案解析)
- 混凝土股東合同范本
- 人教版九年級(jí)英語知識(shí)點(diǎn)復(fù)習(xí)課件全冊
- 2024年7月國家開放大學(xué)??啤掇k公室管理》期末紙質(zhì)考試試題及答案
- 2024年自然資源部直屬企事業(yè)單位公開招聘考試筆試(高頻重點(diǎn)提升專題訓(xùn)練)共500題附帶答案詳解
- 五金材料采購?fù)稑?biāo)方案(技術(shù)方案)
- 客運(yùn)站春運(yùn)安全行車教育
- 乳腺腔鏡手術(shù)介紹
- 服裝的生產(chǎn)方案
評(píng)論
0/150
提交評(píng)論