王爽汇编语言(第三版)实验10 编写子程序 个人学习笔记

1. 显示字符串

名称:show_str
功能:在指定位置,用指定的颜色,显示一个用0结束的字符串。
参数:(dh)=行号(取值范围024),(dl)=列号(取值范围079),(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: push dx
		  push cx
          mov ax,0b800h
          mov es,ax
		  mov al,160
		  mul dh
		  mov bx,ax
		  mov al,2
		  mul dl
		  mov di,ax
		  mov ah,cl
		  mov ch,0
s:		  mov cl,[si]
		  jcxz ok
		  mov es:[bx+di],cl
		  mov es:[bx+di+1],ah
		  add di,2
		  inc si
		  jmp short s


ok:    pop cx
       pop dx
       ret

code ends
end start

结果展示:

王爽汇编语言(第三版)实验10 编写子程序 个人学习笔记_第1张图片

2.解决除法溢出的问题

名称:divdw
功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。
参数:(ax)= dword 型数据的低16位
(dx)= dword 型数据的高16位
(cx)= 除数
返回:(dx)= 结果的高16位,(ax)=结果的低16 位
(cx)= 余数
应用举例:计算1000000/10(F4240h/0AH)

mov ax,4240h
mov dx,000fh
mov cx,0ah
call divdw

结果:(dx)= 0001h,
(ax) = 86a0h,
(cx) = 0

代码:

assume cs:code
code segment
start: mov ax,4240h
       mov dx,000fh
	   mov cx,0ah
	   call divdw

	   mov ax,4c00h
	   int 21h

divdw: mov bx,ax
	   mov ax,dx
	   mov dx,0
	   div cx
	   mov si,ax
	   mov ax,bx
	   div cx
	   mov cx,dx
	   mov dx,si
	   ret

code ends
end start

结果展示:

王爽汇编语言(第三版)实验10 编写子程序 个人学习笔记_第2张图片

3.数值显示

名称:dtoc

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

参数:(ax)= word型数据
ds:si指向字符串的首地址

返回:无

应用举例:编程,将数据12666以十进制的形式在屏幕的8行3列,用绿色显示出来。在显示时我们调用本次实验中的第一个子程序 show_str。

代码:

assume cs:code

data segment
  db 10 dup (0)
data ends

code segment
 start:mov ax,12666
       mov bx,data
	   mov ds,bx
	   mov si,0
	   call dtoc

	   mov dh,8
	   mov dl,3
	   mov cl,2
	   call show_str
	   mov ax,4c00h
	   int 21h


dtoc:  
       mov si,8
	   mov dx,0
	   mov di,10
s:	   mov cx,ax
	   jcxz ok
	   div di
	   add dl,30h
	   mov [si],dl
	   mov dx,0
	   sub si,1
	   jmp short s
       	   
 ok:   inc si 
       ret

show_str: push dx
		  push cx
		  push si
          mov ax,0b800h
          mov es,ax
		  mov al,160
		  mul dh
		  mov bx,ax
		  mov al,2
		  mul dl
		  mov di,ax
		  mov ah,cl
		  mov ch,0
s1:		  mov cl,[si]
		  jcxz ok1
		  mov es:[bx+di],cl
		  mov es:[bx+di+1],ah
		  add di,2
		  inc si
		  jmp short s1


ok1:   pop si
       pop cx
       pop dx
       ret

code ends
end start

结果展示:

王爽汇编语言(第三版)实验10 编写子程序 个人学习笔记_第3张图片

你可能感兴趣的:(汇编笔记)