汇编の常用子程序

本文子程序都是8086环境下的。

divdw

名称:divdw

功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。

参数:(ax)=dword型数据低16位,(dx)=dword型数据的高16位,(cx)=除数。

返回:(dx)=结果的高16位,(ax)=结果的低16位,(cx)=余数。

divdw:
        push bx

        push ax
        mov ax, dx
        mov dx, 0
        div cx
        mov bx, ax
        pop ax
        div cx
        mov cx, dx
        mov dx, bx

        pop bx
        ret

dtoc

名称:dtoc

功能:将dword型数转变为表示十进制数的字符串,字符串以0为结尾符。

参数:(ax)=dword型数据的低16位,(dx)=dword型数据的高16位,ds:si指向字符串的首地址。

返回:无。

依赖:divdw

dtoc:
        push bx
        push cx
        push di

        mov di, 0
    dtoc_s:
        mov cx, 10
        call divdw
        add cx, 30h
        push cx
        inc di
        mov cx, ax
        jcxz dtoc_ok
        jmp dtoc_s
    dtoc_ok:
        mov cx, di
        mov bx, 0
    dtoc_s1:
        pop ax
        mov ds:[bx+si], al
        inc bx
        loop dtoc_s1
        mov byte ptr ds:[bx+si], 0

        pop di
        pop cx
        pop bx
        ret

show_str

名称:show_str

功能:在指定位置,用指定的颜色,显示一个用0结束的字符串

参数:(dh)=行号(取值范围0 ~ 24),(dl)=列号(取值范围0 ~ 79),(cl)=颜色,ds:si指向字符串的首地址

返回:无

show_str:
        push ax
        push es
        push bx
    
        mov ax, 0b800h
        mov es, ax
        ;计算行与列号所对应的偏移 存放在bx中
        mov ax, 0a0h
        mul dh
        mov bx, ax
        mov ax, 2
        mul dl
        add bx, ax
        mov dl, cl
        mov cx, 0
    show_str_s:
        mov cl, ds:[si]
        jcxz show_str_ok
        mov es:[bx], cl
        mov es:[bx].1, dl
        add si, 1
        add bx, 2
        jmp short show_str_s
    show_str_ok:
        pop bx
        pop es
        pop ax
        ret
posted @ 2021-02-22 05:49  1v7w  阅读(154)  评论(0编辑  收藏  举报