4096 (메모리 페이지의 주소와 일치하는) 변수의 주소를 가져오고 싶습니다. 는 x86 어셈블러 결과에서이 파일을 컴파일하려고Gnu AS 표현식에서 '&'연산자를 사용할 수 없습니다.
.data
v: .zero 0x100
vpage: .long v & 0xfffff000
: 이것은 내가 (V 변수이며 vpage이 페이지의 주소를 포함한다)이 보이는 짓을 오프라인으로 계산 될 수있는 일을하기 때문에 다음과 같은 오류 :
test.S: Assembler messages:
test.S:3: Error: invalid sections for operation on `v' and `L0'
왜 가스가 거부 할
이를 계산하기 위해? 이제 이상한 부분 : '&'을 "+"로 바꾸면 코드가 컴파일되고 주소가 링크 후에 올바르게 계산됩니다. 이 행동의 이유에 대한 힌트 또는 그것을 고치는 방법은 매우 환영 할 것입니다.
가스는 일반적으로 백엔드 어셈블러로 사용됩니다. 컴파일러는 이미 모든 상수 표현식을 평가할 것입니다. –
@Marco이 경우 NASM 또는 YASM으로 전환하는 것이 최선이라고 생각합니다. – Gnurou
중요하지 않은 금액의 경우 : 예. 또는 컴파일러 인라인 어셈블러를 사용하고 컴파일러에서 수정하도록하십시오. –