初学汇编,写了下面的代码,程序会进入死循环

h_destiny 2014-04-23 12:24:47
.686
.model flat,stdcall
option casemap:none
includelib msvcrt.lib
printf PROTO C : dword,:vararg

.data
sum sdword 0
fmtStr1 byte 'sum = %d',13,10,0 ;格式描述串
.code
main proc
mov eax,0
mov ecx,2
.while SDWORD PTR ecx >=0
add eax,ecx
dec ecx

pushad
invoke printf,offset fmtStr1 ,eax
popad
.endw
main endp
end main
...全文
216 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
h_destiny 2014-04-23
  • 打赏
  • 举报
回复
引用 1 楼 zara 的回复:
应该是 printf() 函数改写了 ecx 的内容吧;eax/edx/ecx 等寄存器是不被子程函数保护的,只有 ebx/esi/edi 才是。
调用printf() 函数,已经把寄存器的值压进栈了啊,怎么还会改变啊 ?
h_destiny 2014-04-23
  • 打赏
  • 举报
回复
调用printf() 函数,已经把寄存器的值压进栈了啊,怎么还会改变啊 ?
zara 2014-04-23
  • 打赏
  • 举报
回复
应该是 printf() 函数改写了 ecx 的内容吧;eax/edx/ecx 等寄存器是不被子程函数保护的,只有 ebx/esi/edi 才是。
h_destiny 2014-04-23
  • 打赏
  • 举报
回复
引用 4 楼 zara 的回复:
那就是 main 子程的最后没有 ret 指令了,或者是调用 ExitProcess() 函数。 看你的描述,想成了不同地进行输出了。
恩 ,加了ret OK了,谢谢
zara 2014-04-23
  • 打赏
  • 举报
回复
那就是 main 子程的最后没有 ret 指令了,或者是调用 ExitProcess() 函数。
看你的描述,想成了不同地进行输出了。

21,498

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧