计算机是如何通过变量名找到它的实际数据的?这个有关问题困扰小弟我很久

计算机是怎么通过变量名找到它的实际数据的?这个问题困扰我很久。
这个问题真的困扰我很久。
比如c语言代码:
int   a=5;
计算机肯定是要把整数5放在内存中的某个位置,这个位置是怎么跟变量名a发生联系的。当程序要用到变量a时,是怎么找到它的值的。
这个问题真的困扰我很久,我是菜鸟,初来论坛,也没有悬赏的积分,但还是希望大牛能帮我解除疑惑。
------解决思路----------------------
暂时不用明白这个,,编译器的事情,编译的时候会把变量名转化为一个地址,地址中存放的数据5.程序运行的时候都是在找地址,不会出现变量名。变量名只是为了让你编程的时候方便,在计算机刚出来时,你想用变量名都不行,没有。只能用机器码。
------解决思路----------------------
首先要去看一下《数字逻辑和数字电路》,然后是《计算机组成原理》。
在这里你希望给你透彻的讲清楚是不太现实的。
------解决思路----------------------

void main()
{
0043CCC0  push        ebp  
0043CCC1  mov         ebp,esp 
0043CCC3  sub         esp,0D8h 
0043CCC9  push        ebx  
0043CCCA  push        esi  
0043CCCB  push        edi  
0043CCCC  lea         edi,[ebp-0D8h] 
0043CCD2  mov         ecx,36h 
0043CCD7  mov         eax,0CCCCCCCCh 
0043CCDC  rep stos    dword ptr es:[edi] 
int m = 100;
0043CCDE  mov         dword ptr [m],64h //分配的地址是偏移为m的地址

int n = 12;
0043CCE5  mov         dword ptr [n],0Ch 
cout<<m + n<<endl;
0043CCEC  push        offset std::endl (439816h) 
0043CCF1  mov         eax,dword ptr [m] //使用的时候直接访问偏移地址为m的地址
0043CCF4  add         eax,dword ptr [n] 
0043CCF7  push        eax  
0043CCF8  mov         ecx,offset std::cout (4C6E98h) 
0043CCFD  call        std::basic_ostream<char,std::char_traits<char> >::operator<< (4399FBh) 
0043CD02  mov         ecx,eax 
0043CD04  call        std::basic_ostream<char,std::char_traits<char> >::operator<< (43A23Eh) 
}

------解决思路----------------------
确实想了解的话,学习编译原理吧,理解词法分析,语法分析,代码生成的过程。懂汇编的话,对理解这个会更有帮助。
------解决思路----------------------
肯定是的啊,,不然怎么办
------解决思路----------------------
这是汇编,机器组成原理,很深。先别急吧,后面就明白了
------解决思路----------------------
name lookup 把一个名字对应到一个实体上,后者映射到内存上,内存里存实际数据,这样名字就翻译成数据了。