Сборка Pep / 8 — переключение оператора внутри цикла

Я пытаюсь преобразовать следующий код C ++ в сборку Pep / 8, но, похоже, он не работает, и я действительно не знаю, связано ли это с моими режимами адресации или есть большая проблема.

Вот пример, который использует оператор switch, но не внутри цикла: Ссылка на кодовую панель. Я также считаю, что у меня возникли проблемы с настройкой, чтобы значение в букве s сравнивалось со значением в регистре. Книга не особо касается переключателей, так что на самом деле это всего лишь метод проб и ошибок.

C ++

int main() {

char letter;
int countA = 0,
countB = 0,
countC = 0;

cin >> letter;

do {
switch (letter) {
case 'A' : countA++; break;
case 'B' : countB++; break;
case 'C' : countC++; break;
}
cin >> letter;
} while (letter != 'X');

cout << "Number of A's " << countA << endl
<< "Number of B's " << countB << endl
<< "Number of C's " << countC << endl;

return 0;

}

Пеп / 8

       BR main
main:   SUBSP 1,i
LDA 0,i
STA countA,d
LDA 0,i
STA countB,d
LDA 0,i
STA countC,d
CHARI letter,s      ; cin >> letter
LDX letter,s
ASLX
BR do
do:     BR cases,x
cases:  .ADDRSS caseA
.ADDRSS caseB
.ADDRSS caseC
caseA:  LDA countA,s        ; countA++
ADDA 1,i
STA countA,s
BR endCase          ; break
caseB:  LDA countB,s        ; countB++
ADDA 1,i
STA countB,s
BR endCase          ;break
caseC:  LDA countC,s        ; countC++
ADDA 1,i
STA countC,s
BR endCase          ; break
endCase: CHARI letter,s      ; } cin >> letter; } while...
ADDSP 1,i
while:  LDBYTEA letter,d    ; while (letter != 'X')
CPA 'X',d
BRNE do
endLoop: STRO msgA,d         ; cout << "Number of A's: " << countA << endl
DECO countA,s
CHARO '\n',i
STRO msgB,d         ; cout << "Number of B's: " << countB << endl
DECO countB,s
CHARO '\n',i
STRO msgC,d         ; cout << "Number of C's: " << countC << endl
DECO countC,s
CHARO '\n',i
STOP
msgA:   .ascii "Number of A's: \x00"msgB:   .ascii "Number of B's: \x00"msgC:   .ascii "Number of C's: \x00".end

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]