2009-12-13 3 views

답변

7

bss 섹션에는 실제 개체가있을 수 없습니다. 일부 어셈블러에서는 여전히 .bss 섹션으로 전환 할 수 있지만, 사용자가 수행 할 수있는 작업은 모두 x: . = . + 4입니다.

최근 대부분의 어셈블러에서 인텔 용 gnu에서 더 이상 .bss 지시문이 없으므로 일시적으로 bss로 전환하고 bss 심볼을 한 번에 .comm sym,size,alignment과 같이 만듭니다. 이것이 아마도 "bss 지시문이 인식되지 않음"또는 그와 비슷한 것으로 오류가 발생하는 것입니다.

그리고 당신도 함께 주소를 얻을 수 있습니다 :

lea woof, %eax 

또는

movl $woof, %eax 

업데이트 : 아하, 인텔 구문이 아니라 인텔 아키텍처. 확인 :

.intel_syntax noprefix 
    lea esi,fun 
    lea esi,[fun] 
    mov  eax,OFFSET FLAT:fun 
.att_syntax 
    lea  fun, %eax 
    mov  $fun, %eax 
.data 
fun: .long 0x123 

모든 lea 양식은 동일한 코드를 생성해야합니다.

+0

감사합니다. 매우 계몽적입니다. 하지만, 그것은 정말로 여기에 내 관심사가되는 bss 또는 데이터 섹션이 아닙니다. 나는 AT & T가 아닌 gnu INTEL 구문을 사용하여 주소에 레이블의 주소를로드하는 방법을 알아야한다. 나는 mov eax, woof 및 mov eax, dword ptr [woof]를 시도했지만, 둘 다 나에게 같은 결과를 준다. movl $ woof, % eax와 같은 것을하고 싶지만 gnu intel 구문을 사용하고 싶습니다. – jian2587

+0

감사합니다. DigitalRoss! 나는 lea도 사용하고 있었지만 mov를 사용하여 할 수 있는지 궁금합니다. 나는 OFFSET FLAT가 열쇠라고 여기는가? – jian2587

+0

오른쪽에는 여러 가지 주소 지정 모드가 있습니다. MOV는 즉시 주소를로드 할 수도 있고 주소의 내용을로드 할 수도 있습니다. 일반적으로 유닉스에서는'movl $ woof, % eax'와'movl woof, % eax'가 있지만 인텔 구문에서는 좀 더 진부합니다. 어쨌든 "예", lea 및 mov 모두 주소를로드 할 수 있습니다. – DigitalRoss