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