汇编语言-实验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
posted @ 2024-11-19 14:22  zhongta  阅读(2)  评论(0编辑  收藏  举报