2015-12-18 33 views
2

對不起,有人可以幫助我嗎?我需要轉換所有的小寫字母,如「你好嗎?」以 「HELLO HOW ARE YOU?」,如何將MIPS彙編語言程序中的所有小寫字母轉換爲大寫字母語言程序

這是我到目前爲止有:

.data 
firsttyped: .asciiz "" 
newline: .asciiz "\n" 

.text 
main: 
    li $v0, 8 
    li $a1, 20 
    la $a0, firsttyped 
    syscall 

    li $v0, 4 
    li $t0, 0 

loop: 
    lb $t1, firsttyped($t0) 
    beq $t1, 0, exit 
    sub $t1, $t1, 32 
    sb $t1, firsttyped($t0) 
    addi $t0, $t0, 1 
    j loop 


exit: 
    li $v0, 4 
    la $a0, firsttyped 
    syscall 

    li $v0, 10 
    syscall 

有人可以幫我這個好嗎? 我需要防止下劃線e出現該錯誤。

順便說一句,我不明白psuedo代碼。

+0

謝謝風向標,但我怎麼沒拿到小寫強調E從句子的結尾來打印後? –

+0

查看答案我不是MIPS程序員,但我確實注意到'firsttyped'缺少存儲分配。 –

回答

3

您應該:

  • 的輸入緩衝區中的每個字符
  • 檢查是否是小寫字母
  • 跳躍的字符,如果它不是一個小寫字母
  • 使其上部預留空間情況下,如果它是小寫

這樣做你會: 替換.asciiz ""從firsttyped有:

firsttyped: .space 20 

addi $t0, $t0, 1之前添加以下行後beq $t1, 0, exit

blt $t1, 'a', not_lower 
bgt $t1, 'z', not_lower 

,並添加標籤not_lower

not_lower:  
+0

gusbro,我在輸入以下內容後仍然出現錯誤。 –

+0

@APS:什麼錯誤和您輸入了什麼? – gusbro

+0

在blt和bgt評論中指出該行太大。 –

1

作爲替代方案,你可以使用一個predfined翻譯256個字符的表,由輸入字符值索引,包含翻譯後的字符值,其中大部分是與輸入字符索引相同,但小寫到大寫轉換除外。例如,xlat_table ['A'] ='A'(不變),而你也有xlat_tbl ['a'] ='A'(轉換爲大寫)。

您可以使用其他程序爲表格創建源代碼或僅手動創建它。

使用A C實施例用於實際的表的部分:

unsigned char xlat_table[256] = { 
    0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, // index 0x00 
    0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, // index 0x08 
    ... 
    0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47  // index 0x40 
    ... 
    0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47  // index 0x60 
    ... 
    0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff}; // index 0xf8 

所以xlat_table [ 'A'] == xlat_table [0×41] == 'A',和xlat_table [ '一'] == xlat_table [0x61] =='A'。除[0x61]至[0x7A] == 0x41至0x5A之外的所有值==索引將小寫轉換爲大寫且不影響其他值。

我對MIPS

xlattbl .byte 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 
     .byte 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f 
     ... 

     la  %t3,xlatbl 
     ;  $t0 has next byte to translate 
     add  $t0,$t0,$t3 
     lb  $t0,($t0) 
+0

您可以使用更精確的代碼來輸入它嗎?我不喜歡僞代碼。 –

2

你嘗試將每個字母32號的猜測?在Ascii表中,字母'a'是數字65,字母'A'是數字97,所以'a'+ 32 ='A'。

如果你需要的代碼只是問,我會爲你寫。

親切的問候

相關問題