写win32程序为什么用jnz和jz跳转指令没起作用

炖蛋白豆腐 2016-09-26 05:21:35
今天练习写win32汇编代码用到jnz和jz指令的时候发现一只不起作用,看了半天没找出原因,麻烦帮忙找一下问题所在,代码如下:
.386
.model flat,stdcall
include \masm32\include\msvcrt.inc
includelib \masm32\lib\msvcrt.lib

.data
number1 dd 0
number2 dd 1
inputnum dd ?
zero dd 0
type0 db '%d',0
inputinfor db 'Please input the number:',0
outinfor db 'The result is:',0

.code
begin:
push eax
push ebx
push ecx

invoke crt_printf,addr inputinfor
invoke crt_scanf,addr type0,addr inputnum

xor eax,eax
xor ebx,ebx
xor ecx,ecx

invoke crt_printf,addr outinfor

mov ecx,inputnum
invoke crt_printf,addr type0,number1
dec ecx
cmp ecx,zero
jz culok

invoke crt_printf,addr type0,number2
dec ecx
cmp ecx,zero
jz culok

continue:
mov eax,number1
mov ebx,number2
add eax,ebx
mov number1,ebx
mov number2,eax

invoke crt_printf,addr type0,number2

dec ecx
cmp ecx,zero
jnz continue

culok:
pop ecx
pop ebx
pop eax

invoke crt_exit,0
end begin
...全文
387 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2016-09-27
  • 打赏
  • 举报
回复
和另外个帖子一样的问题吧, crt_printf 函数破坏了 ecx 的内容,所以调用前要保存,调用完后要恢复之。
炖蛋白豆腐 2016-09-27
  • 打赏
  • 举报
回复
引用 1 楼 zara的回复:
和另外个帖子一样的问题吧, crt_printf 函数破坏了 ecx 的内容,所以调用前要保存,调用完后要恢复之。
确实是这样,之前不知道现在明白了

21,497

社区成员

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

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