我有一个关于x86程序集中的32位寄存器的子部分的问题:寄存器的低位部分(使用时)是否像对应的32位寄存器?澄清32位寄存器的子部分x86
ror cl,2 ror cl,2 push ecx pop eax
就拿上面的代码段 - 因为CL
是ECX
寄存器的小节中,当我推寄存器的内容压入堆栈所做的是在CL
款被推到堆栈,以及?还是他们分开处理?
并假设如果我然后弹出堆栈到EAX
寄存器做什么在CL
寄存器从之前进入EAX
寄存器?
我有一个关于x86程序集中的32位寄存器的子部分的问题:寄存器的低位部分(使用时)是否像对应的32位寄存器?澄清32位寄存器的子部分x86
ror cl,2 ror cl,2 push ecx pop eax
就拿上面的代码段 - 因为CL
是ECX
寄存器的小节中,当我推寄存器的内容压入堆栈所做的是在CL
款被推到堆栈,以及?还是他们分开处理?
并假设如果我然后弹出堆栈到EAX
寄存器做什么在CL
寄存器从之前进入EAX
寄存器?
的ECX
寄存器包含在其下部,它包含CH
和CL
如在下面的图片表示CX
。修改存储在CL
中的值时,还需要更改CX
和ECX
,但不更改CH
。
回答您的问题:
问:当我把寄存器[ECX
]的内容压入堆栈确实是在CL
款得到什么压入堆栈呢?还是他们对待了独立?
- 答:所有在一枪。 CL
是ECX
的一部分。 CL
只是处理器提供的访问部分ECX
的一种方式。
问:再假设,如果我再POP操作堆栈到EAX
寄存器所做的是在CL
寄存器从之前进入EAX
注册?
- 答:是的。更准确地说,CL
中的内容将进入AL
。
来源:A tutorial on Register Allocation by Puzzle Solving(上compilers.cs.ucla.edu)
优秀的答案,谢谢! – 2013-04-08 23:16:06
不客气;) – Jean 2013-04-09 07:06:14
'CL'只是访问ECX'的'数位的便捷方式,他们是相同的寄存器 – Linuxios 2013-04-08 01:37:55
推ECX将推动CL的8位。将它弹出到EAX中会将这8位复制到AL中。 – 2013-04-08 01:49:08
@Linuxios&Hans Passant - 好的欢呼家伙我明白你的意思了。非常感谢 – 2013-04-08 01:52:47