2013-03-29 2 views
0

문제는 입력에서 소수점까지 하나의 숫자 만 반복 될 때까지 루프를 반복하려고합니다. 첫 번째 루프는 0에 도달하면 그러나, 첫 번째 숫자를 뺀 다음과 같습니다 : 1부터 다시 반복HLA 상위 레벨 어셈블리 연속 루프

Input decimal for loop: 4 
Your loop result is: 4321 321 21 1 

또는

Input decimal for loop: 6 
Your loop result is: 654321 54321 4321 321 21 1 

내가 지금 가지고있는 경우 인쇄

DoWhileLoop: 
DoWhileBody: 
    stdout.put(" I => ", I); 
    dec(I); 
DoWhileTermination: 
    cmp(I, 0); 
    jng DoWhileLoopDone; 
    jmp DoWhileLoopBody; 
DoWhileLoopDone: 

을 한 beging한다 입력 값은 4,

I => 4 I => 3 I => 2 I => 1 

중첩 된 루프를 사용하여 연속성을 얻으려고 시도했지만 내 컴퓨터를 손상시키지 않고 증가시키는 방법을 모르지만 ... 도움이 필요합니까?

+0

확실히 중첩 된 루프가 필요합니다. 외부 루프는 카운터를 감소시키고 내부 루프는 외부 카운터 값에서 하나까지 카운트하기 위해 임시 카운터를 사용해야합니다. 의사 코드 : while (co> 0) ci = co; (ci> 0)은 c1을 출력한다; c1--; 최종 출력 공간; co--; 끝내. –

+0

감사합니다. 필요한 것은 변수간에 값을 전달하고 어셈블리에서 "중첩 된"루프 구문에 익숙해지는 방법에 대한 감각이었습니다. –

답변

1

해결되었습니다. 이 값을 전송하려면 내부 루프와 두 번째 변수 (J)가 필요했습니다. 이와 같이 (더미 코드)

myWhileLoop: 
myWhileLoopTermination: 
    cmp(Y, 0); 
    jng WhileLoopDone; 
myWhileLoopBody: 

// Inner for loop goes in the body 

    innerForLoop: 
    InitializeinnerForLoop:   
    // Passing value of Y to Z 
     mov(Y, Z); 
    innerForLoopTerminationTest: 
     cmp(Z, 0); 
     jng innerForLoopDone; 
    innerForLoopBody: 
     stdout.put(Z); 
    innerForLoopDecrement: 
     dec(Z); 
     jmp innerForLoopTerminationTest; 
    innerForLoopDone: 

    dec(Y); 
    jmp myWhileLoop; 
myWhileLoopDone: