inline-assembly

    1

    1답변

    더 디버깅 가능한 상태로 seabios를 컴파일하려고하므로 인라인 함수를 취소하고 싶습니다. 이렇게하려면, 나는 -fon 인라인 컴파일 플래그를 추가했지만 그때 컴파일 오류가 발생합니다 : asm volatile( "calll __call16big_from32" : "+a" (callregs), "+m" (*callregs) :

    2

    1답변

    newlib 스텁에서 일부 syscalls를 호출해야하며 현재 구현에서는 읽을 수없고 끔찍한 C 매크로를 사용합니다. template <int nr, typename RETTYPE, typename PARAM1> inline RETTYPE syscall(PARAM1 p1) { register PARAM1 r0 asm("r0") = p1;

    2

    1답변

    일부 주소에있는 다른 함수를 호출하는 함수를 만들려고합니다. 다른 함수를 호출하는 함수는 (char *로) 전달 된 args 유형, 반환 유형 및 인수 자체 만받습니다. 하지만 함수를 호출 할 때마다 또는 호출 한 후에 갑자기 충돌이 발생합니다. function callfunc(name,...) --Lua local func=_G[name]; func(

    3

    1답변

    나는 학교용 보조 장치의 일부로 작은 OS를 작성하고 있지만 키보드 입력을 얻으려면 오히려 막혔다. osdev.org (gcc 크로스 컴파일러, GRUB 부트 로더, ld 링커)에서 Bare Bones 자습서를 사용하고 있습니다. 보호 모드이기 때문에 BIOS 인터럽트를 입력에 사용할 수 없기 때문에 자체 인터럽트 핸들러를 작성해야합니다. ?)하지만 osd

    0

    1답변

    나는 예를 들어 여러 구조체/노동 조합을 가지고 : 내가 예를 들어, 인라인 어셈블리에서의 요소에 액세스 할 필요가 union { uint8_t X; struct __attribute__((packed, aligned(1))) { uint8_t A : 1; uint8_t B : 1; uint8_t C

    0

    1답변

    에 상수의 주소를 삽입 : iowrite32(mem1, value1); 어셈블리 코드로합니다. ioremap 사용하기 위해 int * mem1; : MEM1 같이 정의된다. 이 나는이 코드를 작성했습니다 : asm volatile( "mov %[whr],%[wht]" : [whr] "=r" (mem1) : [wht] "r"

    0

    1답변

    일부 인라인 어셈블리를 탐구하려고합니다. 흥미로운 부분이지만 문서가 부족하고 newb가 친숙하지 않습니다. 예상대로 이 코드는 작동 올바르게 { int other_var=3; asm volatile ( "mov $3,%0\n\t" "roll $2,%0;" :"=r"(other_var) :"r"(other_var) )

    0

    1답변

    컴파일러가 내 C 코드에서 인라인 어셈블리를 매개 변수화하여 레지스터를 자동으로 선택하도록하고 싶습니다.하지만 몇 가지 문제가 있습니다. 누구가 잘못 될지 말해 줄 수 있습니까? 내가 주석 처리 한 코드를 사용하면 (% xmm0과의 제휴를 강요 함) 컴파일하여 예상 결과를 얻습니다. 또한 /tmp/ccJxmSbm.s: Assembler messages:

    1

    1답변

    내가 가지고 GNU C 프로그램에서 다음 코드를 void *segment = malloc(1024); asm volatile("mov $%0, %%rax" : : "r" (segment)); 그리고 다음과 같은 오류 얻을 : %rax 뭐가 문제 Error: illegal immediate register operand %rax 를?

    0

    1답변

    인라인 asm을 사용하여 my_simple_mutex를 작성하고 있습니다. 주석 처리 된 아래 코드 부분은 잘 작동하지만 cmpxchg가있는 버전은 segfault로 종료됩니다. cygwin에서 g ++ 4.8.2를 사용하고 있습니다. void simple_mutex::spin_lock(){ /*asm ("spin_lock:\n\t"