MASM汇编 - 为什么这段代码仍然会跳转?

时间:2015-05-21 05:15:21

标签: assembly x86 masm

基本上我试图提示用户输入一个整数并测试它是否是无符号的。如果它是无符号的,我想移动到无符号块并获得另一个用户输入。如果签名,那么基本上什么也不做,结束程序。

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中的输入已经签名,如果没有签名我正在使用跳转?

1 个答案:

答案 0 :(得分:5)

当EAX没有设置符号位时,>指令跳转到jns unsigned标签,执行那里的指令。当EAX设置了符号位时,它不会跳转而是执行以下指令。

在这两种情况下都会执行相同的指令:unsigned。它既是标签mov edx, OFFSET prompt2上的指令,也是unsigned指令后面的指令。

如果你希望你的程序在EAX为负时结束,那么你需要在导致它结束的jns unsigned指令之后添加一些代码。否则它将继续执行指令。您在代码末尾遇到同样的问题。 jns unsigned指令只是告诉汇编程序停止汇编代码,它不会阻止程序执行。在第二个END返回后,您的程序将执行在内存中跟随它的任何指令。