현재 "SPARC Architecture, 어셈블리 언어 프로그래밍 및 C. Second Edition"이라는 책을 읽었습니다.문자열에 m4 중첩 된 정의를 설명하십시오.
define(loc, 0)
define(sto, 'loc: 44 $1 define('loc', eval(loc+2))')
건이며, 내가 첫 번째 라인을 이해한다 : 내가 이해하지 또는 특정 명령을 이해 할 수없는 오전 않는 책의 장소에 도착. 그러나 나는 정말로 두 번째 줄의 두 번째 주장을 이해하지 못한다. 이 책의 설명은 도움이되지 않습니다. 책을
: 우리는 먼저 심볼 LOC 정의한
여기값 0 위치 카운터를 나타내는 것이 기호는, 명령의 메모리 어드레스가 조립되어있는 것이다. 각 매크로 정의가 먼저 변경되어 loc의 현재 값을 인쇄 한 다음 loc을 loc와 명령을 저장하는 데 필요한 메모리 위치를 더한 값으로 다시 정의합니다.
매크로 인수는 숫자 값이 아닌 문자 및 문자열입니다. loc의 값을 다시 정의 할 때 우리는 또 다른 내장 매크로 eval을 사용합니다. eval은 문자열 인수를 사용하여 산술 표현식을 나타냅니다. eval은이 표현식을 평가하고 그 값을 숫자 문자열 형태로 반환합니다.
나는 위의 설명이 당신에게 완벽하게 들릴지 모르지만 내게는 아님을 알고 있습니다. 일부 내가 정확히 이해하지 못하는 것입니다 :
왜이 문자열입니다 : ': (LOC'평가 (LOC + 2)) '
이해가 안를 LOC (44) $ 1 정의'?
왜 loc가 있어야합니까?
왜, 44 $ 1 정의한 후, 또 다른 정의, "정의 ('LOC'평가 (LOC + 2)) '?
좋아, 내가 그것을 가지고 있지만, 왜'LOC 않는 지금 생각 : '처음에 주소를 인쇄? 이것은'loc :'와 같은가요? 전에 정의한 줄입니까? 아니면 인턴 명령입니까? – RnBandCrunk
예 'loc'와 같습니다.0부터 시작합니다 (정의 된 방식이므로). 그러면 각 매크로가 명령의 크기를 매크로에 추가합니다. 이 예제에서'sto'는 2 바이트 명령이므로'loc'는 2 씩 증가합니다. – Jester
아, 알았어요. 그들이 책에서 이미 이것을 알기를 기대하는 것은 재미 있습니다. 뭐든, 고마워. – RnBandCrunk