7.1 循環結構的實現
循環語句可以使用以下架構實現C語言中的for語句。設存在一個代碼段OBA0。
OBA0:
;輸入循環的代碼
JMP OBA0
只不過這種方式是無限次循環,若想要有限次循環,則應該這么寫。
START:
MOV CX,n ;n代表循環的次數
JMP OBA0
OBA0:
;輸入循環的代碼
SEC CX
JNZ START
JMP OBA0
對于while語句的實現則可以使用LOOP,設存在一個代碼段OBA0。
OBA0:
MOV CX,n ;n代表循環的時間,即一個時鐘周期
LOOP $
上述的結構可以作為簡單的延時函數使用。
7.2 判斷結構的實現
常用的結構是利用按位與異或運算實現的,因為異或指令相同出0,相反出1的特性,所以可以寫成以下結構,設存在一個代碼段OBA0。
OBA0:
MOV AL,n ;n代表要參加比較的數
NOR n,x ;x代表比較的數
JNZ OBA1 ;相同跳轉到OBA1
JMP OBA0
OBA1:
;相當于if成立執行的指令
還有一種是利用減法,判斷全零標志位,思想與上面的例子一樣,區別就是將上面例子中的NOR改成減法指令SUB就可以了。
7.3 延時函數的實現
設存在一個代碼段OBA0。
OBA0:
MOV CX,n ;n代表循環的時間,即一個時鐘周期
LOOP $
注意:由于CX是一個16位寄存器,最大支持的數是65535,如果需要更長的時間,可以多寫幾遍,或者是采用以下結構的循環嵌套。
設存在一個代碼段OBA0。
START:MOV AX,n ;n代表循環n次LOOP延時
JMP OBA0
OBA0:
MOV CX,n ;n代表循環時間,即一個時鐘周期
LOOP $
DEC AX
JNZ START
JMP OBA0
這種結構最多支持計數2^32個脈沖。
注:為什么要使用延時函數?
在之前計算機的C語言編程中,由于不考慮通信協議以及視覺效果,所以沒有提到延時函數,所謂的延時函數通俗的說法就是讓CPU進行沒有意義的運算,一般低端的處理器采用的是讓CPU不停地做循環來達到延時的效果,后續的Cortex-M系列處理器由于增加了滴答時鐘,所以也可以采用定時器的方式達到延時的效果,因為處理器的速度都是MHz甚至GHz程度,但是通信協議有的最高速度也就幾百KHz,這就需要處理器來遷就通信協議的,因為有的芯片如果速度太快是根本無法工作的,所以加入適當的延時來適應這種低速芯片。現在的計算機中引入Cache緩存,目的也是為了匹配低速設備與高速CPU的通信。
-
C語言
+關注
關注
180文章
7599瀏覽量
136225 -
for
+關注
關注
0文章
44瀏覽量
15797 -
循環語句
+關注
關注
0文章
9瀏覽量
4858
發布評論請先 登錄
相關推薦
評論