匯編語言顯示功能實現教程詳解

問題1

在屏幕中間分別顯示綠底,綠底紅色,白底藍色的字符串“Welcome to masm!”

分析:

1 如何確定字符要顯示的位置

在80*25的彩色字符模式顯示緩沖區在內存地址的B8000H~BFFFFH共32KB的空間中

在該模式下,顯示器可以顯示25行,80列

所以在一行中就有80個字符,共占據160個字節,每個字符低位字節存儲字符的ASCII碼,高位字節存儲字符的顏色屬性

偏移0000~009F對應的就是顯示器上的第一行;

偏移0A00~13F0對應的就是顯示器上的第二行;……依次類推

確定3行字符在每一行的起始位置

因為顯示的在屏幕的中間,共需要32個字節,屏幕中一行共160個字節,所以開始字節為(160 – 32)/ 2 = 64

確定3行字符在屏幕中的哪一行

因為屏幕中一共25行,要顯示3行字符串,一行有160個字符串,則第一行的開始位置是(25 – 3)/ 2 * 160 = 6E0H

第二行的開始位置是6E0H + 160 = 780H

第三行的開始位置是780H + 160 = 820H

2 如何確定字符要顯示的顏色屬性

每個字符的顏色屬性占據一個字節,每一位表示的不同的顏色屬性,則共有256種顏色屬性

屬性字節的格式:

7        (6  5  4)    3    (2  1  0)

BL   (R G B)  I   (R G B)

閃爍    背景    高亮      前景

綠底黑色:0 010 0 000B (20H)

綠底紅色:0 010 0 100B (42H)

白底藍色:0 111 0 001B (71H)

assume cs:code,ds:data
data segment
	db 'Welcome to masm!'	
data ends
 
code segment
start:		        mov ax,data
			mov ds,ax
			mov bx,0			;ds:bx指向數據段起始位置
 
			mov ax,0B800H	
			mov es,ax			;設置顯示內存空間的起始位置
 
			mov si,64			;設置字符串在一行中的中間位置
			
			mov cx,16			;設置循環的次數為字符串的長度
 
s:			mov al,ds:[bx]		
			
			mov ah,20H			;設置第一行的開始位置和顏色
			mov es:[si+6E0H],ax
			
			mov ah,42h			;設置第二行的開始位置和顏色
			mov es:[si+780H],ax
			
			mov ah,71h			;設置第三行的開始位置和顏色
			mov es:[si+820H],ax
 
			inc bx 				;設置字符串的偏移
			add si,2			;設置下一次循環的寫入位置
 
			loop s
 
			mov ax,4c00h
			int 21h
 
code ends
end start

 問題2:

設計一個子程序,使調用者決定顯示的位置,內容和顏色

分析:

要實現的功能:在指定的位置,用指定的顏色,顯示一個用0結束的字符串

指定的參數:行號-dh(取值范圍0~24),列號-dl(取值范圍0~79),取值范圍主要是根據顯示器屏幕的大小

顏色-cl,ds:si指向字符串的首地址

assume cs:code,ds:data
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			;ds:si指向數據段首地址 
			call show_str
 			mov ax,4c00h
			int 21h 
show_str:	        mov ax,0B800H
			mov es,ax		;es指向顯示內存空間的段地址 
			mov ax,160
			dec dh
			mul dh
			mov dh,0
			dec dl
			add dl,dl
			add ax,dx
			mov di,ax		;設置di指向字符串要顯示的偏移地址
			mov ah,cl 
show:		        mov cx,ds:[si]
			jcxz ok			;設置在遇到字符0的時候退出
			mov al,ds:[si]
			mov es:[di],ax
			add di,2
			inc si
			loop show 
ok:			retf
code ends 
end start

以上就是匯編語言顯示功能實現問題實例詳解的詳細內容,更多關於匯編語言顯示功能的資料請關註WalkonNet其它相關文章!

推薦閱讀: