最近参与了一个项目,需要用嵌入式汇编写测试程序。汇编程序写过,C程序也写过,但是将它们混合起来写还是第一次,完全没有概念。只能上网找资料,自己慢慢摸索。
自己一直用Windows操作系统,但是我们的项目是在Linux系统上,这两者的汇编语言系统是不同的,windows一直是Intel汇编,而Linux是At&T汇编。为了调试的方便,我决定现在windows中尝试着写点嵌入式汇编,然后再在Linux中写(主要原因是自己对Linux调试不熟悉)。
首先遇到的第一个问题是,格式到底是什么。上网查资料,前篇一律,都是_asm_ _volatile_(…);格式,但是自己弄的时候总是不行,说明网络虽好,但是不可盲目相信。经过多番测试,我发现windows下嵌入式汇编的格式只有_asm关键字,也没有volatile;以前的括号现在也变成大括号,最后也没有引号。我自己写的一个简单测试程序为:
#include
#include
//测试bsf指令
void test()
{
int value,index=32;
_asm {
mov eax,index
bsf ebx,eax
mov value,ebx
}
printf("value is %d/n",value);
}
void main()
{
printf("Hello World/n");
test();
}
Windows嵌入式汇编的特点是:
1. 汇编是Intel汇编,而不是AT&T汇编;
2. 关键字是_asm,而不是其他,这个有可能和自己的环境有关,如果你自己重新定义宏,那就是你自己定义的关键字;3. 虽说有volatile关键字,但是用上却报错,具体我也不知道怎么用;4. 没有冒号指定输入输出,要输入和输出的数可以直接在汇编语言中使用;5. 汇编代码要用大括号包围,而不是小括号,而且最后也没有分号;6. 如果不用大括号包围,则必须每句汇编代码之前都有_asm关键字。
从上面的叙述中,可以看出貌似windows嵌入式汇编要简单很多。
在windows中搞定之后,就要在Linux中进行测试。我首先做的就是直接复制在windows中的程序到Linux中,很明显自己的无知是要报错的。
有经过多番测试,得到在Linux中执行无误的代码为:
#include
void test()
{
int bsf=0,bsr=0,input=0x12345,flag;
asm volatile ("movl %3,%%eax/n"
"movl %3,%%ebx/n"
"bsf %3,%%cx/n"
"movzwl %%cx,%0/n"
"bsr %3,%%dx/n"
"movzwl %%dx,%1/n"
"pushf/n"
"pop %2/n"
:"=r"(bsf),"=r"(bsr),"=r"(flag)
:"m"(input)
);
printf("bsf value is %d/n",bsf);
printf("bsr value is %d/n",bsr);
printf("flag is %x/n",flag);
}
int main()
{
printf("Hello World/n");
test();
return 0;
}
从结构来看,Linux下的要麻烦不少。首先用的汇编是windows程序员不熟悉的AT&T汇编,而且还要定义输入输出,寄存器用起来还要两个%……总之,比较麻烦。但是我没有贬低Linux的意思,只要用好了,功能还是很强大的。
Linux下嵌入式汇编的特点是:w w w . d z i u u . c o m
本文地址:http://www.dziuu.com/dz/22/15430445482641.shtml
本文标签:
猜你感兴趣:
时控开关控制接触器的接线方法 在很多定时工作的用电设备中,使用定时开关作为控制器件的地方很多,常见用于路灯照明中,当用电设备功率很大时,就应该接一个接触器来使
高压贴片电容的尺寸表示法有两种,一种是英寸为单位来表示,一种是以毫米为单位来表示,贴片电容的系列型号有0402、0603、0805、1206、1812、2010、2225、2512,是英寸表示法,04表示长度是0.04英寸,02表示宽度0.02英寸,其他雷同。
时控开关可以控制三相电机。时控开关控制三相电机需要连接一个380V交流接触器,用时控开关控制交流接触器,交流接触器控制三相电机达到定时开关的效果。
近年来贴片电感行业发展迅速,贴片电感主要运用于手机、液晶电视、笔记本电脑、通信设备内。
双控开关接线图(实物接线图):双控开关接线图顾名思义就是用两个开关去控制一个灯。最常用于照明线路中,新房装修中必定会用到双控开关接线图知识,房间门口一个开关,
纺织工程专业包括纺织贸易和纺织服装两个方向。该专业培养具备纺织工程方面的知识和能力,能在纺织企业、科研、教学等部门从事纺织品设计开发、纺织工艺设计、纺织生产质量控制、生产技术改造以及具有经营管理初步能力的高级工程技术人才。
国产三极管的型号命名 国产三极管的型号命名由五部分组成 第一部分:国内用数字“3”表示三极管,国外用“2”表示三极管。 第二部分:用字母表示三极管的材料和极性。“A”表示PNP型锗材料,“B”表示NPN型锗材料,“C”表示PNP型硅材料,“D”表示NPN型硅材料。 第三部分:用字母表示三极管的类别。“X”表示低频小功率管表示高频小功率管,“D”表示低频大功率管,“A”表示高频大功率管。 第四部分:用数字表示产品的序号,序号不同的三极管其特性不同。 第五部分:用字母表示规格号。
温控器与接触器接线图220v: 在交流电220V的温度控制系统中,常常会用温度传感器作为探头,在将得到的温度变化量传给温度控制器,在由温度控制器发出指令动作从而控制交流接触器,实现温度上升与下降的目的,这种控制系统有一个问题,应用过度的朋友可能都会知道,当发热区温度接近温控器设定温度时,温度在这个区域变化时,
定时开关:以单片微处理器为核心,配合电子电路等,组成的电源开关控制装置,能以天或星期,循环多时段的控制电器的开闭。蓝牙定时开关在老式开关上增加蓝牙功能(去掉按键
紫外线指数是指当太阳在天空中的位置最高时(一般是在中午前后,即从上午十时至下午三时的时间段里),到达地球表面的太阳光线中的紫外线辐射对人体皮肤的可能损伤程度。
描述 GC9110 是一款低压 5V 全桥驱动芯片,为摄像机、 消费类产品、 玩具和其他低压或者电池供电的运动控制类应用提供了集成的电机驱动解决方案。GC9110 能提供高达 1.3A 的持续输出电流。 可以工作在 1.2~7V 的电源电压上。GC9110 具有 PWM(IN/IN) 输入接口,与行业标准器件兼容, 并具有过温保护功能。GC9110S 是 SOP8pp 封装, GC9110D 是DFN 封装。
随着秋冬季节的到来,一些工业发达、人口密集的城市就很容易出现雾霾天气。雾霾是空气中的粉尘颗粒长时间悬浮与水蒸气形成的气溶胶,它影响空气质量,也影响人们的健康。常处于雾霾多发的环境下容易引起一系列的呼吸道疾病。为了能够准确地掌握当地空气质量,及时采取相关措施,粉尘传感器被广泛应用于环境监测设备上。
心血管功能检测仪,仪器基于脉压法原理,根据建立起来的理论为基础,对模型进行分室网络分析,用线性相关算法推导出一系列计算公式。
近年来,颗粒物PM2.5传感器被用于实时环境监测设备中,以实时传输空气质量信息。未来,我们将看到更多的仪器和工业监控设备使用高精度、高可靠性的VOC、PM2.5传感器。目前,CO2传感器已广泛应用于新风系统,为环境检测行业的发展提供了很好的参考。
定时开关控制器又叫定时开关、时控开关、时间控制器等等,当前市场新型的是带有蓝牙连接功能的,可以不用接触开关,是在老式定时开关的基础上,去掉按键,通过手机与开关进
平尚科技供应的常用贴片二极管的型号:IN4001—IN4007 SS12 SS14 SS16 SS24 等型号。
弓网动态接触力是评估弓网受流质量、接触网状态和滑板磨耗情况、诊断接触网局部缺陷的关键参数。考虑现有接触力检测方法存在的不足与缺陷,提出了一种基于光纤应变传感器测定接触力的方法。
随着智能化生活的不断发展,智能家居、机器人、智能设备已经广泛应用在生活中。而这些应用中也包括了各种功能的传感器,传感器通过感知传送到设备中心做出应答。其中比较常
地质博物馆陈列室的监测(包括自然采光以及萤光灯为主的人工采光陈列室),结果表明,对博物馆陈列或收藏环境而言,波长在320nm以下的紫外辐射几乎不存在。因此,开展标本保护工作只要对320 - 300nm之间的紫外辐射加以处理就能达到目的。