0

我是汇编新手,我不确定为什么我的代码不起作用。

我用ASCII格式输入和显示,我可以看到1和3,但是为什么没有显示加法和?

我的程序只是假设执行加法。并显示如下内容:

'>1+3=4

如果输入是 1 和 3,那么如果用户输入 ! 它停止,否则循环回来。


Loop,Load    Greater
    Output      /for the ">" symbol

    Input 
    Output
    Store    X  /Taking input, storing and displaying 1st operand

    Load    Addr
    Output      /Loading and displaying "+"

    Input
    Output
    Store    Y  /Inp, str, displaying 2nd operand

    Load    Equal
    Output            /Display "="

    Load     X
    Add    Y
    Output       /Adding then displaying sum

    Input
    Store   Cond
    Skipcond     800
    Jump     Loop

    Halt

Greater,    DEC 62  
X,          DEC 0
Addr,       DEC 43
Y,        Dec 0
Equal,    Dec 61
Cond,      DEC 0```
4

1 回答 1

2

为了获得类似的字符!,您需要将模拟器置于接受 unicode 字符而不是数字(十六进制/十进制/二进制)的输入模式。当然,为了打印像>and这样的字符,=您还需要为 unicode 配置输出。

现在您正在使用 ascii/unicode 输入和输出,处理字符是游戏的名称。(多位数字是字符序列。)

ascii 数字1的值为 49,3为 51。您将 49 + 51 相加得到 100,这是小写的 ascii 代码d。您需要减去一个 ascii 0(即 48),然后您将得到 52,即 ascii 4

如果您想要数值 4,则必须0从两个输入数字中减去 (48)。如果您想将总和值打印为 ascii 中的数字,则需要在该结果中添加 48。在这种情况下,这将是 48 的两个减法和一个相同的加法 - 因此捷径,仅减去一个 48 并且数字将打印。

但是,一旦您处于处理字符的模式,如果您想打印多个数字 - 即总和 >= 10 - 您将需要从整数到 ascii 的真正转换(反之亦然)以便根据需要打印尽可能多的数字。(仅供参考,在不同的语言中有很多这样的例子,有时称为itoaand atoi- ascii to int 和 int to ascii 分别。)


要进行测试,!您需要减去 的 ascii 代码!,即 33,然后是一个SkipCond 000/Jump Loop测试零并跳过零(等于!)的反向分支的序列。

于 2020-06-13T23:47:44.667 回答