实验10 编写子程序 3.数值显示

assume cs:code,ds:data

data segment
        db 10 dup (0) ;用来存放转换好的字符或数字
data ends

code segment
start:  mov ax,12666

        mov bx,data ;ds:si指向字符串的首地址,首地址为0
        mov ds,bx
        mov si,0

        call dtoc ;dtoc子程序现将word型整数转化为ASCII码字符串并存储

        mov dh,8 ;初始化打印的位置
        mov dl,3
        mov cl,0cah

        call show_str ;开始打印字符串

        mov ax,4c00h
        int 21h

;数值显示的子程序定义
dtoc:   push dx
        push cx
        push ax
        push si
        push bx

        mov bx,0 ;bx在子程序中用来存放位数,用栈来临时存放修改后的字符

s1:     mov cx,10d ;d表示十进制,cx做被除数
        mov dx,0 ;dx存放余数

        div cx
        mov cx,ax

        jcxz s2

        add dx,30h
        push dx

        inc bx

        jmp short s1

s2:     add dx,30h
        push dx

        inc bx

        mov cx,bx
        mov si,0

s3:     pop ax

        mov [si],al
        inc si

        loop s3

okay:   pop bx
        pop si
        pop ax
        pop cx
        pop dx

        ret

show_str:
        push bx
        push cx
        push si

        mov al,0a0h
        dec dh
        mul dh

        mov bx,ax
        mov al,2
        mul dl

        sub ax,2
        add bx,ax

        mov ax,0b800h
        mov es,ax

        mov di,0
        mov al,cl
        mov ch,0

s:      mov cl,ds:[si]

        jcxz ok

        mov es:[bx+di],cl
        mov es:[bx+di+1],al

        inc si
        add di,2

        jmp short s

ok:     pop si
        pop ax
        pop bx
        
        ret

code ends
end start

视频讲解

转载于:https://www.cnblogs.com/houhaibushihai/p/9746759.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值