一个简单的程序,请指教
我写了一个函数,调用WIN32函数printf打印出一个数组的所有元素,
下面invoke句为什么会出错?请详细分析一下,谢谢。
printArray proc C pArray:ptr dword,num:dword
mov ecx,num
mov eax,pArray
a10:
invoke printf, offset szFmt, dword ptr [eax]
call printf
inc eax
loop a10
ret
printArray endp
问题点数:20、回复次数:3Top
1 楼Helloooooo(每天,我都新的)回复于 2006-03-20 21:46:15 得分 0
写错了,那句CALL是没有的,不好意思。。。
printArray proc C pArray:ptr dword,num:dword
mov ecx,num
mov eax,pArray
a10:
invoke printf, offset szFmt, dword ptr [eax]
inc eax
loop a10
ret
printArray endp
Top
2 楼Helloooooo(每天,我都新的)回复于 2006-03-20 21:47:34 得分 0
我测试发现invoke printf, offset szFmt...
执行时就影响了寄存器中的值,
为什么呢?Top
3 楼zara(Kyrie eleison)回复于 2006-03-20 22:23:30 得分 20
这个有个寄存器的使用约定, eax 和 edx 以及 ecx 可以被子程, 包括了系统的 API 函数所使用, edx:eax 还可能被作为子程的返回值来使用. 所以, 如果需要继续使用这些寄存器中的内容的话, 应该在调用其它子程前进行保存, 然后再行恢复, 或者使用其它几个通用寄存器, 比如 esi, edi 它们不会被规范的子程所破坏. 自己编制的子程函数一般也应该遵循这些寄存器的使用约定Top




