2015-05-02 108 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