实验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

视频讲解

猜你喜欢

转载自www.cnblogs.com/doctorx/p/9746759.html