5 迴圈結構程式設計

2022-06-26 17:03:10 字數 4360 閱讀 2485

1、【例】  從位元組變數x單元開始,連續存放有100個無符號數,從中找出最大者送入max位元組單元中。

分析:可把第乙個數先送到al中,將al中的數與後面的99個數逐個進行比較,如果al中的數大於或等於與之相比較的數,則轉下乙個數進行比較;若al中的數小於相比較的數,則把相比較的數送入al中,保證al中的數始終處於較大的數。比較99次之後最大數必定在al中,最後把al中的數送入max單元。本例的特點:迴圈次數已知,因此可以用計數器來控制迴圈的執行。程式編寫如下:

data       segment

x               db  106,135,101,210,┉; 共100個

max        db  ?

data      ends

stak      segment  stack

dw  20h dup(?)

stak       ends

code      segment

assume  cs:code,ds:data

start: mov  ax,data

mov  ds,ax

lea   bx,x

mov  al,[bx]

mov  cx,99

lop:       inc  bx

cmp  al,[bx]

jae  l1

mov  al,[bx]

l1 :          loop   lop

mov  max,al

mov  ah,4ch

int  21h

code   ends

end  start

2、【例】  從自然數1開始累加,直到累加和大於等於1000為止,統計被累加的自然數個數存入字單元n中,累加和送入字單元sum中。

分析:被累加的自然數個數事先是末知的,也就是說,迴圈的次數是末知的,因此不能用計數方法來控制迴圈。選擇bx暫存器統計自然數的個數,而bx也是用來存放每次取得的自然數,用ax暫存器存放累加和,和≧1000是供判斷的結束標誌。源程式編寫如下:

data       segment

n                 dw  ?

sum           dw  ?

data        ends

code        segment

assume cs:code,ds:data

start:  mov  ax,data

mov  ds,ax

mov  bx,0

mov  ax,0        ;累加暫存器

lop:       inc  bx

add  ax,bx

cmp  ax,1000     ;比較ax是否小於1000

jb    lop         ;是則重複累加

mov  n,bx        ;個數送n

mov  sum,ax      ;累加結果送sum

mov  ah,4ch

int  21h

code  ends

end  start

3、【例】  試編制一程式,求兩個陣列對應的資料之和,並把和數存入新陣列sum中。計算一直進行到兩數之和為零或陣列結束。將新陣列的長度存於len單元中。程式設計如下:

data   segment

da1         db    2,6,0 ,3,-5,0,10,-1

da2         db    4,7,-2,0,10,3,-10,32

count   equ   $-da2

len         dw    ?

sum        db    20  dup(?)

data      ends

stak      segment  stack

dw  50h  dup (?)

stak       ends

code      segment

assume  cs: code,ds:data

start: mov  ax,data

mov  ds,ax

mov  bx,-1             ;初始化位址指標

mov  cx,count      ;取陣列的資料個數

lop:   inc   bx

mov  al,da1[bx]

add  al,da2[bx]      ;對應資料求和

mov  sum[bx],al    ;存和數

loopnz  lop             ;和不為0繼續迴圈

inc  bx                        ;修改新陣列長度

l1:         mov  len,bx           ;存新陣列長度

mov  ah,4ch

int  21h

code       ends

end  start

4、【例】 已知字陣列array,有50個元素,試編寫程式,從中找出最大值,把結果放在max中。

程式一(找最大值):

.  model   samll

.  data

array    dw    50   dup(?)

max         dw    ?

.  code

start:    mov   ax,@data

mov   ds,ax

lea    si, array

mov   cx,49

mov   ax,[si]

add   si,2

again:    cmp  ax,[si]

jg     next

mov   ax,[si]

next:     add   si,2

loop  again

mov   max,ax

mov   ax,4c00h

int     21h

end   start

5、【例】 已知字陣列array,有n個元素,試編寫程式,把陣列中的正數累加,結果放在sum中(不考慮溢位),並統計正數個數,儲存到count。

程式二(求和,統計):

.  model   samll

.  data

array    dw    n   dup(?)

sum         dw     0

count    dw     0

.  code

start:    mov   ax,@data

mov   ds,ax

lea    si, array

mov   cx,n

again:    mov   ax,[si]

cmp   ax,0

jle    next

add   sum,ax

inc     count

next:     add   si,2

loop  again

mov   ax,4c00h

int     21h

end   start

6、【例】 試編寫程式,求級數12+22+32+? 的前n項和剛大於1000的項數n。並在螢幕上顯示結果(用十六進製制)。

(注:n是乙個滿足十六進製制的各位數)

code   segment

assume  cs:code

start:   mov  bl,1               ;

mov  cx,0              ;cx清零,用於統計級數的和

again: mov  al,bl              ;

mul   bl                     ;求平方,指令也可使用imul

add   cx,ax             ;平方和

cmp   cx,1000        ;比較cx是否大於1000

jg     display              ;是,則轉入顯示處理

inc    bl                      ;不是,bl加1

jmp    short  again    ;重複執行

display:mov  dl,bl        ;

cmp   dl,9        ; 比較是否大於9

jg     add37         ;是則轉add37執行

add   dl,30h      ;不是,則加30h,把數符變成ascii碼

jmp    next

add37:add   dl,37h

next:   mov  ah,2              ;顯示乙個字元

int   21h

mov   ah,4ch        ;返回dos

int   21h

code     ends

end   start

迴圈結構程式設計

一 實驗目的 1 掌握用while語句,do while語句和for語句實現迴圈的方法。2 掌握在程式設計中用迴圈的方法實現一些常用演算法 如窮舉 迭代 遞推等 3 除錯程式的技巧。二 實驗內容 1 輸入一行字元,分別統計出其中的英文本母 空格 數字和其它字元的個數。2 用for 語句求1 到100...

迴圈結構程式設計

1 迴圈控制語句用於重複執行乙個 塊,直到某種條件滿足為止。2 三種迴圈控制語句是while do while和for.1 while語句 while語句告訴編譯器反覆執行一組 直到滿足某個條件為止。while語句的一般形式是 while 布林條件 while 布林條件 while與do while...

迴圈結構程式設計

1 本次課學習到的知識點 1 明確了迴圈條件和迴圈體,選擇while語句實現迴圈。2 迴圈結構四要素 迴圈初始化,迴圈條件,迴圈體,迴圈變數修改。3 可以把for語句改寫成while語句,for語句和while語句都能實現迴圈。for語句和while語句都是在迴圈前先判斷條件,只有條件滿足才會進入迴...