2012-07-25 162 views
1

我正在看彙編和MIPS指令集。這是我的基本的程序,我正在學習:學習MIPS彙編

.text 
    .globl main 
main: 
    li $t0, -10 # $t0 = -10 ("load immediate") 
    li $t1, -31 # $t1 = -31 ("load immediate") 
    li $t2, -10 # $t2 = -10 ("load immediate") 
    li $t3, -31 # $t3 = -31 ("load immediate") 

    #swap 

    xor $t0, $t0, $t1 
    xor $t1, $t0, $t1 
    xor $t0, $t0, $t1 

    addu $t2, $t2, $t3 
    subu $t3, $t2, $t3 
    subu $t2, $t2, $t3 

    li $v0, 10 
    syscall 

現在我想了解每個指令做什麼,因爲我可以運行在我的模擬器這個程序,它讓我不知道更多關於這個程序,它做什麼和我如何改變它來學習更多的裝配。您可否告訴我如何評論xor,addu和subu部分,以及系統調用的意思和第一部分.text和.blobl的主要內容?

我是不是真的比這更難了?您也可以向我提供MIPS彙編程序的教程。

+1

您應該查找MIPS指令集並自行解碼。 'syscall'用於調用打印輸出和獲取輸入的系統調用:具體指令從'$ v0'中讀取。 http://courses.missouristate.edu/KenVollmar/MARS/Help/SyscallHelp.html – nhahtdh 2012-07-25 05:14:03

+0

好的,感謝您的評論。我很奇怪爲什麼這個指令是「li」,現在是'lw'或類似的,我相信會顯示。 – 2012-07-25 06:45:35

回答

1

我會打破下來:

li是所謂的僞指令,彙編器將它分割成lui(負載上即時)和ori(或立即),從2 16位構建一個32位的值立即數。雖然可以使用lw,但它通常不會提供任何好處並且會破壞緩存行。

xor將只計算op1 = op2 XOR op3。在你的特殊情況下,我們使用Register Swapping $ t0和$ t1。

addusubu只會添加/減去op2和op3並將結果存儲到op1中。同樣,代碼中顯示的內容將交換兩個寄存器$ t2和$ t3。

syscall會陷入您的操作系統並執行某些特定功能。函數編號將存儲在$ v0中,因此您的示例將運行函數編號10,這對於「退出」似乎很常見。

+0

非常好。非常感謝! – 2012-07-25 14:44:56