在 MASM x86(16 位)上打印多个三角形

Printing multiple triangles on MASM x86 (16 bit)

所以我试图在 MASM x86 (8086) 中编写一个程序,它将打印出一系列由星号“”构成的直角三角形。我正在使用循环打印出三角形。我正在尝试使每个三角形的高度为 3 到 9 个星号,横跨的数量相同,但配置不同。我让它只打印一个三角形。打印完我的第一个三角形后,它只是无限期地循环星号“”。这是我的一些代码:

 mov ah, 09h ;prints string
  mov dx, offset input
  int 21h

  mov ah, 01h ;reads in character
  int 21h

  sub al, '0' ;is gunna read into lower half by default
  mov ah, 0 ;blanking higher half of register so that way it doesnt throw off program
  mov size, ax
  mov cx, ax 
  mov bx, cx 
  push bx

  mov ah, 02h
  mov dl, 13
  int 21h  
  mov dl, 10
  int 21h


 lines:
    push cx 

  stars:
   mov ah, 02h
   mov dl, '*'
   int 21h


  loop stars 

  mov ah, 02h
  mov dl, 13
  int 21h  
  mov dl, 10
  int 21h

  pop cx 

  loop lines

  mov bx, size 

  mov ax, 4c00h
  int 21h

我想我必须创建另一个寄存器来保存变量并可能创建另一个循环。
我的问题是,我必须将用户输入传递到另一个寄存器吗?如果是这样,我怎么能通过呢?

您已经将用户输入放入 SIZE 变量中,所以没问题。
绘制第一个三角形后,将此变量放回 CX 寄存器,稍作更改(或多或少)并重复三角形的代码:

; First user defined triangle

    mov ah, 02h
    mov dl, 13
    int 21h  
    mov dl, 10
    int 21h
lines:
    push cx 
stars:
    mov ah, 02h
    mov dl, '*'
    int 21h
    loop stars 
    mov ah, 02h
    mov dl, 13
    int 21h  
    mov dl, 10
    int 21h
    pop cx 
    loop lines

; Take back the size and change it a bit

    mov cx, size
    add cx, 5

; Second bigger triangle

    mov ah, 02h
    mov dl, 13
    int 21h  
    mov dl, 10
    int 21h
lines:
    push cx 
stars:
    mov ah, 02h
    mov dl, '*'
    int 21h
    loop stars 
    mov ah, 02h
    mov dl, 13
    int 21h  
    mov dl, 10
    int 21h
    pop cx 
    loop lines