循环语句可以使用以下架构实现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 $
上述的结构可以作为简单的延时函数使用。
常用的结构是利用按位与异或运算实现的,因为异或指令相同出0,相反出1的特性,所以可以写成以下结构,设存在一个代码段OBA0。
OBA0:
MOV AL,n ;n代表要参加比较的数
NOR n,x ;x代表比较的数
JNZ OBA1 ;相同跳转到OBA1
JMP OBA0
OBA1:
;相当于if成立执行的指令
还有一种是利用减法,判断全零标志位,思想与上面的例子一样,区别就是将上面例子中的NOR改成减法指令SUB就可以了。
设存在一个代码段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的通信。
全部0条评论
快来发表一下你的评论吧 !