鱼C论坛

 找回密码
 立即注册
查看: 1932|回复: 4

关于WIN32汇编循环问题

[复制链接]
发表于 2013-1-27 19:46:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  2. ; 3.asm
  3. ; 第一个程序
  4. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  5. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  6. ; 使用 nmake 或下列命令进行编译和链接:
  7. ; ml /c /coff FirstWindow.asm
  8. ; Link /subsystem:windows FirstWindow.obj
  9. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  10. .386
  11. .model flat,stdcall
  12. option casemap:none
  13. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  14. ; Include 文件定义
  15. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  16. include                windows.inc
  17. include                user32.inc
  18. includelib        user32.lib
  19. include                kernel32.inc
  20. includelib        kernel32.lib
  21. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  22. ; 数据段
  23. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  24. .data
  25. szTitle                db        '提示',0
  26. szCaption        db        '欢迎来到汇编世界!',0
  27. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  28. ; 代码段
  29. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  30. .code
  31. start:        mov ecx,2
  32. s:                invoke MessageBox ,NULL, offset szCaption, offset szTitle, MB_OK
  33.                 loop s
  34.                
  35.                 invoke ExitProcess,NULL
  36. end start
复制代码
问问大家,运行这个代码,消息框会显示几次?为什么?

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-27 20:51:21 | 显示全部楼层
无限次呵呵
调用完MessageBox会把ECX改掉(可能是7C93005D)
然后你继续减1
再调用
ECX又被改掉,继续循环
无尽的深渊
好了,说正经的
保护下ECX寄存器就OK



至于如果你对于我为什么知道ECX会改变的话
答案是用OD看下,很简单的哦
OD附加一下你的程序F8单步走几下你就发现问题了

代码如下
  1. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  2. ; 3.asm
  3. ; 第一个程序
  4. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  5. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  6. ; 使用 nmake 或下列命令进行编译和链接:
  7. ; ml /c /coff FirstWindow.asm
  8. ; Link /subsystem:windows FirstWindow.obj
  9. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  10. .386
  11. .model flat,stdcall
  12. option casemap:none
  13. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  14. ; Include 文件定义
  15. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  16. include                windows.inc
  17. include                user32.inc
  18. includelib        user32.lib
  19. include                kernel32.inc
  20. includelib        kernel32.lib
  21. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  22. ; 数据段
  23. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  24. .data
  25. szTitle                db        '提示',0
  26. szCaption        db        '欢迎来到汇编世界!',0
  27. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  28. ; 代码段
  29. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  30. .code
  31. start:        mov ecx,2
  32. s:                push ecx
  33.                                 invoke MessageBox ,NULL, offset szCaption, offset szTitle, MB_OK
  34.                                 pop ecx
  35.                 loop s
  36.                
  37.                 invoke ExitProcess,NULL
  38. end start
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-27 20:52:05 | 显示全部楼层
POP ECX忘记对齐了:dizzy:
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-27 21:06:29 | 显示全部楼层
对了,保护完ECX后
因为LOOP会减ECX+循环
所以答案是弹2次。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-1-27 22:51:26 | 显示全部楼层
谢谢大家的支持,改成如下问题就解决了::lol
.code
start:        mov ecx,2
s:             pushad
               invoke MessageBox ,NULL, offset szCaption, offset szTitle, MB_OK
               popad
               loop s
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 18:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表