Pep8 - Base 2到​​Base 10转换器

时间:2016-11-17 15:45:43

标签: assembly pep8-assembly

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

以下是要求:

  1. 在base 2中询问用户输入
  2. 将base 2值转换为decimal并输出。
  3. 最后循环并询问用户是否要输入其他值。如果是这样再次提出问题,否则显示消息“已完成”(或类似的事情)
  4. 到目前为止,我正在尝试读取一个字符并将其存储为字符串。

    任何人都可以提供帮助!

    谢谢。

                 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
    

1 个答案:

答案 0 :(得分: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)