汇编の常用子程序
本文子程序都是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
不忘初心方得始终