简单问题--关于ESP寄存器,符号扩展,零扩展

qazxsw1982103 2004-08-16 10:25:02
问题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中?



...全文
121 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
FlyindanceDDr 2004-08-17
  • 打赏
  • 举报
回复
pushad是一条指令,这条指令不能分成8条看

ESP在pushad前的值就是2000h
qazxsw1982103 2004-08-16
  • 打赏
  • 举报
回复
谢谢
把第一个问题在重发一遍,有点错误

问题1:
PUSHAD
如果在执行这条指令前,ESP的内容为2000H,那么这条指令被执行后,栈中所存储的ESP的值是多少?
当前ESP的值又是多少??
--------------------------------------------

ESP的值总是当前栈顶的偏移量,而寄存器的入栈顺序为 EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI

那么就是说,EAX入栈后,ESP的值应该减4,ECX入栈后,ESP的值再减4.........直到ESP入栈时,

当前ESP的值应该是 2000H-10H ,所以我认为栈中存储的EIP的值应该是2000H-10H
(因为书上说,PUSH ESP指令入栈的是ESP在执行该指令之前的旧值,所以我想存储的应该是2000-10H而不是2000-14H)。

可是我看那书上画的图好像说栈中存储的ESP的值是2000H,是怎么回事呢?请DX指出我上述的推断哪里
有问题。
SDFDSAC 2004-08-16
  • 打赏
  • 举报
回复
我认为依次为:2000h,2000h-1ch,yes,yes
csdsjkk 2004-08-16
  • 打赏
  • 举报
回复
是pushad之前的值2000h

21,458

社区成员

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

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