2017-03-24 2 views
2

나는 다음과 같이 부트 program.The 내용을 코드하는 것을 시도하고있다 : ". ="은 AT & T 어셈블리 언어에서 무엇을 의미합니까?

.text 
balabala 
.globl _start 
_start: 
balabala 

.=_start+510 
.byte 0x55,0xaa 

그리고 그런데

, 나는 또한 ".byte 0x55,0xaa"라는 뜻을 이해 cannt? 기능이란 무엇이며 어떻게 작동합니까? 세부 사항이 많을수록 좋습니다.

+1

'.'은 현재 위치입니다. '='는 심볼에 값을 할당하므로'. = _start + 510'은 현재 위치를 '_start + 510'으로 설정합니다. – fuz

+1

'.byte 0x55,0xaa'는'0x55'와'0xAA'의 2 바이트를 정의합니다. 부트 섹터에서 offset +510과 +511의 두 값이 발견 된 경우를 제외하고 BIOS는 부트 섹터에 유효한 부팅 코드가 들어 있다고 생각하고 실행합니다 (디스크를 덮어 쓰는 경우 제외)/어떤 임의의 데이터에 의해 포맷 된 경우, "마술 마커"가 부트 섹터에 없기 때문에 BIOS가 잘못된 내용의 실행을 피하게됩니다. – Ped7g

+0

간단한 답변과 내 문제 해결! 정말 고마워요 –

답변

2

어셈블러는 데이터와 명령어를 바이트로 변환합니다. 컴파일러와 달리 어셈블리 명령어와 메모리는 일반적으로 1 : 1로 일치합니다. 그. 기호는 전통적으로 현재 프로그램 섹션의 시작에서 현재 오프셋을 나타내는 데 사용되었습니다.

가장 일반적으로 개체의 크기를 결정하는 데 사용됩니다.

해당 변형 예가 사용 :

SOMEDATA: 
    .byte 0x55,0xaa 

이 값 55 AA 2 바이트를 할당하고, 해당 데이터 위치를 내부 SOMEDATA 라벨을 할당한다.

나는 즉시 추가 한 경우 나중에

(이 경우 2) 할당 된 바이트 수를 나타내는 기호를 정의 할
SOMEDATA: 
    .byte 0x55,0xaa 
SOMEDATALENGTH = . - SOMEDATA 

. 일부 어셈블러에는 정교한 데이터 구조를 설명 할 수있는 복잡한 매크로 기능이 있습니다. 사용하기. 그러한 구조를 설정하는 데 매우 일반적입니다.

일부 어셈블러에서는. 기호.

_start: 
.=_start+510 
.byte 0x55,0xaa 

이렇게하면 할당자는 510 바이트 씩 증가합니다. 그런 다음 _start 위치와 값 55 및 AA가 제공된 2 바이트 사이에 510 바이트 갭을 생성합니다. 보통 간격은 0으로 채워지지만 어셈블러에 따라 다릅니다.

+0

양해 해 주셔서 감사합니다. 많은 유용한 정보를 주셨습니다! –