基本上我试图提示用户输入一个整数并测试它是否是无符号的。如果它是无符号的,我想移动到无符号块并获得另一个用户输入。如果签名,那么基本上什么也不做,结束程序。
mov edx, OFFSET prompt1
call writeString
call readDec
test eax, eax
jns unsigned
unsigned:
mov edx, OFFSET prompt2
call writeString
call readDec
END main
然而,即使我输入一个像-5这样的无符号整数,它仍然会进入无符号块并运行块中的代码。为什么它仍然会跳转,即使eax中的输入已经签名,如果没有签名我正在使用跳转?
答案 0 :(得分:5)
当EAX没有设置符号位时,>
指令跳转到jns unsigned
标签,执行那里的指令。当EAX设置了符号位时,它不会跳转而是执行以下指令。
在这两种情况下都会执行相同的指令:unsigned
。它既是标签mov edx, OFFSET prompt2
上的指令,也是unsigned
指令后面的指令。
如果你希望你的程序在EAX为负时结束,那么你需要在导致它结束的jns unsigned
指令之后添加一些代码。否则它将继续执行指令。您在代码末尾遇到同样的问题。 jns unsigned
指令只是告诉汇编程序停止汇编代码,它不会阻止程序执行。在第二个END
返回后,您的程序将执行在内存中跟随它的任何指令。