作者guanrulee (Cobra)
看板C_and_CPP
標題[問題] MIPS語言與C語言的問題
時間Wed Jul 1 12:09:49 2009
addi $v0, $zero, -1
loop: lw $v1, 0($a0)
addi $v0, $v0, 1
sw $v1, 0($a1)
addi $a0, $a0, 4
addi $a1, $a1, 4
bne $v1, $zero, loop <~~~請問這個換成機器語言是 5 3 0 -6嗎?
因為解答是 5 3 0 -20 好像不對吧^^"
第二個問題是換成C語言 count 是$v0 source 是$a0 destination 是$a1
則可寫成 count=-1
do
{
temp = *source ;
count = count + 1 ;
*destination = temp ;
*source = *source +1 ; <~~~~~
*destination = *destination +1 ; <~~~
}
這兩行為什麼要加* 不是暫存器內的位址+1嗎?
加了*怎麼好像是 是把記憶體內的DATA+1再存進去
有C高手可以來解釋一下嗎? 謝謝~
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.209.101
推 hilorrk:現在還有在考機械碼@@!? 還有*本來就是取指標裡的值吧 07/01 13:53
→ hilorrk:另外題醒 MIPS一個指令是4個byte 而位移的話都是以bit來算 07/01 13:55
→ hilorrk:因為可能會有像是char array之類的東西需要以bit來跳 07/01 13:55
推 hilorrk:疑 但是bne是branch 那應該是答案錯了XD 07/01 14:00
推 hilorrk:還有 後面兩行應該是你説的加位置才對 因為如果假設source 07/01 14:06
→ hilorrk:和destination是暫存器位置 這暫存器的值就是記憶體位置 07/01 14:08
→ hilorrk:會用+1是因為 C語言對記憶體位置的加減是以資料型態來算 07/01 14:08