2014-10-30 86 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)为*(以十六进制)