0
안녕하세요 메인 프로그램을 작성하지 를 수행 CS 클래스트랩 서브 루틴 LC3 조립
The puts TRAP routine has been disabled for some reason. Write an LC-3
subroutine called puts that
implements its behaviour. In other words when the subroutine is called
register R0 will contain the
address of a null-delimited string and the subroutine will simply print the
string and return. You will of
course need to utilize the TRAP routine out that prints a character.
에 대한 문제가있다.
그래서이 나의 접근 방식이 내가이 올바른지 또는 내 논리가PUTS:
ADD R2, R0, #0;
AND R0, R0, #0;
ADD R0, R2, #0;
Out(trapx21) ; print first char in r0;
BRp PUTS ; repeat loop
맞다면 내가 정확히 어떤 도움이하고 있어요 경우 잘 모르겠어요 잘 모르겠어요입니까?
putChar는 일반적으로 char 값을 직접 가져옵니다. 즉, 'r0'은 ASCII 값을 포함해야하지만'puts'는 char 포인터를 사용합니다. 즉,'r0'에는 메모리 주소가 포함됩니다. 따라서 포인터를 다른 레지스터에 복사하고 포인터를'r0'에로드하고 putChar를 수행하고 무한대로 반복하지 말고 string의 nul 터미네이터에 도달 할 때까지해야합니다. (LC3이나 트랩 API를 모르므로, 내 가정을 여러분의 문서와 비교해보십시오. 이것은 다른 플랫폼에서 일반적으로 어떻게 작동하는지에 대한 일반적인 조언입니다.) 현재 상태는 "15 % 완료되고 약간 꺼져 있습니다" 그러나 좋은 출발처럼 보인다. – Ped7g
이제 어쨌든 몇 가지 사항을 변경 했습니까? @ Ped7g – rahulchawla
디버거가있는 일종의 에뮬레이터/시뮬레이터가 있다면, 어셈블리를 배우고, 실험을 계속하고, 디버거에서 단일 스테핑 지시를 유지하고, 무슨 일이 일어나는지를 보는 가장 간단한 방법입니다. 위에서 쓴 것처럼 LC3에 대해서는 알지 못합니다. 편집 한 내용이 정확하지 않거나, 메모리로드 또는 포인터 업데이트 등을 닮지 않았으며, 임의 텍스트 (15 %에서 10 %로 완료되고 + 30 % 정크가 추가 된 것처럼 보임)처럼 보입니다. 추측하지 말고, 컴퓨터에서 원하는 것을 생각한 다음 쓰십시오. 그리고 디버그. – Ped7g