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文章
7614瀏覽量
137298 -
for
+關注
關注
0文章
44瀏覽量
15830 -
循環語句
+關注
關注
0文章
10瀏覽量
4897
發布評論請先 登錄
相關推薦
【原創分享】單片機延時的兩種實現方法
怎樣使用arm匯編指令實現for循環結構呢
單片機延時程序時間長度的記憶方法
匯編編寫采用定時器延時控制速度的Protuse仿真步進電機
關于單片機匯編延時程序的一些了解
51單片機的匯編延時程序免費下載
![51單片機的<b class='flag-5'>匯編</b><b class='flag-5'>延時</b>程序免費下載](https://file.elecfans.com/web1/M00/A2/1D/pIYBAF1H-2OAKiNNAATGqMeV23E782.png)
單片機實現延時的方法
單片機延時是怎么實現的
51匯編(五):延時函數
![51<b class='flag-5'>匯編</b>(五):<b class='flag-5'>延時</b>函數](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
EFR32上實現精確的軟件延時
![EFR32上<b class='flag-5'>實現</b>精確的軟件<b class='flag-5'>延時</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32關延時功能實現方式研究
![STM32關<b class='flag-5'>延時</b>功能<b class='flag-5'>實現</b>方式研究](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論