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

分支程序設計
計算機程序在執行過程中,可以改變程序的執行順序,根據一定的條件進行轉移,使程序完成更復雜的功能。匯編語言提供了無條件轉移指令和條件轉移指令。
- 分支程序根據條件是真或假決定執行不同的程序段
- 判斷的條件是各種指令,如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則執行后續指令。
