在屏幕上任意位置显示字符串 基于8086汇编

assume cs:code,ds:data,ss:stack
data segment    
	db 'Welcome to masm!',0
data ends
 
stack segment    
	db 128 dup (0) 
stack ends
 
code segment
start:      
	mov ax,data ;数据段初始化    
	mov ds,ax    
	mov si,0
	mov ax,stack
	mov ss,ax
	mov sp,128    
	mov dh,12   ;显示器行位置    
	mov dl,35   ;显示器列位置          
	mov cl,2    ;字符串属性         
	call show_str
	         
	mov ax,4c00h    
	int 21h 
show_str:
	;名称:show_str
	;功能:在指定的位置,用指定的颜色,显示一个用0 结束的字符串
	;参数:(dh)=行号(取值范围0-24),(dl)=列号(取值范围0-79),
	;     (cl)=颜色,ds:si指向字符串的首地址
	;返回:无    
	push ax     ;防止寄存器冲突,子程序    
	push es     ;用到的寄存器全部入栈    
	push di     ;所谓的“保护现场 ”  
	push si    
	push dx    
	push cx 
	              
	mov ax,0B800H   ;显存初始地址    
	mov es,ax         
	mov di,0    ;行列转换显存区偏移地址    
	mov al,dh    
	mov dh,0a0h ;80个字符,160个字节    
	mul dh    
	add dl,dl   ;第三列,第六个字节    
	add al,dl    
	mov di,ax         
	mov dl,cl   ;将属性值换为dl 
	    
s:      
	mov cl,[si]    
	mov ch,0    
	jcxz ok    
	mov es:[di],cl    
	mov es:[di+1],dl    
	inc si      ;字符向后加一个    
	add di,2    ;显存向后加两个    
	loop s   
	  
ok:    
	pop cx      ;恢复现场    
	pop dx    
	pop si    
	pop di    
	pop es    
	pop ax    
	ret
	;子程序到此结束 

code ends
end start




你可能感兴趣的:(汇编语言)