我正在尝试显示:
A123*B123*C123*
在 DOSBox 中使用
loop
但我得到的是:
A1*2*3*B*1*2*3*C*1*2*3*D
这是我当前的代码:
.model small
.stack
.data
.code
main proc
mov cx,3
mov ah, 2
mov dl, 'A'
Letter: int 21h
push cx
push dx
mov cx, 3
mov ah, 2
mov dl, '1'
Number: int 21h
push cx
push dx
mov ah, 2
mov cx, 1
mov dl, '*'
Aste: int 21h
Loop Aste
pop dx
pop cx
add dl,1
Loop Number
pop dx
pop cx
add dl, 1
Loop Letter
int 21h
mov ah,4ch
int 21h
main endp
end main
我尝试切换运行循环的方式,但每当我将循环“aste”放在末尾时,它都会不间断地打印“*”。
push cx push dx mov ah, 2 mov cx, 1 mov dl, '*' Aste: int 21h Loop Aste pop dx pop cx
如果您需要输出的只是单个字符,为什么要创建循环?它还让你写下这些烦人的
push
和pop
。
该任务需要使用两个循环。我们将这些称为“嵌套循环”,因为“内循环”将嵌入“外循环”中。
123
mov dl, '1' ;
InnerLoop: ;
mov ah, 02h ;
int 21h ;
inc dl ;
cmp dl, '4' ;
jb InnerLoop ;
*
mov dl, '1'
InnerLoop:
mov ah, 02h
int 21h
inc dl
cmp dl, '4'
jb InnerLoop
mov dl, '*' ;
mov ah, 02h ;
int 21h ;
A
,我们从可用寄存器(如 BL)中检索该字符 mov dl, bl ; BL is one of 'A', 'B', or 'C'
mov ah, 02h ;
int 21h ;
mov dl, '1'
InnerLoop:
mov ah, 02h
int 21h
inc dl
cmp dl, '4'
jb InnerLoop
mov dl, '*'
mov ah, 02h
int 21h
A
mov bl, 'A' ;
OuterLoop: ;
mov dl, bl
mov ah, 02h
int 21h
mov dl, '1'
InnerLoop:
mov ah, 02h
int 21h
inc dl
cmp dl, '4'
jb InnerLoop
mov dl, '*'
mov ah, 02h
int 21h
B
和 C
mov bl, 'A'
OuterLoop:
mov dl, bl
mov ah, 02h
int 21h
mov dl, '1'
InnerLoop:
mov ah, 02h
int 21h
inc dl
cmp dl, '4'
jb InnerLoop
mov dl, '*'
mov ah, 02h
int 21h
inc bl ;
cmp bl, 'D' ;
jb OuterLoop ;
A123*B123*C123*