2014-10-30 4 views
-1

N 값을 기준으로 삼각형의 별표를 인쇄하려고합니다. 여기에있는 코드는 N *의 전체 행을 인쇄합니다. 내가 찾고 있어요 최종 결과는 다음과 같습니다어셈블리 언어 (LC-3)에서 *의 삼각형을 인쇄하십시오.

* 
** 
*** 
**** 
If N = 4 

내가 가진 코드 지금

 .ORIG x3000 

     LD R1, N 
     NOT R1, R1 
     ADD R1, R1, #1 ; R1 = -N 

     AND  R2, R2, #0 ; R2 = 0 
LOOP ADD R3, R2, R1 ; while (R2 < N) 
     BRzp  
     LD R0, STAR ; R0 = * 
     OUT    ; Write * 
     LEA R0, NEWLN ; R2 = R2 + 1 
     PUTS 
     ADD R2, R2, #1 ; 
     BRnzp LOOP 
ELOOP 
     LEA R0, NEWLN 
     PUTS 

STOP HALT   

N  .FILL 4 
STAR .FILL x2A 
NEWLN .STRINGZ "\n" 

사람이 달성 좀 도와 수 있습니까?

+0

그 코드는 당신이 원하는 것을 어떻게 할 수 있습니까? – usr2564301

+0

이 코드는 N *을 한 줄로 출력합니다. –

+0

그러면 'NEWLN'에 대한 호출이 작동하지 않거나 틀린 시간에 호출 될 가능성이 있습니까? 디버거를 사용하여 코드를 단계별로 실행 했습니까? – usr2564301

답변

-1
;; Author: Chris Wickell 


.ORIG x3000 

    LD R1, N 
    NOT R1, R1 
    ADD R1, R1, #1 ; R1 = -N 

    AND  R2, R2, #0 ; R2 = holds number of *'s to be printed 

    LOOP LEA R0, NEWLN 

    PUTS  

    ADD R3, R2, R1 ; while (R2 < N) 

    BRzp ELOOP 

    ADD R5, R5, #1 ; 

    ADD R4, R4, #1 

    FLOOP LD R0, STAR ; R0 = * 

    OUT    ; Write * 
    ADD R5, R5, #-1 

    BRp FLOOP 

    ADD R5, R4, #0 

    ADD R2, R2, #1 ; 

    BRnzp LOOP 
    ELOOP 
    LEA R0, NEWLN 

    PUTS 

    STOP HALT   

N  .FILL 6 

STAR .FILL x2A 

NEWLN .STRINGZ "\n" 
-2

make_COM

; COM 파일은 CS에서로드 : 0100H ORG의 100H

MOV AH, 0EH CALL의 A4 CALL A3 CALL의 A2 CALL의 A1 JMP STOP

A4 : MOV AL, 41H

INT 10H 

A3 : MOV AL, 41H INT의 10H A2 : MOV AL, 41H INT의 10H A1 : MOV AL, 41H INT의 10H MOV AL, 0DH INT의 10H MOV AL, 0AH INT 10H RET STOP : .EXIT

-1

make_COM

; COM 파일은 CS에서로드 : 0100H ORG의 100H

MOV AH, 0EH CALL의 A4 CALL A3 CALL의 A2 CALL의 A1 JMP STOP

A4 : MOV AL, 41H

INT 10H 

A3 : MOV AL, 41H INT 10H A2 : MOV AL, 41H INT 10H A1 : MOV AL, 41H MOV AL, 0DH INT의 10H MOV AL, 0AH INT 10H RET STOP INT의 10H : .EXIT

; 단지 변경 41H (A) 내지 (* 16 진수)