【汇编】输出字符三角形

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

运行结果:

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值