в чем проблема?
Вы неправильно используете регистр CX
.
Глядя на нужную пирамиду, вы обнаружите:
* 5 leading spaces and 1 asterisk
*** 4 leading spaces and 3 asterisks
***** 3 leading spaces and 5 asterisks
******* 2 leading spaces and 7 asterisks
********* 1 leading space and 9 asterisks
То, что ваш код уже пытается сделать, - это вести счет числа звездочек в регистре BX
.После того, как вы исправите опечатку inc dx
и измените ее на inc bx
, все будет в порядке.
Когда дело доходит до контроля количества начальных пробелов, ваш выбор для регистра CX
усложняет задачу.отметьте, что ваша программа застревает.
Вы должны выбрать дополнительный регистр для этой цели.Я предлагаю выбрать BP
.
mov bp, 5 ; first line has 5 spaces
mov bx, 1 ; first line has 1 asterisk
next:
mov cx, bp ; current number of spaces
spaces:
mov dl, " "
mov ah, 02h
int 21h
loop spaces
mov cx, bx ; current number of asterisks
asterisks:
mov dl, "*"
mov ah, 02h
int 21h
loop asterisks
lea dx, nl
mov ah, 09h
int 21h
add bx, 2 ; 2 asterisks more each line
dec bp ; 1 space less each line
jnz next ; until no more leading space needed
Если по какой-то причине вы не хотите, чтобы нижняя строка начиналась с одного пробела, следующая версия делает именно это:
mov bp, 4 ; first line has 4 spaces
mov bx, 1 ; first line has 1 asterisk
next:
mov cx, bp ; current number of spaces
jcxz NoSpaces
spaces:
mov dl, " "
mov ah, 02h
int 21h
loop spaces
NoSpaces:
...
add bx, 2 ; 2 asterisks more each line
dec bp ; 1 space less each line
jns next ; until no more leading space needed