匯編語言程序和高級語言程序一樣,有順序、分支、循環、子程序四種結構形式。
計算機程序在執行過程中,可以改變程序的執行順序,根據一定的條件進行轉移,使程序完成更復雜的功能。匯編語言提供了無條件轉移指令和條件轉移指令。
一個分支程序的例子
示例 設計分支程序,實現下列公式計算。X、Y為字型。假設X單元中保存三個數:9,-6,34,分別作判斷和計算。

設計思路:
(1) 在數據段中定義2個字型變量X、Y,均為帶符號數;
(2) 在X單元中依次取出三個數分別作判斷,根據X的大小作分支轉移;
(3) 采用寄存器相對尋址方式(MOV AX,X[SI])取出X的三個值;
(4) 標號OUT1是各路分支的公共出口。
程序框圖:

代碼:
;a.asm 用正常程序格式編寫分支程序 data segment x dw 9,-6,34 y dw 3 dup(?) ;定義一個變量,占3的字,每個字的內容未知 data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov cx,3 ;循環三次 mov si,0 let0: mov ax,x[si] ;取出X cmp ax,0 ;X ≥0 ? jge let1 ;是,轉到let1 mov bx,ax ;否,計算X*X imul bx jmp out1 ;跳到公共出口out1 let1: cmp ax,10 ;X ≥10 ? jge let2 ;是,轉到let2 sal ax,1 ;否,計算2X+3 add ax,3 jmp out1 ;跳到公共出口out1 let2: mov bl,6 ;計算X/6 idiv bl ;商在al,余數在ah out1: mov y[si],ax ;保存Y add si,2 dec cx ;CX-1 cmp cx,0 jnz let0 ;CX≠0轉移到let0 mov ah,4ch ;CX=0,程序結束 int 21h code ends end start
條件轉移非常多,但基本上看見名字就能明白,可自行百度查閱。
示例2
示例 設計分支程序。計算 Y=5X-18,如果結果為負,求絕對值。並顯示十進制結果。
設計思路:
(1) 用數據段保存X、Y。為簡便,X定義為字節,Y定義為字;
(2) 用符號位SF判斷運算結果的正負,為負數則求補(絕對值),如果是正數,直接保存結果;
(3) 采用將AX中的結果除以10、取得余數的方法獲得結果的十進制數;
(4) 將余數變為ASCII碼,用DOS中斷調用的2號功能顯示出來;
(5) 用9號功能顯示提示信息。
程序框圖:

代碼:
;b.asm 計算Y=5X-18,用正常程序格式 data segment x db -6 ;Define Byte,定義一個字節, y dw ? ;字,?表示內容不確定 cc db 0ah,0dh,'Y=$' data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov al,5 ;5X imul x sub ax,18 ;-18 jns let0 ;結果不為負則轉移 neg ax ;結果為負,求絕對值 let0: mov y,ax ;保存結果 ;將ax中的二進制數變為十進制數,並顯示 mov cx,0 mov bx,10 let1: mov dx,0 inc cx ;統計余數個數 idiv bx ;AX/10,商在AX,余數在DX push dx ;保存余數 cmp ax,0 ;商為0,則退出循環 jnz let1 mov dx,offset cc ;9號功能顯示提示 mov ah,9 int 21h let2: ;循環執行cx次,顯示十進制結果 pop ax ;將余數彈入ax add ax,0030h ;調整為ASCII碼 mov dl,al ;2號功能,顯示一個字符 mov ah,2 int 21h dec cx cmp cx,0 jnz let2 mov ah,4ch int 21h code ends end start
