汇编语言-实验10编写子程序
名称:show_str
功能,在指定的位置,用指定的颜色,显示一个用0结束的字符串。
参数:(dh)行号。(dl)列号,(cl)颜色 ds:si指向字符串首地址
返回无
应用举例:8行3列,用绿色显示data中的字符串
代码如下:
assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
start:mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str:
mov ax,0b800h
mov es,ax
mov al,dl
mov bl,160
mul bl
mov bx,ax;
mov ch,0;
add bx,cx;
mov dl,cl
s:
mov al,ds:[si]
mov ah,dl;
mov es:[bx],ax
inc si
inc bx
inc bx
mov al,ds:[si]
mov ah,0
mov cx,ax
jcxz ok
loop s
ok:ret
code ends
end start
2.divdw
功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。
参数:(ax)=dword型数据的低16位
(bx)=dword型数据的高16位
(cx)除数
提示:给出一个公式
X:被除数,范围:[0,FFFFFFFF]
N:除数,范围[0,FFFF]
H:X高16位,范围:[0,FFFF]
L:X低16位,范围:[0,FFFF]
int()描述性运算符,取商,比如,int(38/10)=3
rem():描述性运算符,取余数,比如,rem(38/10)=8
公式:X/N=int(H/N)65536+[rem(H/N)65536+L]/N
assume cs:code
code segment
mov ax,4240h
mov dx,0fh
mov cx,0ah
call divdw
mov ax,4c00h
int 21h
divdw: push ax
mov ax,dx
mov dx,0 ;被除数的高16位先除,所以将dx置零的原因所在
div cx ;结果低16位ax存放商,高16位dx存放余数
mov bx,ax ;商的高16位放入bx保存,因为题目要求高16位放在dx
pop ax ;恢复低16位的被除数,
div cx ;结果低16位ax存放商,高16位DX存放余数
mov cx,dx ;第一次除的结果放在dx中,第二次除默认是放在ax中
mov dx,bx ;余数存放在cx
ret
code ends
end