在组装中打印一个三角形的字符

问题描述

我正在开发这个练习:

编写汇编程序,输入一个字符,输出一个字符本身大小为 5 x 5 的三角形。

我有一个问题,因为当我输入一个字符时,字符没有形成一个三角形,而是打印了其他字符。

我的输入:

f

我的输出

所需的输出

f
ff
fff
ffff
fffff

我的代码

Title PROVA
;programma per la prova dell’ambiente Turbo Assembler 

DOSSEG
.MODEL SMALL
.STACK 100 
.DATA 
; se ci sono qui vanno dichiarate le vriabili

.CODE
  MOV AX,@data  ;(obbligatorie) inizializzano il DS      
  MOV DS,AX 
  
  MOV AX,00
  MOV BX,00
  MOV CX,00
  MOV DX,00

  mov ah,01h ;input va a mettere l'input in AL ;n
  int 21h
  MOV BL,AL ;n
  MOV CL,BL ;n
  
  MOV CH,0H
  
  ciclo:
  CMP CH,5H
  JE fine

  inc CH

  MOV DL,BL
  mov ah,02h  ;stampa il contenuto di dl
  int 21h

  mov DL,10D
  int 21h
  mov DL,13D
  int 21h
  
  ;BL
  ADD BL,CL 
  
  JMP ciclo

  fine:
  MOV AL,00H  ;(obbligatorie) ritornano il controllo al sistema operativo      
  MOV AH,4CH 
  INT 21H 
 
END  

解决方法

正如 vitsoft 所指出的,由于您将 CL 添加到 BL,所以字符发生了变化。 正如迈克尔所说,要制作一个三角形,您需要使用另一个循环。 以下是要更改的部分:

  MOV   AH,01h  ; input va a mettere l'input in AL ;n
  INT   21H
  MOV   BL,AL   ; n
  
  MOV   CH,0H
ciclo:
  CMP   CH,5H
  JE    fine
  INC   CH
  
  MOV   DL,10D
  INT   21H
  MOV   DL,13D
  INT   21H
  
  MOV   CL,CH
  MOV   AH,02H  ; stampa il contenuto di dl
  MOV   DL,BL
innerLoop:
  INT   21H
  DEC   CL
  JNE   innerLoop

  JMP ciclo

fine: