2014-10-30 432 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 2014-10-30 23:55:45

+0

此處的代碼將在單行中打印N * – 2014-10-31 00:00:36

+0

因此,您對'NEWLN'的調用不起作用,或者可能在錯誤的時間調用?你是否使用調試器完成代​​碼? – usr2564301 2014-10-31 00:04:37

回答

-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 INT 10H MOV AL,0DH INT 10H MOV AL,0AH INT 10H RET STOP: .EXIT

;只是改變41H(A)爲*(以十六進制)