简单问题--关于ESP寄存器,符号扩展,零扩展
问题1:
PUSHAD
如果在执行这条指令前,ESP的内容为2000H,那么这条指令被执行后,栈中所存储的ESP的值是多少?
当前ESP的值又是多少??
--------------------------------------------
ESP的值总是当前栈顶的偏移量,而寄存器的入栈顺序为 EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI
那么就是说,EAX入栈后,ESP的值应该减4,ECX入栈后,ESP的值再减4.........直到ESP入栈时,
当前ESP的值应该是 2000H-CH ,所以我认为栈中存储的EIP的值应该是2000H-10H
(因为书上说,PUSH ESP指令入栈的是ESP在执行该指令之前的旧值,所以我想存储的应该是2000-10H而不是2000-14H)。
可是我看那书上画的图好像说栈中存储的ESP的值是2000H,是怎么回事呢?请DX指出我上述的推断哪里
有问题。
-------------------------------------------
问题二:
MOVZX DX,AL
把AL寄存器中的8位数,零扩展成16位数,送到DX寄存器中
请问零扩展的意思是不是直接在高位字节补0啊?比如AL中的二进制为10001100,零扩展为16位数后为:
00000000 10001100
--------------------------------------------
问题三:
MOVSX EAX,CL
把CL中的8位数符号扩展为32位,并送到EAX中
请问如果CL中为负数的话,是不是要补位24个1(如果为正数的话,则补位24个0),然后送到EAX中?