2012-07-02 3 views
0

카운터가있는 LC-3 프로그램이 있습니다. TRAP x21을 사용하여 카운터를 인쇄 할 수 있습니다. 그러나 카운터 번호가 두 자릿수이면 내 프로그램이 작동하지 않습니다.LC-3 2 자리 숫자 인쇄 방법

예 : 9 완벽하게 인쇄,하지만 같은 19

나는 내 등록 인쇄하기 전에 내가 2로 나누어 숫자를 잘라하는 루프를 필요로하는 카운터를 포함하는 것으로 추측하고있다 (동일하지 않습니다 십진수는 10으로 나누고, 2는 2 진수로 나타냄). 그렇다면 digit1, digit0을 출력 할 것입니다. 나는 문제가있다. 어떻게 LC-3으로 나눌 수 있는가? 오른쪽 교대? 그것은이 문제와 내 지식을 넘어서 너무 어려워 보입니다.

도와주세요.

0010 000 000000011 ; R0 <= x30 which is for 
    0001 000 000 0 00 010 ; R0 <= R0 + R2 

    1111 0000 00100001 ; TRAP x21 
    1111 0000 00100101 ; TRAP x25 
    0000000000110000 
+1

10 진수 출력을 생성하는 경우 2가 아닌 10으로 나누어야합니다. LC-3의 매우 제한된 명령어 세트를 사용하면 10을 나누는 루틴이 상당히 고통 스러울 수 있습니다. 카운터는 얼마나 큰가? (예를 들어 항상 20보다 작지 않고 100보다 작습니까?) –

+1

카운터 값의 범위가 제한되지 않으면 다음 구조로 코드를 작성하는 것이 좋습니다. 16 비트 값은 5 자리 10 진수를 초과 할 수 없습니다. 이 자리를 지키기 위해 5 개의 레지스터를 따로 보관하십시오. (R3..R7라고 가정 해보십시오.) 모두 0으로 설정하십시오. 이제 : 10000을 뺍니다. 결과가> = 0이면 R3을 증가시키고 루프합니다. 그렇지 않으면 10000을 다시 추가합니다. 1000을 뺀다. 결과가> = 0이면 R4를 증가시키고 루프합니다. 그렇지 않으면 1000을 다시 추가합니다. 끝나면 결과 숫자를 하나씩 출력하고 앞에 오는 0을 건너 뜁니다. 비효율적이지만 효과적입니다. –

답변

1

number-> digit 루틴으로 인해 한 자리에서만 작동합니다. 문자 '0'에 숫자를 추가하고 분명히 문자 '11'이없는 것입니다.

제수가 숫자를 초과 할 때까지 10을 곱하여 (일반적으로 반복되는 덧셈에 의해) 최대 제수를 찾을 수 있습니다. (이전 값으로 되돌아 간다). 이렇게하면 위의 Gareth의 방법을 사용할 수 있습니다.

관련 문제