2014-01-11 27 views
2

在mips彙編中,如何比較一個寄存器(字節 - 我已經使用lb命令)和基於ASCII表的字符的內容?是否正確使用beq $ t0,45,L1,其中45個字符的十進制數字寄存器和ascii字符之間的比較

+0

什麼像樣的彙編程序將允許你寫的'BEQ $ T0, ' - ',L1' – Michael

+0

萬一我們不能使用''?我的意思是我們怎樣才能比較數字 – user3185493

+0

然後在ascii表中查找它。 – Michael

回答

1

我認爲有一件事會幫助您忘記任何數據類型的概念。因爲電腦不是那麼聰明。

你在問是否可以將$ t0與十進制值45進行比較 - 當然,你的不可以是。 MIPS處理器不知道任何關於十進制值45的內容。它只知道兩個數字:1和0.幸運的是,十進制值45可以表示爲一串1和0 - 準確地說,以8位。

然後,您想知道您是否可以將$ t0與ASCII字符' - '進行比較。 MIPS處理器不再瞭解有關ASCII字符的內容,而不瞭解十進制數字。幸運的是,ASCII standard沒有說「這是一個破折號」。它表示字符' - '映射到位模式0010 1101,我們知道它是十進制45.或十六進制0x2D - 但處理器不知道關於十六進制的任何內容。

這裏是你真正幸運的地方。您不必在1和0中編寫您的MIPS代碼。你可以,但你不必 - 至少在你完成那個特別的家庭作業後不要這樣做。 :)一些智能帥哥寫了一個名爲彙編器的東西,將您輸入的字符(例如beq $t0, 45, L1)轉換爲一組或多組32位二進制數字。如果這些帥哥真的很聰明,他們可能會確定彙編程序知道45和0x2D是一樣的,這也和ASCII字符' - '是一樣的。

(但是,是的......像@Konrad說,你不應該有第一貫穿火星等彙編的代碼?)

編輯:作爲@Patrik指出,beq有兩個寄存器,不一個註冊和一個立即。所以當然你會得到一個語法錯誤beq $t0, 45, L1。您首先需要將值45加載到另一個寄存器(可能是$ t8),然後beq $t0, $t8, L1

+0

感謝您的回答,首先。其次,我們使用的彙編程序在命令中發現一個語法錯誤:$ t0,45,L1,$ t0,' - ',L1,$ t0,00101101,L1 – user3185493

+0

@ user3185493看看@ Patrik的答案。我應該記住,'beq'需要兩個*寄存器*操作數,而不是寄存器和立即數。所以你需要將你的檢查值加載到一個寄存器中然後進行比較。 – RobertB

2

的原則是正確的,但如果有一個語法錯誤,你可以在寄存器中加載的字符代碼和比較寄存器:

li $t1, 45 
beq $t0, $t1, L1