为什么我的MARIE程序添加项变成字母而不是数字?

问题描述 投票:0回答:1

我是汇编语言的新手,我不确定为什么我的代码无法正常工作。

我正在以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```
assembly ascii instruction-set marie
1个回答
1
投票

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

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

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

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

但是,一旦处于处理字符的模式,如果要打印多个数字(例如,求和> 10,则需要从整数到ASCII的真实转换(也许反之亦然)。) >


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

© www.soinside.com 2019 - 2024. All rights reserved.