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語句都是在迴圈前先判斷條件,只有條件滿足才會進入迴...