어셈블리 언어 프로그래밍에 익숙하지 않고 숙련 된 어셈블리 언어 사용자에게 명백한 문제에 직면 해 있습니다. 나는 100 바이트 버퍼를 가지고 있고 n = 1에서 5까지 매 n 번째 바이트의 합을 찾고 결과를 5 개의 정수 배열에 저장할 필요가있다. 이렇게하려면 내 C++ 코드에서 인라인 어셈블리를 사용해야합니다. I는 다음 코드를 작성 : 결과 끝에 그래서C++의 인라인 어셈블리를 사용하는 버퍼의 합계
void main()
{
char *buffer = new char[100];
int *result = new int[5]();
for (int i = 0; i < 100; i++)
buffer[i] = i;
char *start = buffer;
for (int k = 0; k < 20; k++)
{
for (int j = 0; j < 5; j++)
{
__asm
{
mov eax, start[j]
mov ebx, result[j]
add eax, ebx
mov result[j], eax
}
}
start += 5;
}
}
를 [0] [5], 버퍼 [0], 버퍼 버퍼의 합을 가져야한다 [10] ... [1] 것 및 결과 버퍼 [1], 버퍼 [6], 버퍼 [11] ...의 합계. 첫 번째 어셈블리 명령어 (mov eax, start [j])에서 액세스 위반 오류가 발생합니다. 누구든지 제가 한 실수를 찾아 낼 수 있습니까? 또한 누군가가 어셈블리 언어로 전체 루프 및 합계 부분을 작성하는 데 도움을 줄 수 있다면 큰 도움이 될 것입니다.
정말 원하는가요? 그게 아니기 때문에, 매 n 번째 바이트의 합계로 이해할 수있을 것입니다. – dornhege
어셈블리에서 수행 할 작업은 얼마입니까?어셈블리에 숫자 만 추가하고 있습니다. –
이것은 내가하고 싶은 것을 단순화 한 것입니다. 지금은 어셈블리에서 루프와 합계를 쓸 수 있다면 행복 할 것입니다. 나는 정상적인 C++ 코드에 비해 성능상의 이점이별로 없다는 것을 이해하지만,이 개념을 사용하려는 실제 시나리오는 약간의 이점을 가져올 수 있습니다. – Rahul