華工微機與介面實驗 分支和迴圈程式設計實驗

2021-10-06 21:47:57 字數 3596 閱讀 9388

一,實驗內容:

設計一資料塊間的搬移程式

設計思想:

程式要求把記憶體中一資料區(稱為源資料塊)傳送到另一存貯區(稱為目的資料塊)。源資料塊和目的資料塊在存貯中可能有三種情況。

對於兩個資料塊分離的情況,資料的傳送從資料塊的首址開始,或者從資料塊的末址開始均可,但對於有部分重疊的情況,則要加以分析,否則重疊部分會因「搬移」而遭破壞。

可以得出以下結論:當源資料塊首址》目的塊首址時,從資料塊首址開始傳送資料。當源資料塊首址《目的塊首址時,從資料塊末位址開始傳送資料。

二,實驗設計原理;

在dos中資料搬移為防止在位址重疊的情況下資料搬移出錯,設定了一些搬移規則,即:

當源資料塊首址》目的塊首址時,從資料塊首址開始傳送資料。當源資料塊首址《目的塊首址時,從資料塊末位址開始傳送資料

mov es, ax ;初始化

mov si, offset source ;si指向原來資料位址

mov di, offset result ;di指向搬移之後的資料位址

mov cx, count ;輸入的個數為6

cld ;遞增傳資料

cmp si, di

jae next ;無符號大於或等於則跳轉

mov ax, cx

dec ax

add si, ax ;si+cx-1

add di, ax ;di+cx-1

std ;遞減傳資料

next:

rep movsb

mov ah,4ch

int 21h

codes ends

end start

; std, 功能是方向標誌df置1,

;位置指標si或di往反向(位址減小大方向)移動,字串處理是由後往前

;cld,功能是方向標誌df清零,

;位置指標si或di往正向(位址增大方向)移動,字串知處理是由前往後;

設計二:迴圈程式設計實驗實驗內容:(1)編制程式使s=1+23+34+4*5+……n(n+1),直到n(n+1)項大於200為止。

(2)求某個資料區內負數的個數

設資料區的第一單元存放區內資料的個數,從第二單元開始存放資料,在區內最後乙個單元存放結果。

為統計資料區內負數的個數,需要逐個判斷區內的每乙個資料,然後將所有資料中凡是符號位為1的資料的個數累加起來,即得區內所包含負數的個數。

實驗設計原理;

(1)簡單的遞增+乘法,以及對jump指令的運用

(2)在二進位制中,負數即是帶符號數中最高位為1,通過與1000和待測數高4位進行test指令,可判斷出最高位是否為1.

;此處輸入資料段**

datas ends

stacks segment

;此處輸入堆疊段**

stacks ends

codes segment

assume cs:codes,ds:datas,ss:stacks

start:

mov ax,datas

mov ds,ax

mov si, 10h ;給定si初始指向10h

mov cx, 1 ;流程圖中用到了dx,這裡改為cx

mov bl, 2

mov ah, 0

mov bh, 0

loop1:

mov al, bl

inc bx

mul bl ;al*bl

add cx, ax

cmp ax, 200

jbe loop1 ;無符號不大於等於則跳轉

mov [si], cx ;將結果儲存到si所指向的地方

mov ah,4ch

int 21h

codes ends

end start

;建議不要放到dx,而是放到cx,應為相乘的時候會借用dx

(2)

datas segment

org 10h

num db 6

source db 12h, 88h, 82h, 90h, 22h, 33h

org 20h

result db ?

datas ends

stacks segment

;此處輸入堆疊段**

stacks ends

codes segment

assume cs:codes,ds:datas,ss:stacks

start:

mov ax,datas

mov ds,ax

mov di, offset num

mov cl, num

inc di

mov ch, 0

mov bl, 0 ;記錄負數個數

loop1:

mov al, [di]

test al, 80h ;test邏輯與運算結果為零,就把zf(零標誌)置1

jz next ;如果zf=0,說明不是負數,跳轉

inc bl ;如果不為0,說明最高位為1,是負數

next:

inc di ;指向下乙個數

dec cx ;記錄還剩下多少個數,為0則結束

jnz loop1

mov [result], bl ;將bl的值賦給result所在位址

mov ah,4ch

int 21h

codes ends

end start

實驗 3 簡單的分支與迴圈結構

目的 熟悉c語言基本分支與迴圈結構,了解問題的分析和程式設計解決思路 1.編寫求圓面積的程式,要求當輸入的半徑r 0時,提示輸入錯誤,要求r為浮點型,r的數值是動態的由鍵盤輸入 題目分割線 2.利用迴圈計算n個圓柱體體積。要求 1.當輸入的半徑r或h 0時,提示輸入錯誤,重新輸入 2.r和h為整形 ...

PHP 分支與迴圈和goto

分支與迴圈 1 if中的判斷條件 is bool 判斷是否是布林型 is int is integer 和is long 判斷是否為整型。is float is double 和is real 判斷是否為浮點型 is string 判斷是否為字串 is array 判斷是否為陣列 is object...

實驗二 分支程式實驗和迴圈程式實驗

流程圖 code segment 定義 段 assume cs code 偽指令assume將段code與段暫存器cs聯絡起來 start mov al,3eh 定義程式的入口,把想要顯示的數字移入al暫存器 mov bl,al 將al暫存在bl中,因為之後要改變ah中的內容 mov dl,al d...