读书人

高手,请帮忙看一段汇编.小弟我是小白,

发布时间: 2012-08-10 12:19:33 作者: rapoo

高手,请帮忙看一段汇编.我是小白,刚入门.关于cx的.
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 在缓冲区中找出一行数据,处理换行并保存
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_FormatTextprocuses esi _lpData,_dwSize,_hFile
local@szBuffer[128]:byte,@dwBytesWrite

movesi,_lpData
movecx,_dwSize
leaedi,@szBuffer
xoredx,edx
cld
_LoopBegin:
orecx,ecx
jz_WriteLine
lodsb
dececx
cmpal,0dh;遇到0dh则丢弃
jz_LoopBegin
cmpal,0ah;遇到0ah则扩展为0dh,0ah
jz_LineEnd
stosb
incedx
cmpedx,sizeof @szBuffer-2
jae_WriteLine;行缓冲区满则保存
jmp_LoopBegin
_LineEnd:
movax,0a0dh
stosw
incedx
incedx
_WriteLine:
pushecx ;============问题在这.为什么没人动cx,这里也要把他进栈啊,下面哪段代码懂了ecx?
.ifedx
invokeWriteFile,_hFile,addr @szBuffer,edx,addr @dwBytesWrite,NULL
.endif
leaedi,@szBuffer
xoredx,edx
popecx ;;============问题在这.为什么没人动cx,这里也要把他进栈啊,
orecx,ecx
jnz_LoopBegin
ret

_FormatTextendp
新手没分.希望高手也能慷慨解答啊.万分感谢.

[解决办法]
因为下面调用系统函数了,这里就涉及到一个寄存器的使用约定,子程里对 eax/edx/ecx 随意修改无须保护,保护操作应由调用者进行,esi/edi/ebx 则在使用时应进行保护和恢复操作;即对调用者来说,调用子程不会破坏 esi/edi/ebx 的内容,但 ecx/edx/eax 则可能被破坏,尤其是 [edx:]eax 通常作为返回内容几乎的必改。

读书人网 >汇编语言

热点推荐