Assembly 代码为';我跳得不对

Assembly 代码为';我跳得不对,assembly,hla,Assembly,Hla,我目前正试图完成我的任务,但我遇到了一些问题 这是作业 就目前而言,当我输入“CC”时,我只能返回 Feed me(2 hex digits with the bits prsseeee):CC Fall Semester Total Fees = $ 97 我该什么时候回来 Feed me(2 hex digits with the bits prsseeee): CC Fall Semester 12 units CA Resident Parking Total Fees

我目前正试图完成我的任务,但我遇到了一些问题

这是作业

就目前而言,当我输入“CC”时,我只能返回

Feed me(2 hex digits with the bits prsseeee):CC
Fall Semester
Total Fees = $ 97
我该什么时候回来

Feed me(2 hex digits with the bits prsseeee): CC 
Fall Semester 
12 units 
CA Resident 
Parking 
Total Fees = $ 688
这是我到目前为止所做的

我也只允许使用

**

到目前为止

program SMCFee;
    #include( "stdlib.hhf" );
    static
        total : int32 := 0;

begin SMCFee;

    stdout.put("Feed me(2 hex digits with the bits prsseeee):" );
    stdin.get(BL);

    ror(4, BL);
    and(%0000011, BL);

    cmp(BL, %00);
    je Fall;
    cmp(BL, %01);
    je Winter;
    cmp(BL, %10);
    je Spring;
    cmp(BL, %11);
    je Summer;

    Fall:
        stdout.put("Fall Semester",nl);
        add(50, total);
        ror(1, BL);
        and(%0000001, BL);
        cmp(BL, 0);
        je NoFallResident;
        cmp(BL, 1);
        je FallResident;
            FallResident:

                rol(6, BL);
                and(%00001111, BL);
                mov(BL, AL);
                stdout.put(AL,nl);
                stdout.put("CA Resident");
                FallUnitCheck:
                cmp(AL, 0);
                jle FallParkingCheck;
                add(46, total);
                dec(AL);
                jmp FallUnitCheck;
                    FallParkingCheck:
                        ror(7, BL);
                        and(%0000001, BL);
                        cmp(BL, 0);
                        je NoFallResidentParking;
                        cmp(BL, 1);
                        je FallResidentParking;
                        FallResidentParking:
                            stdout.put("Parking",nl);
                            add(85, total);
                            jmp zend;
                        NoFallResidentParking:
                            jmp zend;
            NoFallResident:
                ror(1, BL);
                and(%0000001, BL);
                cmp(BL, 0);
                je FallNoResidentParking;
                cmp(BL, 1);
                je NoFallNoResidentParking;
                    FallNoResidentParking:
                    NoFallNoResidentParking:


    Winter:
        add(47, total);
        jmp zend;


    Spring:
        add(47, total);
        jmp zend;


    Summer:
        add(50, total);
        jmp zend;

    zend:
        stdout.put("Total Fees = $ ",total);
end SMCFee;
您忘记了二进制前缀%。前两个比较不需要,但后两个错误地与十(10)和十一(11)比较


我认为你有一些错误:

  • 错误的基数前缀[由@Fifoernik注释]
  • 放错位置的JMP指令
  • 对如何和正在被用于“掩蔽”的误解
  • 掩蔽后输入数据丢失
学习处理二进制值最初是不直观的

这些是绿色汇编语言程序员的典型错误。 通过他们参加跑步项目确实有助于建立信心。 多做点,你会做得很好的


学会在心里模拟你的代码。这会得到很好的回报。

只要看看你的代码,“jmp zend”(一种无条件的jmp)就会让遵循jmp的代码变得毫无用处,因为该代码无法执行。如果您希望执行该代码,那么可能是因为您没有足够长的时间盯着代码看,也可能是因为您不了解jmp的功能。如果你的死代码是为了让它保持死状态,人们会说你的程序写得不好。希望这能给我们一个线索;你的良好反应可能会给你进一步的建议。哦,天哪,我是个弱智。我想我只是错过了我写的
jmpzend
,但是现在当我把CC放进去时,我得到的不是正确的响应。我继续并更新了第一个postA提示:当您和到BL时,您清除了BL中的所有位,除了启用的(“1”)掩码位。如果你不明白这一点,就去仔细阅读。如果你这样做。。。然后你的程序进入秋季代码,计算出它是秋季代码,但现在BL除了这学期的比特之外什么都没有。您需要获取输入的新副本,并检查它。术语“掩码”指的是与您正在使用的二进制位模式类似的二进制位模式(想象一个油漆掩码,它将喷涂模式控制在您想要的位置)。术语“屏蔽”意味着使用AND指令提取所需的位。屏蔽后,只要您记得其他位已“消失”(归零),您就可以在内容中使用屏蔽位。在显示有问题的代码后,您可能应该添加另一个块,最终结果显示如何修复它。很好,尽管代码仍然不起作用=/我已经更新了第一篇文章
cmp(BL, 00);
je Fall;
cmp(BL, 01);
je Winter;
cmp(BL, 10);
je Spring;
cmp(BL, 11);
je Summer;
cmp(BL, %00);
je Fall;
cmp(BL, %01);
je Winter;
cmp(BL, %10);
je Spring;
cmp(BL, %11);
je Summer;