在Windows下开关中断指令属于特权指令,就算内嵌了也不会被执行的。
DOS下的话CLI是关中断,STI是开中断要实模式下的DOS,虚拟的DOS(就是Windows下的那个DOS窗口)还是会被Windows屏蔽掉。
#include<stdioh>
void main()
{
int a=2;
__asm{
lea eax,a
shl [eax],2
}
printf("a=%d\n",a);
}
扩展资料:
嵌 入式系统是基于特定用途的 , 以计算机技术为基础 ,其软硬件具备良好可裁剪性的专用计算机系统,适用于对功能、可靠性、成本、体积、 功耗有严格要 求的场合。它一般由嵌入式微处理器、 外围硬件设备、嵌入式 *** 作系统以及用户应用程序四个部分组成。从 20 世纪 60年代中期集成电路诞生至今,嵌入式系统应用已经有接近 40 年的发展历史。
通常来说,嵌入式系统具备以下特点:
(1)体积小,重量轻。
(2)结构简单、功耗低、可靠性高。
(3)便于规模化生产、价格相对低廉。
(4)模块化、芯片化。
(5)强调量身定做的原则。
参考资料来源:百度百科-嵌入式编译程序
单片机的中断使用一般遵循如下步骤:
1、按中断号(C语言)或者中断入口地址(汇编)别写中断服务程序。如果是编写汇编中断服务程序,如果中断程序中用到了寄存器或者有可能影响程序状态字的指令,应注意现场保护(C语言会自动保护)。对不能硬件清除中断标志的中断响应,退出中断前要软件清除中断标志。对复合中断(如串口收发中断)服务程序,要判断中断具体来源执行对应程序。
2、使能相应的中断。
3、开启总中断。
要想知道什么时候中断响应,就要知道ADC12的中断情况。
事实上,ADC12是多源中断,共有十八个中断。那么对应的就有十八个中断使能位。其中在ADC12CTL0里有ADC12OVIE和ADC12TOVIE位,分别是ADC12MEMx溢出中断允许和ADC12转换时间溢出中断允许位。在这里你的程序里都没用到。
另外十六个中断的使能位就对应于16的存储寄存器ADC12MEMx,就是由程序中的ADC12IE来逐位对应控制。所以你用到的 ADC12IE = 0x01; 就是使能了ADC12MEM0,当他相应的转换完成并转载结果(即数据已经存入转换存储寄存器)之后,ADC12IFG0置位,并触发中断。_BIS_SR(CPUOFF + GIE); 这个语句就是进入低功耗模式0并且开总中断,不需要_EINT();
希望我的答案可以帮助到你!
以上就是关于如何利用内嵌汇编程序实现使能和禁止中断全部的内容,包括:如何利用内嵌汇编程序实现使能和禁止中断、单片机中断如何使用、msp430的中断程序何时响应,请结合补充的实例分析,多谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)