2
誰でもこのコードを手伝ってくれますか? この場合、ptrgradesが指す値を使用し、4(整数の配列)を乗算して、ptrfreq(絶対周波数の配列)の対応する値をインクリメントしてその値を更新したいとします。 しかし、%ediレジスタや%eax値で正しいアドレス値を使用するためにいくつか問題があると思います。あなたのプログラムを修正するにはアセンブリIA32:このコードで何が問題になっていますか?
movl ptrgrades, %esi # set esi pointer to grades
movl grades_length, %ecx # length of vector grades
l_freq:
movl ptrfreq, %edi # reset with inital addrs of pointer
movl (%esi), %eax # tmp = grades[i]
shll $2, %eax # multiply grade by 4
addl %eax, %edi # and add to the ptrfreq addrs
incl (%edi) # freq[i]++
addl $4, (%esi) # ptrgrade++
loop l_freq # loop while ecx != 0
'addl $ 4、(%esi)'の代わりに 'addl $ 4、%esi'を試してください。後者は 'grades [i] + = 4;'を行いますが、 'grades + = 4;'、 'grades'が' int * '、' ++ grades; 'です。 – Downvoter