[問題] MIPS語言與C語言的問題

看板C_and_CPP (C/C++)作者 (Cobra)時間16年前 (2009/07/01 12:09), 編輯推噓3(304)
留言7則, 1人參與, 最新討論串1/1
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

07/01 13:53, , 1F
現在還有在考機械碼@@!? 還有*本來就是取指標裡的值吧
07/01 13:53, 1F

07/01 13:55, , 2F
另外題醒 MIPS一個指令是4個byte 而位移的話都是以bit來算
07/01 13:55, 2F

07/01 13:55, , 3F
因為可能會有像是char array之類的東西需要以bit來跳
07/01 13:55, 3F

07/01 14:00, , 4F
疑 但是bne是branch 那應該是答案錯了XD
07/01 14:00, 4F

07/01 14:06, , 5F
還有 後面兩行應該是你説的加位置才對 因為如果假設source
07/01 14:06, 5F

07/01 14:08, , 6F
和destination是暫存器位置 這暫存器的值就是記憶體位置
07/01 14:08, 6F

07/01 14:08, , 7F
會用+1是因為 C語言對記憶體位置的加減是以資料型態來算
07/01 14:08, 7F
文章代碼(AID): #1AIk6GpX (C_and_CPP)
文章代碼(AID): #1AIk6GpX (C_and_CPP)