1
我应该在8086汇编中进行此练习
*
***
*****
*******
*********
但是作为输出,我只得到第一个星号。问题出在哪里?
他们告诉我使用弹出和推入,但没有研究它们,我不知道该怎么做。我希望有人能给我有效的帮助来解决此代码。我也在做dosbox上的代码,这是我的代码:
.MODEL SMALL
.STACK
.DATA
nl db 0dh,0ah, '$'
. CODE
mov ax,@data
mov ds,ax
mov cx,5
mov bx,1
for1:
push cx
mov dl,20h
mov ah,2
for2:
int 21h
loop for2
mov cx,bx
mov dl,'*'
mov ah,2
for3:
int 21h
loop for3
lea dx,nl
mov ah,9
int 21h
inc bx
inc dx
inc cx
loop for1
mov ah,4ch
int 21h
END
这是我们与TASM合作开发的一个学校问题,我们尚未研究复杂的指令,仅研究了我编写的代码中使用的那些指令。 有人可以纠正吗?
答案 0 :(得分:0)
问题出在哪里?
您通过多种方式使用@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private int id;
@Column(name = "NAME", nullable = false, unique = true)
private String name;
注册错误。
查看所需的金字塔,您会发现:
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