最近我决定尝试基本的x86程序集,以便更容易调试程序等等。所以我开始(大约一周前)学习x86程序集,在那个时候,我升级了我的计算机到8GB内存,所以我的x86 Windows XP安装很可能浪费了所有内存,现在,我正在运行x64 Windows 7副本,所以问题是:
是否可以在x64操作系统上使用x86程序集? 它是否可以在模拟器中正常运行?或者我应该学习x64汇编吗?
答案 0 :(得分:18)
是否可以使用x86 在x64操作系统上组装? 它会在模拟器中正常运行吗?
是的,有可能&它会正常运行。指令集架构始终向后兼容。
x86-64中的注册:
alt text http://www.usenix.org/events/bsdcon/full_papers/linden/linden_html/reg.gif
例如:
在这里,您可以看到rax
是新的64通用寄存器,但您仍然可以使用eax
,因为它引用了rax
的低32位。
或者我应该学习x64汇编?
x86-32架构是x86-64的子集。就像你第一次学习x86然后去&在x86-64汇编中找到新的东西。 一旦你学习了x86 asm。然后,这将是一个有用的资源:http://www.cs.cmu.edu/~fp/courses/15213-s06/misc/asm64-handout.pdf
答案 1 :(得分:12)
是的,当然。大多数程序仍然是32位,并且在64位Windows系统上运行良好。这些程序是机器语言,它与汇编具有一对一的映射(并且可以很容易地分解为x86汇编代码)。
答案 2 :(得分:0)
我想对这个问题稍微讨论一下(看起来非常相关且不劫持):世界上有很多资源用于x86-32。看起来在装配级别32/64之间没有太多差异。考虑到32种材料的丰富,是否值得淘汰64种资源,并且在这一点上真的只集中在64种资源上(假设一个人想要学习64种),或者,因为它(至少看起来)重要的概念性东西都在32只有像64位寄存器这样的东西才真正重要,只是为了偶然的教育目的而将自己限制在32位。
换句话说,是否有任何实质性的设定差异在64对32中会有实质性的不同?