在用c语言写单片机程序时,定义一个变量,如“int a;” 在编译时是怎么处理的?翻译成汇编是什么

如题所述

他会自动分配两个单元的RAM作为a变量的存放地址
在汇编里面对这条指令基本就不执行任何操作,只是再调用的时候,直接访问这个变量的地址追问

比如: int a,b;
a=0x1234;
b=a>>8;
我用keil调了,显示 a赋值后是0x0134,b即使0x12 ,很是不理解,
如果
int a,b;
a=0x1234;
b=a>>8;
a=a+1; 就正常

追答

可能是优化的原因
因为你的a在后面没有操作的话,编译器在预处理的时候,将a就直接忽略了,而直接得出了b的值
你看到的那个a可能就是一个随机数
你可以把优化等级设置为0试试

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-06-26
通过移位运算来判定整数的正负性。

#include <iostream>
using namespace std;

#define MAX(A,B) (((A)-(B))>>31 ? (B) : (A))

int main()
{
int a = 10, b = 100;
cout << MAX(a, b) << endl;
}
相似回答