8086匯編語言程序設計——分支


匯編語言程序和高級語言程序一樣,有順序、分支、循環、子程序四種結構形式。

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

 一個分支程序的例子

示例 設計分支程序,實現下列公式計算。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 ≥0jge let1        ;是,轉到let1
    mov bx,ax        ;否,計算X*X
    imul bx                
    jmp out1        ;跳到公共出口out1
let1:
    cmp ax,10        ;X ≥10jge 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
          

 


免責聲明!

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



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