왜 이런 방식으로 가스 작동 .equ
지시하지 않습니다EQU 지시어는
.equ Mark64, 8(%rsi)
그것을이 (주에서 작동하는 동안 : .text
섹션, Mark32
이 위치하고, R로 설정 /에서 w 이 경우) :
Mark32 EQU DWORD PTR [ESI + 4]
은 어떻게 가스 Mark64
일 (.set
도 작동하지 않습니다)를 할 수 ?
미리 감사드립니다.
왜 이런 방식으로 가스 작동 .equ
지시하지 않습니다EQU 지시어는
.equ Mark64, 8(%rsi)
그것을이 (주에서 작동하는 동안 : .text
섹션, Mark32
이 위치하고, R로 설정 /에서 w 이 경우) :
Mark32 EQU DWORD PTR [ESI + 4]
은 어떻게 가스 Mark64
일 (.set
도 작동하지 않습니다)를 할 수 ?
미리 감사드립니다.
데이터 섹션 : Mark64_x
코드 섹션에서 단지 레이블입니다
MarksTable:
.quad Mark64_1
.quad Mark64_2
.quad Mark64_3
. (일부 조립 언어에서
callq *0x8(%rsi)
'movq MarksTable, % rsi'는 첫 번째 요소의로드입니다. 'lea MarksTable (% rip), % rsi' 또는'mov $ MarksTable, % esi'를 사용하십시오. 또는 더 좋게,'call * 8 + MarksTable (% rip)'. –
예를 들어 MASM을 :이 같은 rsi
에서 예를 들어 Mark64_2
에 액세스 할 수 있습니다 결국
movq MarksTable, %rsi
:
는 그리고 난 그냥 레지에 내 MarksTable
을 배치 한) equ
은 대체 텍스트입니다.
그러나 GAS에서 .equ
은 MASM에서 foo = 3
과 같은 숫자 상수입니다. 텍스트 대체의 경우 C 사전 처리기 #define Mark64 8(%rsi)
을 사용하십시오. 파일 이름을 foo.S
으로 지정하여 gcc가 어셈블하기 전에 CPP를 통해 실행합니다.
equ
또한 숫자 조립시 상수를 정의하고 %define
을 텍스트 대체에 사용합니다. 8(%rsi)
에 Mark64을 정의
그리고 BTW는 나쁜/혼란 생각처럼 보인다. 사람들은 실제로 레지스터 참조를 포함하기 위해 심볼 이름처럼 보이는 것을 기대하지 않습니다. 의미있는 이름으로 숫자 마법 상수 8
을 정의하는 것이 좋을 수도 있습니다.
사전 처리 된 어셈블리와 '#define'을 사용하십시오. 또는'.equ Mark64, 8 '과 같은 오프셋을 정의한 다음, 예를 들어'Movl Mark64 (% rsp), % eax'를 할 수 있습니다. – Jester
@fuz있어? '.equ'는 텍스트 대체가 아닌 심볼을 정의하고'8 (% rsp)'는 심볼에 유효한 값이 아니기 때문에 작동하지 않습니다. – Jester
@fuz, 네, 시도했습니다. 쉼표는 오타입니다. 여전히 작동하지 않습니다. –