2
누구나이 코드 조각을 도와 줄 수 있습니까? 이 경우 ptrgrades가 가리키는 값을 사용하고 4 (정수 배열)를 곱하여 ptrfreq (절대 빈도가있는 배열)의 해당 값을 증가시켜 해당 값을 업데이트하려고합니다. 하지만 % eax 값이나 % 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