《彙編語言第三版》王爽老師 實驗9

王爽老師實驗9中的內容是對前面數據分配以及數據結構化的總結,通過對dosbox中B800H-BFFFH內存空間進行操作,寫入的內容可以顯現在顯示器上,下面是對實驗9題目的解答以及分析

題目信息

在屏幕中間分別顯示綠色,綠地紅色,白底藍色的字符串‘welcome to masm!’.

題目答案

assume cs:code,ds:data,ss:stack



code segment
	start:  mov ax,data
			mov ds,ax  ;數據那裏來
			
			mov ax,0b800H
			mov es,ax   ;數據到哪裏去
			mov bx,0			;數據通過bx寄存器獲取
			mov si,10H			;數據顏色通過si寄存器獲取			
			mov di,160*10+ 30*2    ;顯示數據的位置(數據到哪裏去?)
			mov dx,0            ;臨時存放數據寄存器
			
			
			
			
			mov cx,3
	showmasm:push bx     ;外層循環控制顯示行數
			push cx
			push si
			push di
			
			
			mov cx,16
	ShowRow:mov dh,ds:[si]    ;內循環控制每一行數據的存儲
			mov dl,ds:[bx]       ;
			mov es:[di],dx
			add di,2
			inc bx
			loop  ShowRow
			
			pop di
			pop si
			pop cx
			pop bx
			
			inc si
			add di,160
			loop showmasm
			
			
			
			
			mov ax,4c00H
			int 21H
			
			
		
			
	


code ends
data segment
	   ;0123456789ABCDEF
	db 'welcome to masm!'
	db 10001010B
	db 00100100B
	db 01110001B
	
data ends

stack segment 

	db 128 dup(0)
	



stack  ends
end start

題目分析

根據老師給出的提示,緩存區中偶地址存放字符,奇地址存放的是字符的顏色,而且得知了顏色屬性字節的格式:
7 6 5 4 3 2 1 0
含義:BL(R G B) I (R G B)
閃爍 背景 高亮 前景

8個字節分別代表了不同的含義,而我們需要的三種顏色可以通過格式得出: 需要哪一位就把值置位1
綠色: 0 000 1010B B代表bytes 一個字節
綠色是字體綠色,因此是前景色 我加了高亮,剩下的同理
綠底紅色: 00100100B
白底藍色:01110001B

其他邏輯我都放在註釋中了!
對內層循環進行分析:

ShowRow:mov dh,ds:[si]    ;內循環控制每一行數據的存儲
			mov dl,ds:[bx]       ;
			mov es:[di],dx
			add di,2
			inc bx
			loop  ShowRow

首先將dx寄存器分爲dl和dh兩個八位寄存器,分別存放數據以及數據的屬性,前面提到偶數位存放的是數據,奇數位存放數據的屬性,在內存中地址是低到高排放的,根據這個特點,我們把數據放在dl寄存器中,數據屬性放在dh寄存器中就可以實現偶數位存放的是數據,奇數位存放數據
.其他的就沒什麼了!

結果展示

tmgts

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章