匯編語言程序結構--分支&循環


程序有順序、循環、分支、子程序四種結構形式。順序結構是指完全按順序逐條執行的指令序列,這在程序段中是大量存在的,但作為完整的程序則很少見,因此在本文不做討論。


分支程序設計


計算機程序在執行過程中,可以改變程序的執行順序,根據一定的條件進行轉移,使程序完成更復雜的功能。匯編語言提供了無條件轉移指令和條件轉移指令。

  • 分支程序根據條件是真或假決定執行不同的程序段
  • 判斷的條件是各種指令,如CMP、TEST等執行后寄存器中的狀態位
  • 通過轉移指令可以實現分支控制


單分支結構

例:
START: MOV AX,DATA
MOV DS,AX
LEA SI,BUF
MOV AL,[SI]
CMP AL,[SI+1]
JNB NEXT ;如果X1不小於X2,則轉到NEXT
MOV AL,[SI+1] ;如果X1小於X2,則將A2送給AL
NEXT: CMP AL,[SI+2]
JNB NEXT1
MOV AL,[SI+2]
NEXT1: MOV Y,AL
MOV AH,4CH
INT 21H
CODE ENDS
END START


跳躍表法

根據不同的條件跳轉到多個分支之一執行,將各個分支的地址存放在連續的數據區,稱為跳躍表。


循環程序的組成


例:將ARRAY數組中的50個數求和,並將和存入字變量S中。
MOV AX,0 ;累加求和寄存器清0
MOV BX,OFFSET ARRA Y ; 數組始址送BX中
MOV CX,50 ;循環控制計數初始化
AGAIN : ADD AX,[BX]
ADD BX,2 ;數組地址增2,BX指向下一個元素
DEC CX ;循環控制計數減1
JNZ AGAIN ;計數不為0時繼續循環
MOV S,AX ;計數為0時循環結束,和存於S中

保證循環正常執行和結束的條件:
➊正確地初始化循環控制計數和初始條件
❷正確地檢測循環條件
❸必須保證能達到循環結束條件(例如在循環體內有修改循環控制值的指令)


一個循環程序通常由四部分構成:

(1)初始化部分
建立循環初始值。如初始化地址指針,計數器,其他循環參數的起始值等。

(2)工作部分
它是循環程序的這主要部分,是為完成某種特定功能而設計的程序段。

(3)修改部分

為保證正確的循環而修改某些參數。如修改計數器的值、操作數地址等。

(4)控制部分

判斷循環結束條件是否成立。

通常判斷循環是否結束的辦法有兩種:
①用計數控制循環:循環是否已進行預定次數,它適用於已知循環次數的循環程序設計;
②用條件控制循環:循環終止條件是否已成立, .它適用於未知循環次數的循環程序設計。


循環指令


跳轉指令

jmp

格式:Jump short 標號

jmp為無條件轉移,可以只修改IP,也可以同時修改CS和IP; jmp指令要給出兩種信息:轉移的地址,轉移的距離(段間轉移、段內短轉移,段內近轉移)

其他跳轉指令:


LOOP 重復控制

格式: LOOP OPR
執行的操作: (CX) ←(CX)-1。 若CX≠0,跳轉到標號OPR處循環執行;若CX=0,則退出循環,執行LOOP的下一條指令。


LOOPZ/LOOPE 條件重復控制

格式: LOOPZ/LOOPE OPR

執行的操作: (CX) = (CX)-1。 若CX≠0,並且ZF=1,則跳轉到標號OPR處循環執行; 若CX=0,或者ZF=0,則執行下一條指令。


LOOPNE/L OOPNZ 條件重復控制

格式: LOOPNE/LOOPNZ shortlabel

操作:計數寄存器CX減1,如果零狀態標志位ZF=0且CX≠0時,轉向shortlabel指定循環入口執行,如果ZF=1或CX=0則執行后續指令。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM