首页
社区
课程
招聘
[旧帖] 请问怎么判断这三个语句中寄存器内存放的内容 0.00雪花
发表于: 2011-8-13 08:30 3950

[旧帖] 请问怎么判断这三个语句中寄存器内存放的内容 0.00雪花

2011-8-13 08:30
3950
第一语句:
mov EAX,DWORD PTR DS:[ESI-4]
MOV EDX,DWORD PTR DS:[EDI-4]

第二语句:
mov EAX,DWORD PTR DS:[ESI]
MOV EDX,DWORD PTR DS:[EDI]
第三语句:
mov EAX,DWORD PTR ss:[EBP-4]

请问怎么判断ESI、EDI、EBP存寄的是输入数还是长度,这三句怎么解释,DWORD PTR DS:[ESI-4]、DWORD PTR DS:[ESI]、DWORD PTR ss:[EBP-4]各代表什么意思,DWORD DS:[ESI-4]、DWORD PTR DS:[ESI]有什么区别,[ESI-4]是什么意思,请高手指点,谢谢!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 793
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
DWORD PTR 类型控制 DWORD表示输入的长度是4个字节 正好32Bit 跟寄存器的长度一样!
例如MOV AX,WORD PTR DS:[ESI-4]
DS SS 只是指出是数据段 还是堆栈段  DWORD DS:[ESI-4]、DWORD PTR DS:[ESI] 区别就是这个两个地址相差4字节 或者值大小相差4 好像漏掉PTR
2011-8-13 09:00
0
雪    币: 195
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢!DWORD PTR 类型控制 DWORD表示输入的长度是4个字节 正好32Bit 跟寄存器的长度最多是不是8位数
2011-8-13 09:35
0
雪    币: 793
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
寄存器的长度取决你的CPU 有16Bit 32Bit 48Bit 64Bit 128Bit.....最多要查下资料
2011-8-13 10:12
0
雪    币: 88
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
dword 是双字的意思,1个二进制位称为1个bit,8个二进制位称为1个Byte,也就是1个字节(8位),2个字节就是1个Word(1个字,16位),则DWORD(DOUBLE WORD)就是双字的意思,两个字(32位)。
eax 是32位寄存器,ax是16位寄存器,ah/al是8位寄存器,mov EAX,DWORD PTR DS:[ESI-4]中eax是32位寄存器,那么后面要送入的也必须是32位。不能16位送32位,也就是说应该对应起来。

它们送入的长度上面已经解释,其它的说一例就明白了mov eax,DWORD PTR DS:[ESI-4]的意思是将地址为DWORD PTR DS:[ESI-4]下的内容送入eax,DWORD PTR DS:[ESI-4]代表的地址是这样计算的:ds的内容*10H+(esi的内容-4),而DWORD PTR DS:[ESI]代表的物理地址是:ds的内容*10H+(esi的内容,就是寄存器间接寻址)
2011-8-13 10:57
0
游客
登录 | 注册 方可回帖
返回
//