8086匯編語言程序設計的基本方法_第1頁
8086匯編語言程序設計的基本方法_第2頁
8086匯編語言程序設計的基本方法_第3頁
8086匯編語言程序設計的基本方法_第4頁
8086匯編語言程序設計的基本方法_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

5.6匯編語言程序設計的基本方法通常,編制一個匯編語言源程序應按如下步驟進行:⑴明確任務,確定算法。⑵繪制流程圖(包括確定內(nèi)存單元和分配寄存器)。⑶根據(jù)流程圖編寫匯編語言程序。⑷上機調(diào)試程序。程序的基本結(jié)構(gòu)有四種:順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)和子程序結(jié)構(gòu)。8086匯編語言程序設計的基本方法全文共23頁,當前為第1頁。5.6.1順序程序設計順序結(jié)構(gòu)也稱線性結(jié)構(gòu),其特點是其中的語句或結(jié)構(gòu)被連續(xù)執(zhí)行。順序程序是最簡單的,也是最基本的一種程序結(jié)構(gòu)。這種結(jié)構(gòu)的程序從開始到結(jié)尾一直是順序執(zhí)行的,中途沒有任何分支。從這種結(jié)構(gòu)的流程圖來看,除了有一個起始框,一個終止框外,就是若干執(zhí)行框,沒有判斷框。指令指針I(yè)P值線形增加,IP=IP+1S1S2S3開始結(jié)束8086匯編語言程序設計的基本方法全文共23頁,當前為第2頁。[例1]求兩個數(shù)的平均值。這兩個數(shù)分別存放在X單元和Y單元中,而平均值放在Z單元中。源程序編制如下:DATASEGMENT X DB8CH Y DB64H;賦予初值

Z DB?;分配存儲空間DATAENDSSTACK SEGMENT DW20HDUP(0);給堆棧段分配一個

TOP LABLEWORD;據(jù)區(qū)共32個字,每個STACK ENDS;字的內(nèi)容均為08086匯編語言程序設計的基本方法全文共23頁,當前為第3頁。CODE SEGMENT MAIN PROCFAR;定義子程序名為MAIN,類型FAR ASSUMECS:CODE;把段寄存器和

ASSUMEDS:DATA;段名對應起來

ASSUMESS:STACK START: PUSHDS MOVAX,0 PUSHAX MOVAX,DATA;給數(shù)據(jù)段賦初值

MOVDS,AX MOVAX,STACK MOVSS,AX MOVSP,OFFSETTOP8086匯編語言程序設計的基本方法全文共23頁,當前為第4頁。

MOVAL,X ADDAL,Y;兩數(shù)低字節(jié)相加結(jié)果送AL MOVAH,0 ADCAH,0;兩數(shù)高字節(jié)帶進位相加

SHRAX,1 MOVZ,AL RET MAIN ENDP CODE ENDS END START8086匯編語言程序設計的基本方法全文共23頁,當前為第5頁。例2編寫程序,計算(W-(X*Y+Z-100))/W,其中W、X、Y、Z均為16位帶符號數(shù),計算結(jié)果的商存入AX,余數(shù)存入DX。例3把非壓縮十進制數(shù)DAT1轉(zhuǎn)換為壓縮十進制數(shù)8086匯編語言程序設計的基本方法全文共23頁,當前為第6頁。例2編寫程序,計算(W-(X*Y+Z-100))/W,其中W、X、Y、Z均為16位帶符號數(shù),計算結(jié)果的商存入AX,余數(shù)存入DX。DATASEGMENTWDW268XDW–73YDW48ZDW–85DATAENDSSTACKSEGMENTDW100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,X;計算X*YIMULYMOVCX,AX;用CX存儲結(jié)果低位

MOVBX,DX;用BX存儲結(jié)果高位

MOVAX,Z;計算X*Y+Z

CWDADDCX,AXADCBX,DXSUBCX,100SBBBX,0MOVAX,WCWDSUBAX,CXSBBDX,BXIDIVWMOVAH,4CHINT21HCODEENDSENDSTART8086匯編語言程序設計的基本方法全文共23頁,當前為第7頁。例3把非壓縮十進制數(shù)DAT1轉(zhuǎn)換為壓縮十進制數(shù)。

·STACK64H·DATADAT1DW0908H;非壓縮十進制數(shù)0908H·CODE BEGIN:MOVAX,@DATAMOVDS,AX MOVAX,DAT1;AX←0908HMOVCL,4;CL←4SALAH,CL;09字節(jié)左移4位,AH=90HROLAX,CL

;9008H字循環(huán)左移4位,AX=0089HROLAL,CL;89字節(jié)循環(huán)左移4位,AL=98HMOVBYTEPTRDAT1,AL

;DAT1←98H,壓縮十進制數(shù)98HMOVAH,4CH;返回DOSINT21HENDBEGIN返回8086匯編語言程序設計的基本方法全文共23頁,當前為第8頁。5.6.2分支程序設計分支程序結(jié)構(gòu)也稱條件結(jié)構(gòu),通常是在兩種或兩個以上的不同的操作中選擇其中的一個,如下圖所示:分支是通過條件轉(zhuǎn)移指令來實現(xiàn)的。分支結(jié)構(gòu)有一個共同點:運行方向總是向前的。IP受標志位的影響而跳變,影響標志的指令CMP、TEST、JXX條件S1S2條件SS1S2Sn條件NNYY…8086匯編語言程序設計的基本方法全文共23頁,當前為第9頁。兩路分支程序設計例4用比較指令和條件轉(zhuǎn)移指令實現(xiàn)兩路分支的程序段。

…MOVAX,M;假定M和N為有符號數(shù)

MOVBX,NCMPAX,BX

;比較M和N的大小,影響標志位,準備條件

JGNEXT

;M>N時轉(zhuǎn)移,注意若M、N為無符號數(shù)時用JA指令

……;分支程序2JMPDONENEXT:……;分支程序1……DONE:RET8086匯編語言程序設計的基本方法全文共23頁,當前為第10頁。

[例5]現(xiàn)有一符號函數(shù): 1當X>0時

Y=0當X=0時

-1當X<0時假定X為-25,且存放在VARX單元中,函數(shù)值Y存放在VARY單元,試編寫程序根據(jù)X的值確定函數(shù)Y的值。 根據(jù)題意畫出流程圖如下:8086匯編語言程序設計的基本方法全文共23頁,當前為第11頁。實現(xiàn)符號函數(shù)程序的流程圖開始AL←XAL≥0?Y←-1結(jié)束AL=0Y←1Y←0YYNN8086匯編語言程序設計的基本方法全文共23頁,當前為第12頁。編寫程序如下:DSEG SEGMENT VARX DB-25 VARY DB?DSEG ENDSCSEG SEGMENT ASSUMECS:CSEG,DS:DSEG START: MOVAX,DSEG MOVDS,AX MOVAL,VARX CMPAL,0 JGE NEXT MOVAL,-1 JMPHALT 8086匯編語言程序設計的基本方法全文共23頁,當前為第13頁。 NEXT: JEHALT MOVAL,1 HALT: MOVVARY,ALMOVAH,4CH INT21HCODE ENDS ENDSTART8086匯編語言程序設計的基本方法全文共23頁,當前為第14頁。例6已知X是單字節(jié)帶符號數(shù),請設計計算下列表達式的程序。Y= X+20(X≥0)|X|(X<0)8086匯編語言程序設計的基本方法全文共23頁,當前為第15頁。例6已知X是單字節(jié)帶符號數(shù),請設計計算下列表達式的程序。Y= 程序如下:DATASEGMENTXDB?YDB?DATAENDSCODESEGMENT;代碼段START:PROCFARASSUMECS:CODE,DS:DATAMOVAX,0

X+20(X≥0)|X|(X<0)MOVAX,DATA;初始化DSMOVDS,AXMOVAL,X;取數(shù)XCMPAL,0;準備條件

JNSPLUS;X≥0則轉(zhuǎn)移

NEGAL;X<0則求補

JMPDONEPLUS:ADDAL,20;X≥0時,X+20DONE:MOVY,AL;計算結(jié)果送YRET;返回STARTENDPCODEENDSENDSTART;匯編結(jié)束8086匯編語言程序設計的基本方法全文共23頁,當前為第16頁。分支結(jié)構(gòu)程序設計的關(guān)鍵在于準確地知道操作結(jié)果影響的標志位狀態(tài)和正確地使用條件轉(zhuǎn)移指令。根據(jù)對條件的判斷而選擇不同的處理方法是人的基本智能體現(xiàn)。[例]:設內(nèi)存中有三個互不相等的無符號字數(shù)據(jù),分別是放在ARG開始的字單元,編制程序?qū)⑵渲凶畲笾荡嫒隡AX單元。分析:求三個無符號數(shù)中的最大值,只要把三個數(shù)據(jù)兩兩比較,用JA/JNB/JNA/JC等指令就可判斷兩數(shù)的大小,從而選出其中最大值。源程序如下:SSEGSEGMENTSTACKSTKDB20DUP(0)SSEGENDS8086匯編語言程序設計的基本方法全文共23頁,當前為第17頁。DSEGSEGMENTARGDW7138H,84A6H,29EHMAXDW?DESGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEG,SS:SSEGFMAX:MOVAX,DSEGMOVDS,AXMOVSS,AXMOVSP,SIZESTKLEASI,ARGMOVAX,[SI]MOVBX,[SI+2]CMPAX,BX8086匯編語言程序設計的基本方法全文共23頁,當前為第18頁。JAEFMAX1MOVAX,BXFMAX1:CMPAX,[SI+4]JAEFMAX2MOVAX,[SI+4]FMAX2:MOVMAX,AXMOVAH,4CHINT21HCSEGENDSENDFMAX8086匯編語言程序設計的基本方法全文共23頁,當前為第19頁。循環(huán)結(jié)構(gòu)程序設計循環(huán)體圖2先判斷后執(zhí)行循環(huán)結(jié)構(gòu)循環(huán)初始化NY循環(huán)控制部分循環(huán)初始化循環(huán)體N循環(huán)控制部分Y圖1先執(zhí)行后判斷循環(huán)結(jié)構(gòu)8086匯編語言程序設計的基本方法全文共23頁,當前為第20頁。循環(huán)程序一般由四個部分組成:(1)循環(huán)初值部分:這是為了保證循環(huán)程序能正常進行循環(huán)操作而必須做的準備工作。循環(huán)初值分兩類:一類是循環(huán)工作部分的初值,別一類是控制循環(huán)結(jié)束條件的初值。(2)工作部分:即需要重復執(zhí)行的程序段。這是循環(huán)的中心,稱之為循環(huán)體。(3)修改部分:按一定規(guī)律修改操作數(shù)地址及控制變量,以便每次執(zhí)行循環(huán)體時得到新的數(shù)據(jù)。(4)控制部分:用來保證循環(huán)程序按規(guī)定的次數(shù)或特寫條件正常循環(huán)。8086匯編語言程序設計的基本方法全文共23頁,當前為第21頁。例題例7把從BUF單元開始的80個16位無符號數(shù)按從大到小的順

溫馨提示

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

評論

0/150

提交評論