帮忙看一段代码

下面这段代码,esp所对应的地址有什么用?

如前4行为什么不直接mov ds:477197h,0C933h 呢?

.code:1000D551 mov byte ptr [esp+0Ch+var_C], 33h
.code:1000D555 mov byte ptr [esp+0Ch+var_C+1], 0C9h
.code:1000D55A mov ax, [esp+0Ch+var_C]
.code:1000D55E mov ds:477197h, ax
.code:1000D564 mov ds:477410h, ax
.code:1000D56A mov ds:477540h, ax
.code:1000D570 mov eax, 475294h
.code:1000D575 mov [esp+0Ch+var_8], 0E9h
.code:1000D57A mov byte ptr [esp+5], 3Ch
.code:1000D57F mov [esp+0Ch+var_6], 1
.code:1000D584 mov [esp+0Ch+var_5], 0
.code:1000D589 mov ecx, dword ptr [esp+0Ch+var_8]
.code:1000D58D mov byte ptr [esp+0Ch+var_4], 0
.code:1000D592 mov byte ptr [esp+0Ch+var_4+1], 90h
.code:1000D597 mov dx, [esp+0Ch+var_4]
.code:1000D59C mov [eax], ecx
.code:1000D59E mov [eax+4], dx
.code:1000D5A2 xor dl, dl
.code:1000D5A4 mov ecx, 405E49h
[949 byte] By [yifanwu-逸凡] at [2008-1-9]
# 1
如前4行以mov ds:477197h,0C933h 替代,编译器不能确定目的操作数的长度,而
“mov ds:477197h, ax ”编译器可以根据源操作数AX来确定目的操作数的长度。

下面两条指令在esp+0Ch+var_C地址处写了0C933h,目标地址在距堆栈段栈底esp+0Ch+var_C偏移处(目标地址没有在堆栈段内,而是在堆栈段的外面)
mov byte ptr [esp+0Ch+var_C], 33h
mov byte ptr [esp+0Ch+var_C+1], 0C9h
最后通过mov ds:477197h, ax把目标地址写入ds:4771内存处。
mengshijie_1981-云中雀 at 2007-10-19 > top of Msdn China Tech,其他开发语言,汇编语言...
# 2
除了把0C933h 写入477197h外,前4行的esp操作有什么其他意义么?
yifanwu-逸凡 at 2007-10-19 > top of Msdn China Tech,其他开发语言,汇编语言...