2017-12-12 16 views
0

안녕하세요, 저는 정수의 제곱을 계산하고 r0에 저장하는 lc3 어셈블리 프로그램을 작성하려고합니다. 정수는 매개 변수로 주어지며 r1에 있습니다. 디버깅이 처음이 추가 첫 번째 패스 동안이지만, 두 번째 패스는 R0에 또 다른 2를 추가하는 데 실패 - 어떤 도움이 도움이 사용자에게LC3 Assembly Square of N

  .orig x3FF8 
     ld r1,n 
    ld r5,n 

    square 
add r2,r1,#0 

    add r5,r5,#-1 
add r0,r2,#0 
brzp square 
brn theend 

    theend 


halt 
n .fill #2 

.end 

내 마지막 코드 덕분에 감사합니다 아래에있는 내 코드는 다음과 같습니다

.orig x3FF8 
    ld r1,n 
    ld r5,n 

    square 


    add r2, r2,r1 

    add r5,r5,#-1 

    brp square 


    theend 


halt 
    n .fill #4 

.end 

답변

0

LC-3 구문을 올바르게 기억하면 add r2,r1,#0r2 = r1 + 0이므로 실제로는 r2에 추가하지 않고 r1으로 덮어 씁니다.

외부에 외부에 r2을 초기화하려고합니다.

하지만 루프 내부에서 인 add r2, r2, r1r2 = r2 + r1이되어야합니다.


왜 루프 내에 add r0,r2,#0이 있는지 이해할 수 없습니다. r0의 최종 결과를 얻으려면 먼저 r0에 누적하십시오. 그 합계의 합계가되어야한다면, 당신은 같은 버그가 있습니다.

또한 add r5,r5,#-1은 루프 내에서 add r0, r0, r2 또는 루프 내에서 필요한 것이 아닌 루프 분기에 대해 조건 코드 플래그가 설정되도록 마지막으로 입력해야합니다.


또한 : theend 다음 줄에, 및 실행 자체에 다음 행으로 계속 : brn theend 완전히 쓸모가 없다. 소스에서 공백을 뛰어 넘을 필요는 없습니다!

+0

1. 오, 내가 r2에 합계의 합계가 될거라고 생각했는데,이게 너무 분명해 졌어. 내가 2 번째 기록을 덮어 쓰고 있었다고 짐작 해. – rahulchawla

+0

질문 - 결국 나는 라인 추가 r0, r2, r0에 sumofsums를 저장하는 # 0, 그러나 이것은 7fff를 제공합니다. r2에 25가있는 경우 r0을 25로 대체하면 안됩니다. – rahulchawla

+0

@rahulchawla : 'add r5, r5, # - 1' 루프 카운터 뒤에'add '하겠습니까? (원래 @ 브랜든이 목격 한). 루프 밖에서 해당 명령을 이동하면 문제가 해결됩니다. 디버거를 사용하여 코드를 단일 단계로 처리하고 레지스터를 변경합니다 (예 : 2 또는 3과 같은 작은 입력). –