[英]How to print spaces in between within a pattern in 8086 (Assembly)?
也许这是一个已经回答的问题。 我正在尝试用心创建一个平行四边形图案,它可以工作,但很遗憾,每当我尝试在字符之间添加空格时; 他们中的大多数消失了。 我认为这是因为 CL 寄存器,或者我可能忽略了某些部分。 我尝试了不同的试验和错误来获得预期的输出。 不幸的是,我仍然是这种push-and-pop方法的初学者,所以请多多包涵。 此外,这是一个直角三角形的代码,我已经将其调整为平行四边形。
我在 DOSBOX 上使用 TASM-TLINK 模拟了这个。
下面是代码:
.MODEL TINY
.386
.DATA
.CODE
ORG 100H
BEGIN:
MOV BL,4
MOV CL,4
; * * * *
; * * * *
; * * * * ; THE EXPECTED PATTERN
; * * * *
;PUSH BX
L1:
PUSH CX
MOV AH,2
MOV DL,20H ;INCREMENT SPACES
;SPACE:
;MOV AH,02
;MOV DL,20H
;INT 21H
;LOOP SPACE
;POP CX
L2:
INT 21H
LOOP L2
MOV CL,BL
DEC CL
MOV AH,2 ; PRINT THE CHARACTERS
MOV DL,03H
INT 21H
;MOV AH,02
;MOV DL,20H
;INT 21H
L3:
INT 21H
LOOP L3
MOV AH,2 ; GENERATE NEW LINES
MOV DL,10
INT 21H
MOV DL,13
INT 21H
DEC BH ; DECREMENT BH REGISTER TO TRIM PARALLELOGRAM
;INC BH?
POP CX
;PUSH BX
LOOP L1
EXIT:
MOV AH,4CH
INT 21H
INT 20H
END BEGIN
感谢任何花时间回答这个问题的人。 所有美好的祝愿!
MOV BL,4 MOV CL,4
因为您的程序将使用依赖于CX
寄存器的全部 16 位的loop
指令,所以您应该通过mov cx, 4
进行设置,而不是依赖于从空寄存器开始的环境!
DEC BH ; DECREMENT BH REGISTER TO TRIM PARALLELOGRAM ;INC BH?
你根本不需要这个指令。 这里没有什么可修剪的! 您在BL
寄存器中设置的平行四边形的尺寸保持不变。
EXIT: MOV AH,4CH INT 21H INT 20H
mov ah, 4Ch
4Ch int 21h
DOS.TerminateWithReturncode 已经结束了你的程序。 int 20h
DOS.TerminateProgram永远不会执行,因此在这里完全没用。
您的评论表明您已经成功地重写了您的程序。 尽管如此,请在下面查看我的解决方案:
MOV AH, 02h ; DOS.PrintCharacter
MOV BX, 4 ; Dimension of the parallelogram, 2 or more
MOV CX, BX ; Leading whitespace
L1: PUSH CX ; (1)
MOV DL, ' '
L2: INT 21h
DEC CX
JNZ L2
MOV DL, 3 ; Heart
INT 21h
LEA CX, [BX-1]
L3: MOV DL, ' '
INT 21h
MOV DL, 3 ; Heart
INT 21h
DEC CX
JNZ L3
MOV DL, 10
INT 21h
MOV DL, 13
INT 21h
POP CX ; (1)
DEC CX
JNZ L1
因此,您不必稍后再学习它,避免使用loop
指令。 请参阅为什么循环指令很慢? 英特尔不能有效地实施它吗? ?
预期输出(4 个空格从第一行开始):
♥ ♥ ♥ ♥
♥ ♥ ♥ ♥
♥ ♥ ♥ ♥
♥ ♥ ♥ ♥
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.