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

时间:2021-12-06 22:12:43
 
assume cs:code,ds:data,ss:stackdata segment    	db 'Welcome to masm!',0data ends stack segment    	db 128 dup (0) stack ends code segmentstart:      	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 endsend start