匯編語言系列課件第一章(考試重點在里面)第8講 6.1-6.4_第1頁
匯編語言系列課件第一章(考試重點在里面)第8講 6.1-6.4_第2頁
匯編語言系列課件第一章(考試重點在里面)第8講 6.1-6.4_第3頁
匯編語言系列課件第一章(考試重點在里面)第8講 6.1-6.4_第4頁
匯編語言系列課件第一章(考試重點在里面)第8講 6.1-6.4_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第六章分支結構程序6.1分支結構程序的引出6.2轉(zhuǎn)移指令6.3分支結構程序設計6.4多分支結構程序設計16.1分支結構程序的引出用計算機處理問題過程中,總是要求計算機能做出各種邏輯判斷,并根據(jù)判斷的結果,做相應的處理。例如,火車站用計算機計算托運行李的托運費,當旅客行李重量小于或等于20kg時,收費0.2元/kg,當行李重量超過20kg時,20kg以內(nèi)部分0.2元/kg,超出部分,收費0.3元/kg。這個處理過程,可歸納為下面數(shù)學表達式: 0.2w(w≤20kg) 0.2*20+0.3*(w-20)(w>20kg)26.2轉(zhuǎn)移指令6.2.1無條件轉(zhuǎn)移指令6.2.2條件轉(zhuǎn)移指令36.2.1無條件轉(zhuǎn)移指令JMP(Jump)指令匯編格式:JMPtarg操作:

段內(nèi)轉(zhuǎn)移:IP←目標的偏移地址段間轉(zhuǎn)移:IP←目標的偏移地址

CS←目標所處代碼段的基址受影響的狀態(tài)標志位:無說明:無條件轉(zhuǎn)移指令可以轉(zhuǎn)到內(nèi)存中存放的任何程序段。指令中的targ可以是直接標號、寄存器間接或存儲器間接尋址形式。4

段內(nèi)直接轉(zhuǎn)移方式段內(nèi)間接轉(zhuǎn)移方式段間直接轉(zhuǎn)移方式段間間接轉(zhuǎn)移方式目標地址尋址方式5目標IP=當前IP+相對位移量(8bit/16bit)相對位移量是一個8位或者16位的帶符號數(shù),在機器指令中直接給出,匯編指令中的目標地址以標號的形式給出。

JMPNEARPTR目標地址目標地址在當前代碼段,且在-32768~32767之間

JMPSHORT目標地址

目標地址在當前代碼段,且在-128~127范圍內(nèi)段內(nèi)直接轉(zhuǎn)移方式6段內(nèi)直接轉(zhuǎn)移方式71)段內(nèi)寄存器間接轉(zhuǎn)移

JMPAX2)段內(nèi)存儲器間接轉(zhuǎn)移

JMP[SI](默認是WORD類型)

JMPWORDPTR[BX+DI+1000H]段內(nèi)間接轉(zhuǎn)移方式8匯編后的機器指令中直接給出目標地址的CS和IP,匯編指令以標號的形式給出。

JMPFARPTR目標地址段間直接轉(zhuǎn)移方式CSEGSEGMENTSTART: JMP FARPTRL1 : :CSEG ENDSCSEG1SEGMENTL1::NOP : :CSEG1 ENDS9

IP和CS的內(nèi)容用內(nèi)存中2個連續(xù)的字來替換,可以使用任意一種存儲器尋址方式。

JMPDWORDPTR[BX][SI]例

(BX)=1256H,(SI)=528EH,(DS)=2000H,(264E4H)=1234H,(264E6H)=5678H執(zhí)行指令后IP=?CS=?段間間接轉(zhuǎn)移方式106.2.2條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令是根據(jù)執(zhí)行該指令前CPU中狀態(tài)標志位的狀態(tài)決定程序執(zhí)行的流程。條件轉(zhuǎn)移指令是以對不同的狀態(tài)標志位的測試為條件。如果條件成立,則程序轉(zhuǎn)移到指令中所給出的轉(zhuǎn)移目標執(zhí)行。條件不成立,程序?qū)㈨樞驁?zhí)行。所有的條件轉(zhuǎn)移指令都是相對轉(zhuǎn)移形式的短(short)轉(zhuǎn)移指令,并且是在從下條指令算起的--128~127字節(jié)的地址范圍內(nèi)轉(zhuǎn)移。11條件轉(zhuǎn)移指令在比較完兩個數(shù)的大小后根據(jù)比較的結果而決定是否轉(zhuǎn)移,對于某兩個二進制數(shù),把它們看成有符號數(shù)和無符號數(shù),比較后會有不同的結果,實際是測試不同的標志位。

8086的條件轉(zhuǎn)移指令中,大部分指令可以用兩種不同的助記符來表示。單條件轉(zhuǎn)移指令無符號數(shù)的條件轉(zhuǎn)移指令帶符號數(shù)的條件轉(zhuǎn)移指令12單條件轉(zhuǎn)移指令13有符號數(shù)和無符號數(shù)的條件轉(zhuǎn)移指令根據(jù)兩數(shù)(A,B)的大小關系轉(zhuǎn)移的指令(1)使用該指令前用過比較(CMPA,B)、減法(SUBA,B、SBBA,B)指令。(2)比較轉(zhuǎn)移時分無符號數(shù)和帶符號數(shù)。例:A=11111111BB=00000001B(3)A與B的關系共有6種:

A<B A>B A≤BA≥B A=B A≠B14Below

Above

Less

Great

EqualJNAEJNAJNBEJNBJNGEJNGJNLEJNL

無符號數(shù)

帶符號數(shù)

A<B

JB

CF=1

JL

(SF⊕OF)=1

A≤B

JBE

CF=1||ZF=1

JLE

(SF⊕OF)||ZF=1

A>B

JA

CF=0&ZF=0

JG

(SF⊕OF)||ZF=0

A≥B

JAE

CF=0

JGE

(SF⊕OF)=0

A=B

JE(ZF=1)

A≠B

JNE(ZF=0)

15條件轉(zhuǎn)移指令比較MOVAL,0FFHCMPAL,1JBENEXTMOVAL,1……NEXT:MOVAL,0FFHCMPAL,1JLENEXTMOVAL,1……NEXT:思考:兩段程序執(zhí)行完后AL的值分別是什么?16AX,BX,CX分別存放著三個互不相等的無符號數(shù),試編寫程序段比較它們的大小,將最大的數(shù)放到AX中。條件轉(zhuǎn)移指令舉例117 CMPAX,BX

JAENEXT XCHGAX,BXNEXT: CMPAX,CX

JAENEXT1 XCHGAX,CXNEXT1:……如果存放的是有符號數(shù)呢?18如果存放的是有符號數(shù),程序應該為: CMPAX,BX

JGENEXT XCHGAX,BXNEXT: CMPAX,CX

JGENEXT1 XCHGAX,CXNEXT1:……196.3分支結構程序設計例6.1設X為單字節(jié)帶符號整數(shù),且存于ARGX單元,計算結果Y存入RLT單元。X+10(0<X≤8)5X-2(8<X<15)|X|(其它){Y=20X+10(0<X≤8)5X-2(8<X<15)X(X=0,X≥15)-X(X<0){Y=X+10(0<X≤8)5X-2(8<X<15)X(X≥15)-X(X≤0){Y=21221:;*****EXAM6.1*****2:SSEG SEGMENT STACK3:STK DB 50DUP(0)4:SSEG ENDS5:DSEG SEGMENT6:ARGX DB -57:RLT DB ?8:DSEG ENDS9:CSEG SEGMENT10: ASSUME CS:CSEG,DS:DSEG11: ASSUME SS:SSEG12:BEGIN: MOV AX,DSEG13: MOV DS,AX14: MOV AX,SSEG15: MOV SS,AX16: MOV SP,SIZESTK2317: MOV AL,ARGX ;取X值18: CMP AL,0 ;X≤0?19: JNG ABSL ;是,轉(zhuǎn)20: CMP AL,8 ;X≤8?21: JLE ONE ;是,轉(zhuǎn)22: CMP AL,15 ;X≥15?23: JGE MOVE ;是,轉(zhuǎn)24: SHL AL,1 ;計算5X-225: SHL AL,126: ADD AL,ARGX27: SUB AL,228: JMP MOVE29:ONE:ADD AL,10 ;X≤8,計算X+1030: JMP MOVE31:ABSL:NEG AL ;取補32:MOVE:MOV RLT,AL ;保存結果33: MOV AH,4CH34: INT 21H35:CSEG ENDS36: END BEGIN24X+10(0<X≤8)5X-2(8<X<15)X(X=0,X≥15)-X(X<0){Y=2517: MOV AL,ARGX ;取X值18: AND AL,AL ;置標志位19: JS ABSL ;X<0轉(zhuǎn)20: JZ MOVE ;X=0轉(zhuǎn)21: CMP AL,8 ;X≤8?22: JLE ONE ;是,轉(zhuǎn)23: CMP AL,15 ;X≥15?24: JGE MOVE ;是,轉(zhuǎn)25: SHL AL,1 ;計算5X-226: SHL AL,127: ADD AL,ARGX28: SUB AL,229: JMP MOVE30:ONE:ADD AL,10 ;X≤8,計算X+1031: JMP MOVE32:ABSL:NEG AL ;取補33:MOVE:MOV RLT,AL ;保存結果34: MOV AH,4CH35: INT 21H36:CSEG ENDS37: END BEGIN26例6.2設內(nèi)存中有三個互不相等的無符號字數(shù)據(jù),分別存放在ARG開始的字單元,編制程序?qū)⑵渲凶畲笾荡嫒隡AX單元。ABC大大271:;*****EXAM6.2*****2:SSEG SEGMENT STACK3:STK DB 20DUP(0)4:SSEG ENDS5:DSEG SEGMENT6:ARG DW 7138H,84A6H,29EH7:MAX DW ?8:DSEG ENDS9:CSEG SEGMENT10: ASSUME CS:CSEG,DS:DSEG11: ASSUME SS:SSEG12:FMAX:MOV AX,DSEG13: MOV DS,AX14: MOV AX,SSEG15: MOV SS,AX16: MOV SP,SIZESTK2817: LEA SI,ARG ;取數(shù)據(jù)首址18: MOV AX,[SI] ;取第1個數(shù)19: MOV BX,[SI+2];取第2個數(shù)20: CMP AX,BX ;兩數(shù)比較21: JAE FMAX1 ;AX中的數(shù)大22: MOVAX,BX ;大數(shù)送AX23:FMAX1:CMPAX,[SI+4];大數(shù)與第3個數(shù)比較24: JAE FMAX2 ;AX中的數(shù)大25: MOV AX,[SI+4] ;第3個數(shù)大大值26:FMAX2:MOVMAX,AX ;保存最大值27: MOV AH,4CH28: INT 21H29:CSEGENDS30:ENDFMAX296.4多分支結構程序設計

利用計算機解決實際問題時,常遇到這樣的情況:處理某個問題時有多種選擇方案,根據(jù)實際情況選擇其中一種。每種處理方案由一段程序完成,每一段程序可以看作一個分支,程序在執(zhí)行過程中根據(jù)當前的狀況,決定下一步應執(zhí)行哪一個分支,這就構成了多個分支的程序。如用計算機控制一臺電動機,該電動機有正轉(zhuǎn)、逆轉(zhuǎn),在每種轉(zhuǎn)動方式下又有幾種轉(zhuǎn)速的檔次控制,這些控制可以通過鍵盤0~9的數(shù)字鍵進行選擇,進入某種檔次選擇后,執(zhí)行相應分支程序,使電機以最佳方式由一個狀態(tài)進入所選狀態(tài)。假設程序的十個分支的起始地址分別為ADR0,ADR1,...ADR9。301:;*****EXAM6.5.1*****2:SSEG SEGMENTSTACK3:STK DB20DUP(0)4:SSEG ENDS5:DSEG SEGMENT6:DSEG ENDS7:CSEG SEGMENT8: ASSUME CS:CSEG,DS:DSEG9: ASSUME SS:SSEG10:MOTOR:MOV AX,DSEG11: MOV DS,AX12: MOV AX,SSEG13: MOV SS,AX14: MOV SP,SIZESTK15: MOV AH,0116: INT 21H17: CMP AL,’0’18: JZ ADR019: CMP AL,’1’20: JZ ADR121: :22: CMP AL,’8’23: JZ ADR824:ADR9: :25: ::ADR0: :: ::ADR1 :: ::ADR8 ::1.樹形結構法31

所謂地址常數(shù)表法,就是把多個分支中的每個分支程序段的起始地址順序存放在一個存儲區(qū)中,這個存儲區(qū)稱地址表存儲區(qū)。根據(jù)鍵值,將相應處理程序的入口地址取入某寄存器,然后用間接轉(zhuǎn)移指令實現(xiàn)轉(zhuǎn)移。2.地址常數(shù)表法321:;*****EXAM6.5.2*****2:SSEG SEGMENT STACK3:STK DB 20 DUP(0)4:SSEG ENDS5:DSEG SEGMENT6:ADRTAB DW OFFSETADR0,OFFSETADR17: DW OFFSETADR2,..,OFFSETADR98: DSEG ENDS9:CSEG SEGMENT10: ASSUME CS:CSEG,DS:DSEG11: ASSUME SS:SSEG12:BRANCH: MOV AX,DSEG13: MOV DS,AX14: MOV AX,SSEG15: MOV SS,AX16: MOV SP,LENGTHSTK3317: LEA DI,ADRTAB;取地址表首址18: MOV AH,01;讀鍵盤19: INT 21H20: SUB AL,’0’;轉(zhuǎn)換為數(shù)字21: XOR AH,AH;擴展為字數(shù)據(jù)22: SHL AX,1;乘223: ADD DI,AX;形成相應地址24: MOV AX,[DI];取程序入口25: JMP AX;轉(zhuǎn)去執(zhí)行26:ADR0: :27: ::ADR1: :: ::ADR9: :: ::CSEG ENDS: END BRANCHMOVBX,AXJMPADRTAB[BX]MOVBX,AXJMP[DI+BX]34設DATA1開始的內(nèi)存單元中,存放著6個無符號字節(jié)數(shù)據(jù),要求找出其中最小的一個數(shù),并存到MIN單元。條件轉(zhuǎn)移指令舉例235CSEG SEGMENT ASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEG MOVDS,AX

MOVAX,4C00H INT 21HCSEGENDS END START DSEG SEGMENTDATA1 DB 0B5H,2,45Q,20H,30H,0D3HCOUNT E

溫馨提示

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

評論

0/150

提交評論