Egloos | Log-in


인스트럭션을 추가 했는데 프로그램과 테스트의 복잡도가 낮아지다

Erlang으로 짬짬이 구현 중인 AVR 어셈블러

인스트럭션을 추가하면서 아래와 같이 오퍼랜드 변환을 인스트럭션 마다 하나 하나 구현해주었습니다. 당연히 테스트도 각 인스트럭션 마다 추가하였지요. 인스트럭션을 계속 추가하다보니 오퍼랜드 변환에 중복이 보였습니다.


instruction(Name) ->
case Name of
adc ->
{1, fun(Labels, A, {Rd5, Rr5}) -> {register_addr(Rd5), register_addr(Rr5)} end};
add ->
{1, fun(Labels, A, {Rd5, Rr5}) -> {register_addr(Rd5), register_addr(Rr5)} end};


그래서 아래와 같이 오퍼랜드 변환 함수를 빼내고 인스트럭션 정보에는 그 함수에 대한 레퍼런스를 넣었습니다. 코드 가독성이 높아졌습니다. add 인스트럭션은 크기가 1 Word이고 오퍼랜드는 Rd5, Rr5를 받는다. 또 각 인스트럭션을 모두 테스트할 필요도 없어졌습니다. operand_XXX만 테스트를 하면 되지요.


operand_rd5rr5(Labels, A, {Rd5, Rr5}) ->
{register_addr(Rd5), register_addr(Rr5)}.

instruction(Name) ->
case Name of
adc ->
{1, fun operand_rd5rr5/3};
add ->
{1, fun operand_rd5rr5/3};


오퍼랜드 변환 함수의 적적한 이름을 찾지 못해 그냥 오퍼랜드 이름과 크기로 이름을 짖고 있습니다. 아직 개념 정립이 안되었기 때문이죠. 오퍼랜드의 형식으로 무리를 지을 수 있을 겁니다. 그럼 적절한 이름이 떠오르겠지요.

by 만성피로 | 2007/03/31 11:26 | Erlang | 트랙백 | 덧글(0)

트랙백 주소 : http://colus.egloos.com/tb/3256155
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶