0

我正在开发一个所谓的简单 pep8 程序,它将以 2 为底的数字转换为以 10 为底的数字。

以下是要求:

  1. 在 base 2 中请求用户输入
  2. 将基数 2 值转换为十进制并输出。
  3. 最后循环并询问用户是否要输入另一个值。如果是这样,请再次提问,否则显示消息“完成”(或类似的内容)

到目前为止,我正在尝试读取一个字符并将其存储为字符串。

谁能帮忙!

谢谢你。

             BR      main        
letter:  .BLOCK  1           ;global variable #1c
;
main:    CHARI   letter,d    ;cin >> letter
         LDA     0x0000,i    
while:   LDBYTEA letter,d    ;while (letter != '*')
         CPA     '*',i       
         BREQ    endWh       
         CHARO   letter,d    ;   cout << letter
         CHARI   letter,d    ;   cin >> letter
         BR      while       
endWh:   STOP                
         .END
4

1 回答 1

1

将其存储为字符串会起作用,但这会使问题复杂化。

您可能在问题和答案之间的一个月内发现了这一点,但是您可以在阅读每个字符时使用算术左移运算来建立数字。

        BR  main            ;#include <iostream>
letter: .BYTE   0           ;char letter = 0;
number: .WORD   0           ;int number = 0;
                            ;int main() {
main:   CHARI   letter,d    ;   std::cin >> letter;
        LDA     0,i
        LDBYTEA letter,d
        CPA     '0',i       ;   if (letter == '0') {
        BRNE    notzer
        LDA     number,d
        ASLA                ;       number *= 2;
        STA     number,d
        BR      main        ;       main();
notzer: CPA     '1',i       ;   } else if (letter == '1') {
        BRNE    end
        LDA     number,d
        ASLA                ;       number *= 2;
        ADDA    1,i         ;       number++;       
        STA     number,d
        BR      main        ;       main();
                            ;   } else {
end:    DECO    number,d    ;       std::cout << number;
        STOP                ;       return 0;
        .END                ;   }
                            ;}

不过,这不一定是解决问题的最简单或最好的方法,我只是想让它易于理解。

例如,您可以将数字保留在索引寄存器中,直到您准备好打印它,从而节省您的行数/时间,无需使用累加器加载和存储它。(你可以只使用 ASLX 和 ADDX 1,i)

于 2016-12-11T12:47:00.263 回答