剥离 ASCII 模板是什么意思?

What does stripping off the ASCII template mean?

我正在做一道练习题

问题 在执行该程序时,用户输入两个数字。 xGuess 的值是多少,以便我们可以剥离 ASCII 模板?解释一下。

.ORIG x3000
TRAP x23
LD R2, ASCII
ADD R1, R2, R0
TRAP x23
ADD R0, R0, R2
ADD R0, R0, R1
ASCII .FILL xGuess
.END

使用 Lc3 Assembly 作为参考,我能够弄清楚这个程序的作用(从上到下)

  1. 开始在内存地址 x3000 放置代码
  2. 让用户输入一个字符,调用这个字符。寄存器 0 将存储 k
  3. 的值
  4. xGuess -> R2
  5. (k + xGuess) -> R1.
  6. 让用户输入另一个字符,称这个字符为c。 c->R0
  7. (c + xGuess) -> R0
  8. ((c + xGuess) + (k + xGuess))- > R0

所以最后R0会存储k + c + 2 * xGuess的值。 这是我在 Lc3 中的相同 运行(如下所示)(xGuess = 4,k = 97,c = 98)

这证实了我的怀疑,因为 R0 正在存储 97 + 98 + 2 * 4 或 203。

有人知道"stripping off the ASCII template"的问题是什么意思吗?写法不太明白,因为ASCII的值会影响最后R0存的是什么值

如您所见,操作是对输入字符的 ASCII 值执行的。在汇编中,如果你从键盘读取字符,你实际上是在寄存器中获得它们的 ASCII 值,所以假设你输入 2 和 3 并想添加它们,那么你实际上是在添加 50+51。您必须首先从每个输入的字符中减去 48,因为 48 在 ASCII 中是 0 字符的值。我觉得这叫"stripping off the ASCII template"。然后,如果要在屏幕上显示计算结果,则必须将结果加48(仅当输入字符且结果为个位数时,数字越大操作越多)。但是,这对字符 0-9 有意义。我不知道你为什么要对字母字符进行计算,比如你的例子中的 a 和 b。