c语言while函数作用,while(1)的目的; 用C语言声明

如果你深入组装(从嵌入式系统的角度,或者如果您尝试对引导程序进行编程,这将更容易理解)

您将意识到while循环只是一个jmp指令...即

(pseudo code: starting loop address)

add ax, bx

add ax, cx

cmp ax, dx

jz (pseudo code: another address location)

jmp (pseudo code: starting loop address)

让我们解释一下它是如何工作的,无论如何,处理器将继续按顺序执行指令。 因此,当它进入此循环的那一刻,它将在寄存器中添加寄存器bx并存储在ax中,在寄存器中添加寄存器cx并存储到ax,cmp,ax,dx中(这意味着从ax中减去dx),jz指令意味着跳转到(另一个地址 位置)如果设置了零标志(如果上述减法的结果为零,则标志寄存器中的一个位将被设置),然后jmp到起始循环地址(非常简单)并重做整个过程。

我打扰您所有这些程序集的原因是向您展示这将在C中转换为

int A,B,C,D;

// initialize to what ever;

while(true)

{

A = A + B;

A = A + C;

if((A-D)==0)

{break;}

}

// if((X-Y)==0){break;} is the

// cmp ax, dx

// jz (pseudo code: another address location)

因此,请想象一下汇编中的senario,如果您有很长的指令列表,而这些指令没有以jmp(while循环)结尾,可以重复某些部分或加载新程序或执行某些操作...最终,处理器将到达最后一条指令,然后加载以下指令以查找所有内容(然后将冻结或三重故障或其他原因)。

这就是为什么当您希望程序在触发事件之前不执行任何操作时,必须使用while(1)循环,这样处理器才能继续跳转至原来的位置,而不会到达该空指令地址。 当事件被触发时,它跳到事件处理程序的指令地址,执行它,清除中断,然后返回到while(1)循环,仅跳到其位置等待进一步的中断。 顺便说一句,如果您想了解更多有关while(1)的信息,那么……这是一个超级循环……对于在这一点上发狂地为之争辩并发表负面评论的人,这不是汇编教程,讲座或任何内容。 这只是简单的英文解释,它尽可能地简单,它忽略了很多底层细节,例如指针和堆栈以及诸如此类的东西,并且在某些情况下还简化了事情以求得通。 没有人在这里寻找文档准确性,我知道这段C代码不会像这样编译,但这仅适用于演示!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值