2015-05-02 159 views
1

我工作的一个练习考试问题剥离ASCII模板是什么意思?

的问题 在这个程序中,用户输入两个数字的执行。 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. xGuess→R2
  4. (k + xGuess)→R1。
  5. 让用户输入另一个字符,称这个字符为c。 C-> R0
  6. (C + xGuess) - > R0
  7. ((C + xGuess)+(K + xGuess)) - > R0

所以最终,R0将存储的值k + c + 2 * x猜测。 这里是LC3我的相同的运行(如下所示)(xGuess = 4,K = 97,C = 98)

enter image description here

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

有没有人知道什么问题意味着“剥离ASCII模板”?我不太理解措辞,因为ASCII的值最终会影响R0中存储的值。

回答

3

正如您所注意到的,操作是在输入字符的ASCII值上执行的。在汇编中,如果你从键盘读取字符,你真的会在寄存器中获得它们的ASCII值,所以假设你输入2和3并且想要添加它们,那么你真的添加了50+51。您必须首先从每个输入的字符中减去48,因为48是ASCII中0个字符的值。我认为这被称为“剥离ASCII模板”。然后,如果要在屏幕上显示计算结果,则必须将48返回结果(仅当输入的字符和结果为单个数字时,对于更大的数字,则涉及更多的操作)。但是,这对于字符0-9是有意义的。我不知道你为什么要计算字母字符,比如你的例子中的a和b。

+0

啊,我明白了,谢谢!否定ASCII – committedandroider

+0

的影响你可以看看这个吗? http://stackoverflow.com/questions/30007738/how-does-lea-instruction-store-address-of-a – committedandroider