Код не прыгает правильно

В настоящее время я пытаюсь выполнить свое задание, но у меня есть некоторые проблемы.

Это назначение

https://i.imgur.com/UfilSVp.png введите описание изображения здесь

Как сейчас, когда я ставлю "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

Вот что я сделал до сих пор.

Мне также разрешено использовать только

** http://homepage.smc.edu/stahl_howard/cs17/FileManager/referenceguides/referenceguideiv.htm

до сих пор

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;

2 ответа

Решение

Я думаю, что у вас было несколько ошибок:

  • Неправильный префикс radix [отмечено @Fifoernik]
  • Неуместные инструкции JMP
  • Непонимание того, как AND используется для "маскировки"
  • Потеря входных данных после маскировки.

Обучение обработке двоичных значений изначально не интуитивно понятно.

Это довольно типичные ошибки программистов на зеленом ассемблере. Передача их в работающую программу действительно помогает укрепить доверие. Сделай намного больше этого, ты будешь очень хорош в этом.

Научитесь мысленно моделировать ваш код. Это окупается как золото.

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

Вы забыли двоичный префикс %. Первые 2 сравнения не нужны, но последние 2 ошибочно сравнивают с десятью (10) и одиннадцатыми (11)!

cmp(BL, %00);
je Fall;
cmp(BL, %01);
je Winter;
cmp(BL, %10);
je Spring;
cmp(BL, %11);
je Summer;
Другие вопросы по тегам