汇编-用于检查有效数字输入的If语句未正确执行

时间:2019-03-24 10:29:11

标签: assembly inline-assembly

因此,对于单任务,我们必须使用C ++和Assembly创建一个加密/解密程序。该程序使用6个字母的字符串,然后执行程序的加密/解密部分。这两个部分均正常工作,但我们还必须检查输入的字符是否为字母数字。我试图先通过先检查一个有效数字来开始,然后再添加对字母的检查。这是我到目前为止的代码;

void get_char(char& a_character)
{
    a_character=(char) _getwche();

    __asm
    {
        push eax               // save value to the stack for later use
        mov eax, a_character   // store the character in EAX
        cmp eax, 0x30          // compare character with '0'
        jl invalid             // (character < 0) and is therefore invalid
        cmp eax, 0x39          // compare character with '9'
        jg invalid             // (character < 0) && (character > 9) so it is therefore invalid
        jmp valid              // character is within the accepted range and is therefore valid
    }

    __asm
    {
    invalid:
    }

    cout << "\n invalid > ";

    __asm
    {
    valid:
        pop eax
    }

    if (a_character == '\r' || a_character == '\n')
    {
        a_character = dollarchar;
    }
}

我希望代码检查输入的值是否小于0,如果是,则跳转到无效部分并打印一个字符串,指出该值无效。然后对> 9也执行相同的操作。但是由于某种原因,无论我输入什么字符,它都只会打印无效的字符串。我确信这是一个非常简单的解决方案,但我只是无法弄清楚出了什么问题,而我尝试的任何解决方案似乎都可能导致另一个问题。

谢谢。

0 个答案:

没有答案