2014-10-02 1 views
0

현재 코드에서 세그먼트 오류 오류가 발생합니다. [edx]/edx/% [edx]/[% edx]를 변경하는 많은 변형을 시도했지만 성공하지 못했습니다. edx 레지스터 내용을 null로 설정하려고합니다. 이것은 gcc를 사용하는 .c 파일입니다. 리눅스에 인텔 프로세서..c 파일에서 asm 함수를 사용하여 리터럴을 레지스터에 삽입하는 방법

#include <stdio.h> 
int main() 
{ 
    asm("mov %edx, /0"); 
    return 0; 
} 
+2

당신은'$ 0 % edx'를 대신 MOVL하지 말아야 :이 페이지에서보세요? 그리고 당신은 GCC에게 EDX를 clobbered했다는 사실을 알려줘야한다고 생각합니다. – 5gon12eder

+0

현재 설정에 대해 mov1 또는 다른 기능을위한 mov1이 없습니다. –

+1

마지막 문자는 소문자 L입니다. – 5gon12eder

답변

2

나는 첫 번째 레지스터가 대상이 인텔 구문 (GCC에서 사용) & T 구문 AT 혼합 생각합니다.

http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html

+------------------------------+------------------------------------+ 
|  Intel Code    |  AT&T Code      | 
+------------------------------+------------------------------------+ 
| mov  eax,1    | movl $1,%eax     | 
| mov  ebx,0ffh    | movl $0xff,%ebx    | 
| int  80h     | int  $0x80      | 
| mov  ebx, eax    | movl %eax, %ebx    | 
| mov  eax,[ecx]   | movl (%ecx),%eax    | 
| mov  eax,[ebx+3]   | movl 3(%ebx),%eax    | 
| mov  eax,[ebx+20h]  | movl 0x20(%ebx),%eax   | 
| add  eax,[ebx+ecx*2h]  | addl (%ebx,%ecx,0x2),%eax  | 
| lea  eax,[ebx+ecx]  | leal (%ebx,%ecx),%eax   | 
| sub  eax,[ebx+ecx*4h-20h] | subl -0x20(%ebx,%ecx,0x4),%eax | 
+------------------------------+------------------------------------+ 
+0

제안 해 주셔서 감사합니다. –

관련 문제