2016-06-13 2 views
0

Nasm에서 C 스타일 유니온을 복제해야하지만 방법을 찾을 수 없습니다. r_ax가 r_eax의 하위 16 비트와 동일한 메모리 위치에 있어야 여기서NASM에서 어떻게 조합을 만드나요?

제가

r_eax dd 0 
r_ax dw 0 

필요하다.

union RegType { 
    long eax; 
    short ax; 
} reg_a; 

내가 NASM이 변수 크기에 대해 걱정하지 않는 것을 이해하지만, 난 여전히 다른 참조/변수 이름을 사용할 수 있도록하고 싶습니다 :

는 C에서이 될 것입니다.

답변

1

정말 쉽습니다. EQU 지시어는 "이 기호를 다른 기호와 동일하게"하는 것을 의미하므로 예제에 r_ax EQU r_eax을 간단하게 쓸 수 있습니다.

당신이 NASM의 "지역 표기를"사용하는 경우에도 작동이 (내가보기 엔 추천하는 ...)

STRUC Reg_A 
    .eax RESD 1 
    .ax EQU .eax 
    .al EQU .ax 
    .ah EQU ????? ; Ummm! 
ENDSTRUC 

그래도 난이로 재 배열 할 것 :

STRUC Reg_A 
    .al RESB 1 
    .ah RESB 1 
    .eah RESW 1 ; Not a real symbol - but NASM won't allow unnamed members 
    .ax EQU .al 
    .eax EQU .ax 
ENDSTRUC 
+0

감사합니다! 질문을 따르십시오 :이 정보는 어디에 있습니까? 나는 꽤 많은 시간을 인터넷 검색을 위해 인터넷 검색과 다양한 문서 검색에 썼지 만 찾지 못했습니다. –

+0

짧은 대답은 http://www.nasm.us/의 NASM 문서입니다. 더 긴 대답은 고통스런 경험입니다. 나는 단지 한 가지 이유 때문에 NASM을 싫어합니다. http://wiki.osdev.org/JohnBurger:NASMCritique를보십시오. 하지만 모든 종류의 바로 가기를 허용합니다 ... –