问一个关于变量操作和寄存器的关系

cgp7953476 2004-09-09 05:03:27
ARM的CPU共16个通用寄存器(R0-R15),其中R15为pc(程序计数器),如果我在程序中定
义变量:
int i;
i=120;
则某个寄存器(R0-R13)的值会变成78(120的十六进制),如果我连续定义多个变量:
int i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;
那么多出的变量值(超过15个寄存器数量时),cpu怎么处理?它把变量值存于何处?另外,当我们要用某个变量的时侯,比如要用i来运算:
i=i+1;
此时如何知道到哪个寄存器取数(难道寄存器是连变量名一起保存的吗?)

...全文
225 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
out4b 2004-09-14
  • 打赏
  • 举报
回复
more arguments are on stack. check it.
cgp7953476 2004-09-10
  • 打赏
  • 举报
回复
feiyunta(蓝天):
????????????????
feiyunta 2004-09-10
  • 打赏
  • 举报
回复
<table width='450' border='1' bgcolor='#539996' bordercolor='#FFFFFF' height='90'>
<tr>
<td> </td>
<td background='Back01.gif'> </td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td bgcolor='#FF0000'> </td>
<td> </td>
</tr>
</table>
angi_2004 2004-09-10
  • 打赏
  • 举报
回复
在堆栈吧, bp指向最后一个定义的变量
W32API 2004-09-10
  • 打赏
  • 举报
回复
>>所有寄存器值保持不变?

你定义这些变量拿来干嘛的?调试代码中,加入对这些定义变量的单独修改的指令,就可以知道编译器把哪些变量放在寄存器,哪些放在内存。用汇编来写,你可以考虑在需要的时候将使用频率最高的变量交换到寄存器,用 C 来写,就看你的编译器是否支持动态的寄存器变量。
超过寄存器数量的变量定义在内存。
allen_wang 2004-09-10
  • 打赏
  • 举报
回复
这样:
定义全局变量、静态局部变量,是位于数据段中,也就是在内存中。
定义局部变量,标准情况下,是位于栈段中,还是在内存中。

某些编译器,或者带上一些优化参数后,为了减小内存访问次数,提高程序运行速度,就将局部变量尽量的安排在寄存器中。但是寄存器个数是有限的,所以,超过了可以安排的寄存器个数后,多余的局部变量还是只能按标准情况安排在栈段中了,也就是在内存中。
cgp7953476 2004-09-09
  • 打赏
  • 举报
回复
我用sdt工具观察register:
发现变量值不规律的把r0-r14填完(除r13不变外),此后的变量,所有寄存器的值不变,只有
pc的值改变,所以我会问其他的值被保存到哪里去了?
cgp7953476 2004-09-09
  • 打赏
  • 举报
回复
没看明白啊
大熊猫侯佩 2004-09-09
  • 打赏
  • 举报
回复
应该在内存中,实际试试看!
Areslee 2004-09-09
  • 打赏
  • 举报
回复
建议在8086中用C语言写一段然后生成汇编代码,一看就明白了
allen_wang 2004-09-09
  • 打赏
  • 举报
回复
寄存器能够用来做变量的就会尽量被编译器用来作变量。
一般变量是保存在内存中的。
SDFDSAC 2004-09-09
  • 打赏
  • 举报
回复
数据当然是存在你定义的数据段里
其他的问INTEL吧

21,453

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧