我有一个汇编语言循环的问题。嵌套在x86程序集的另一个循环中的两个循环
当我们想要使用计数器寄存器循环嵌套循环时,我们首先做的是将计数器寄存器的值移入外部循环的栈中,然后在我们完成内部循环时取回它,这样我们就可以使用一个计数器寄存器在每个循环中循环迭代次数不同的嵌套循环。
但是,嵌套循环内嵌套循环呢?
我想打印由字符S
组成的金字塔。我所得到的是,
SSSSSSSSSS
SSSSSSSSS
SSSSSSSS
SSSSSSS
SSSSSS
SSSSS
SSSS
SSS
SS
S
我真正想要的是,
SSSSSSSSSS
SSSSSSSS
SSSSSS
SSSS
SS
S
这里是我的节目
MOV BX,10 ; HOLD 10 IN BX FOR INNER LOOP
MOV AX,0 ; START ITERATIONS FROM 0
MOV CX,10 ; MAX NUMBER OF ITERATIONS
L2:
PUSH CX ;PUSH CX IN A STACK
MOV CX,BX ;STORE NEW VALUE IN CX FOR INNER LOOP ITERATION
L1:
MOV DX, [SI] ; MOVE THE STRING INTO DX
MOV AH,02H ; DISPLAY EVERYTHING FROM DX
INT 21H
LOOP L1
MOV DX,0AH ;PRINT LINE FEED AFTER PRINTING EACH LINE OF ASTERIKS
MOV AH,02H
INT 21H
SUB BX,01 ;DECREASE THE VALUE OF BX BY 1
POP CX ;RESTORE ORIGINAL VALUE OF CX FOR OUTER LOOP
ADD AX,01 ;INCREMENT VALUE OF AX BY 1
LOOP L2
MOV AH, 4CH ;RETURN CONTROL TO DOS
INT 21H
为了达到我想要的,我需要的代码在嵌套循环内添加另一个循环,打印空间字符(即020H)。但为此我需要另一个计数器寄存器,我无法做到这一点。我怎么解决这个问题?
@JohnB请注意,[作业标签现在正在逐步淘汰,不能再使用](http://meta.stackexchange.com/q/147100)。 – Gilles