;==========================================================================
;文件名:exp10a.asm
;目的:完成并测试在指定的位置,用指定的颜色,显示一个用0结束的字符串的子程序
;==========================================================================
assume cs:code,ds:data
data segment
str db '^_^Welcome to masm! ^_^',0
data ends
code segment
start:
mov ax,data
mov ds,ax
mov dh,12
mov dl,30
mov cl,10001010b
mov si,0
call show_str
mov ax,4c00h
int 21h
;==============================================================
;名称:show_str
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串
;参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79),
; (cl)=颜色,ds:si指向字符串的首地址
;返回:无
;==============================================================
show_str:
push dx
push si
push di
push cx
push ax
mov ax,0b800h
mov es,ax
mov ax,160
mul dh
mov dh,0
add ax,dx
add ax,dx
sub ax,2
mov di,ax
mov ah,cl
output:
mov ch,ds:[si]
mov cl,0
jcxz ok
mov byte ptr es:[di],ch
mov byte ptr es:[di+1],ah
inc si
inc di
inc di
jmp short output
ok:
pop ax
pop cx
pop di
pop si
pop dx
ret
code ends
end start
;=================================================================
;文件名:exp10b.asm
;目的:8086下实现32位除法功能,解决16位除法溢出的问题
;=================================================================
assume cs:code,ss:stack
stack segment
dw 8 dup(0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,16
mov ax,4c40h
mov dx,0fh
mov cx,0ah
call divdw2
mov ax,4c00h
int 21h
;=================================================================================
;名称: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
code ends
end start
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!