DATA SEGMENT
arg dw 0,0;空格数,星号数
DATA ENDS
code SEGMENT
assume ds:DATA,cs:code
;开始
START:
mov ax,DATA
mov ds,ax
mov ah,1
int 21H;输入数字
sub al,30H
mov bl,al
and bl,1
cmp bl,1
jb ev
jmp odd;判断奇偶,如果奇数++
ev:
inc al
odd:
xor cx,cx
mov cl,al
mov ax,0
lp:
mov arg,ax
mov arg+2,cx
call println
inc ax
dec cx
cmp cx,0
je terminal
dec cx
jmp lp
;用loop的话当cx为1时两次dec cx不好判断,所以手动跳转实现循环
terminal:
MOV AH, 4CH
INT 21H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
print_space proc
push ax
push dx
mov ah,2
mov dl,' '
int 21h
pop dx
pop ax
ret
print_space endp;输出空格
print_star proc
push ax
push dx
mov ah,2
mov dl,'*'
int 21h
pop dx
pop ax
ret
print_star endp;输出星号
println proc
push ax
push cx
push dx
mov ah,2
mov dl,13
int 21h
mov dl,10
int 21h;换行
mov cx,arg
prs:
dec cx
cmp cx,0
jl endprs;退出循环
call print_space
jmp prs
endprs:
mov cx,arg+2
prst:
dec cx
cmp cx,0
jl endprst;退出循环
call print_star
jmp prst
endprst:
pop dx
pop cx
pop ax
ret
println endp;输出一行的子程序
code ENDS
END START
运行结果: