我正在做练习考试题
问题执行该程序时,用户输入两个数字。 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
Using Lc3组装作为参考,我能够弄清楚这个程序的作用(从上到下)
- 开始将代码放置在内存地址 x3000 处
- 让用户输入一个字符,调用这个字符。寄存器0将存储k的值
- xGuess -> R2
- (k + xGuess) -> R1。
- 让用户输入另一个字符,称这个字符为c。 c->R0
- (c + xGuess) -> R0
- ((c + xGuess) + (k + xGuess))-> R0
所以最后,R0将存储k + c + 2 * xGuess的值。
这是我在 Lc3 中的相同运行(如下所示)(xGuess = 4,k = 97,c = 98)
这证实了我的怀疑,因为 R0 存储的是 97 + 98 + 2 * 4 或 203。
有谁知道“剥离 ASCII 模板”这个问题是什么意思?我不太明白这个措辞,因为 ASCII 的值会影响最终存储在 R0 中的值。
正如您所注意到的,操作是对输入字符的 ASCII 值执行的。在汇编中,如果您从键盘读取字符,您实际上会在寄存器中获得它们的 ASCII 值,所以假设您输入 2 和 3 并想要将它们相加,那么您实际上是在相加50+51
。您必须先从每个输入的字符中减去 48,因为 48 是 ASCII 中的 0 字符值。我认为这就是所谓的“剥离 ASCII 模板”。然后,如果要将计算结果显示在屏幕上,则必须将结果加上48(仅当输入字符且结果为个位数时,数字越大,运算次数越多)。然而,这对于字符 0-9 是有意义的。我不知道你为什么要对字母字符进行计算,比如你的例子中的 a 和 b 。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)