汇编语言谁帮我解释一下!

来源:百度知道 编辑:UC知道 时间:2024/05/11 01:30:53
00412B81 > 50 PUSH EAX ; /hWnd
00412B82 . FF15 30344400 CALL DWORD PTR DS:[<&USER32.GetDlgCtrlID>; \GetDlgCtrlID
00412B88 > 85C0 TEST EAX,EAX ; Switch (cases 0..8024)
00412B8A . 0F84 A1000000 JE 复件_chs.00412C31
00412B90 . 3D 1E800000 CMP EAX,801E
00412B95 . 77 25 JA SHORT 复件_chs.00412BBC
00412B97 . 74 1C JE SHORT 复件_chs.00412BB5
00412B99 . 3D 0E040000 CMP EAX,40E
00412B9E . 74 0E JE SHORT 复件_chs.00412BAE
00412BA0 . 3D 1C800000 CMP EAX,801C
00412BA5 . 75 36 JNZ SHORT 复件_chs.00412BDD
00412BA7 . 68 E84E4500 PUSH 复件_chs.00454EE8 ; Case 801C of switch 00412B88
00412BAC . EB 26 JMP SHORT 复件_chs.00412BD4
00412BAE > 68 18554500 PUSH 复件_chs.00455518

MOV EAX,DWORD PTR SS:[ESP+4]

从堆栈段中ESP+4这个地址里取出数值赋给EAX,然而DWORD是双字,也就是4个字节的意思,从ESP+4里取出来的是4个字节,而且EAX正好可以容纳4个字节。

CS 属于代码段,用于存放执行的代码。
DS 属于数据段,常常用于存放变量,比如局部的和全局的,可能还有常量。
SS 则属于堆栈段,常常用于push pop等指令进行变量的暂时存储。

MOV 可以算是负值. EAX 是寄存器,DWORD PTR SS表示在SS里的是以双字节存储的.ESP+4 表示在ESP 偏移地址是4 PTR 是指针即PIONT 的意思
整个意思是把当前堆栈顶向下偏移4h处的值当作数值赋给EAX,也就是该函数的第1个参数.