DR (디버그 레지스터) ID 번호를 받고 해당 DR 레지스터의 값을 반환하는 함수를 만들고 싶습니다. (DR0의 예) 같은견적 정의 내에서 변수 사용
뭔가 :
uint64_t readdr(uint8_t id)
{
uint64_t result;
asm volatile("movq %%dr0, %%rax\n" : "=a" (result));
return result;
}
이 예는 단지 DR0 레지스터를 읽고 결과를 반환합니다. 나는이 기능은 DR의이 그래서 같은 필요한 모든 작동하려면 :
#define read_dr(x, result) "movq %%dr(x), %%rax\n" : "=a" (result)"
을 한 후 나는 같은 것을 할 수 있습니다 :
asm volatile(read_dr(id, result))
은 그래서 모든 작동을 주어진 DR ID.
나는 그것이 작동하지 않는다는 것을 안다. 그러나 나는 그것이 내가 성취하려는 것을 분명히 해줄 것이라고 희망한다.
제안 사항?
문자열 화 및 연결 연산자를 확인하십시오. 참조 https://gcc.gnu.org/onlinedocs/cpp/Concatenation.html (가능한 것은 확실하지 않지만 그 경우 가능). –
'id'가 정수 리터럴이 아니라 변수이기 때문에 define이 도움이되지 않습니다. 따라서 어셈블리 명령어에 포함시킬 수 없습니다. – interjay
어셈블리에서 이러한 함수를 작성할 수 있습니까? –