2012-03-02 51 views
0

我想測試我的字符串長度功能的MIPS。我想喜歡「快樂」或參選像這樣的詞來測試它.....但我不知道如何做到這一點。學習如何將它打印到屏幕上也是非常好的。我怎麼整字加載到寄存器中,所以我可以在MIPS測試我的功能呢?

這是我的代碼:

.globl StringLength 

StringLength: 
li $t0,0 

StringLengthLoop: 
lb $t1,0($a0) 
beq $t1,$zero, StringLengthExit 
add $a0,$a0,1 
add $t0,$t0,1 
j StringLengthLoop 

StringLengthExit: 
move $v0, $t0 
jr $ra 

回答

1

要打印到控制檯,你將有采用了許多system calls可用一個您的系統上。 (確切的系統調用值取決於您的系統/仿真器。)

字符串可以放置在可執行文件的數據段中,並帶有可用於獲取字符串起始地址的標籤。 「.ascii」是指一個非空終止字符串,而「.asciiz」是指空終止字符串。

這裏是如何打印一個字符串和一個整數值,一個簡單的例子:

 .data 
str: .asciiz "This is a string\n" # a null-terminated string to be printed. 
     .align 2      # make sure it's aligned to word boundary 
int: .word 1234     # some number 

     .text 
     .global main 
main: 
     la $a0, str  # load the address of the start of our string 
     li $v0, 4   # syscall 4 usually means print string 
     syscall 

     la $t0, int  # the address of our number 
     lw $a0, 0($t0)  # get our number 
     li $v0, 1   # syscall 1 usually means print int 
     syscall 

     li $v0, 10   # syscall 10 usually means exit 
     syscall    # exit. 

一個更實際的例子:

如果我是利用你的函數,它會是這個樣子(假設它遵循在$ VN在$ aN的參數和返回值標準調用約定的確如此哪個。)

 .data 
str: .asciiz "This is an example" 

     .text 
     .global main 
main: 
     la $a0, str  # first argument, a pointer to the string 
     jal StringLength # call StringLength(str) 

     # print the length 
     add $a0, $zero, $v0 
     li $v0, 1 
     syscall 

     li $v0, 10 
     syscall    # exit 

大多數仿真器使用相同的系統調用。 Here is a list of system calls for the MARS simulator

最後請注意:如果您打算使用加載的LW指令值,請一定要告訴彙編,將其調整到和我一樣與第一例子字的邊界(.align僞2)。

相關問題