編程:在屏幕中間顯示綠色字符串‘welcome to masm!’編程
分析:oop
在內存地址空間中,B8000H ~ BFFFFH(共32KB)的空間,爲 86x25 彩色字符模式的顯示緩衝區。spa
向這段地址空間寫入的數據內容,將當即出如今顯示器上。code
在 86x25 彩色字符模式下,顯示器能夠顯示 25 行。每行能顯示 80 個字符。blog
不一樣於其它內存空間的數據,在顯存地址空間中,一個字符信息須要 2 個字節長度來存放。由於在顯存中的一個字符信息,不只包括字符自己,還有字符的前景色、背景色、閃爍、高亮等組合信息,這些信息須要 8 bit 空間來存儲。內存
因此擁有 32KB 容量的顯示緩衝區,一共能存放 16 × 1024 個字符。字符串
綜上:顯示器一個屏幕整 = 2000 個字符顯示 = 顯示緩衝器 4000 個字節 = 顯示緩衝區 1 頁的字節數it
即顯示緩衝區分爲 8 頁,可是一般狀況下,顯示第 0 頁的內容,即 B8000H ~ B8F9FH 這段內存地址空間將出如今顯示器上。asm
在顯示緩衝區中,偶地址存放字符,基地址存放字符的顏色屬性。class
代碼:
# 分析: # 仔細閱讀編程要求,咱們不難發現,它無非是要求咱們:在屏幕上顯示字符串,具體涉及兩點: # 1)在什麼位置顯示 # 2)顯示的字符串的屬性是什麼 # # # 實現: # 首先,咱們根據材料找到屏幕中間的位置是:段地址:B800h 偏移地址:160*12+30*2 , 以及綠色的屬性字節:02h、24h、71h # # 而後咱們先注意兩點: # 1)對屏幕操做,其實是對顯存緩衝區進行操做,與前面對內存的操做的同樣的,要顯示字符,咱們只要往顯存中寫入字符數據就能夠了 # 2)在顯存緩衝區中,偶地址存放字符,奇地址存放顏色屬性 # # 7 6 5 4 3 2 1 0 # BL R G B I R G B # 高亮 前景色 閃爍 背景色 # # 顯示 welcome to masm! # 本來 16 字節, 可是因爲要顯示在顯示上, 因此須要 32 字節來存儲 assume cs:code,ds:data data segment db 'welcome to masm!' data ends code segment start: mov ax,data mov ds,ax mov si,0 mov ax,0b800h ; 彙編語言中數據不能以字母開頭 mov es,ax mov di,160*12+30*2 ; 在顯示緩衝區第一頁, 第一個字符的偏移單元(字節)數 mov cx,16 next: mov al,[si] mov es:[di],al ; 先向目的地址的低字節空間移動字符自己, 以 al 寄存器作中轉 mov byte ptr es:[di+1],02h ; 再向目的地址的高字節空間移動字符的顯示屬性 inc si add di,2 loop next mov ah,4ch int 21h code ends end start