要打印到控制檯,你將有采用了許多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)。
來源
2012-03-02 04:59:27
Wiz