assembly 在程序集中打印字符三角形

xdnvmnnf  于 2023-05-07  发布在  其他
关注(0)|答案(2)|浏览(127)

我正在开发这个练习:
写一个汇编程序,给定一个字符作为输入,输出一个字符本身大小为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
nzkunb0c

nzkunb0c1#

正如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:
vs3odd8k

vs3odd8k2#

我用这种方法解决了

org 100h
MOV AH, 2 
MOV BX, 0 

row:   
 INC BX
 MOV CX,BX 
    
    col:
    MOV DL, 102  

    int 21h
    loop col
    
MOV DL ,010 
INT 21h 
MOV DL, 13

INT 21h

CMP BL, 5
JE break

JMP row   
   
break:
 ret

ret

相关问题