汇编实现循环判断与延时

描述

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的通信。
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分