日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实验九 根据材料编程(改变字体颜色)

發(fā)布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实验九 根据材料编程(改变字体颜色) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

編程:在屏幕中間分別顯示 綠色、綠底紅色、白底藍色的字符串’welcome to masm!'

一個字符在屏幕上占用兩個字節(jié) 低地址存放ASCII碼,高地址存放字符的屬性
偶數(shù)地址都是存放字符的ASCII碼,奇數(shù)地址都是存放字符的顏色

編程所需要的的知識:
80*25彩色字符模式顯示緩沖區(qū)(以下簡稱為顯示緩沖區(qū))的結(jié)構(gòu):
內(nèi)存地址中,B8000H~BFFFFH共32kb的空間,為80 * 25彩色字符模式的顯示緩沖區(qū)。向這個地址空間寫入數(shù)據(jù),寫入的內(nèi)容將立即出現(xiàn)在顯示器上。

在80*25彩色字符模式下,顯示器可以顯示25行,每行80個字符,每個字符可以有256種屬性(背景色、前景色、閃爍、高亮等組合信息)

這樣,一個字符在顯示緩沖區(qū)中就要占兩個字節(jié),分別存放ASCII和屬性。80*25模式下,一屏的內(nèi)容在顯示緩沖區(qū)中共占4000個字節(jié)

顯示緩沖區(qū)分為八頁,每頁4KB(約等于4000B),顯示器可以顯示任意一頁的內(nèi)容。一般情況下,顯示第0頁的內(nèi)容。也就是說通常情況下,B8000H~B8F9FH中的4000個字節(jié)的內(nèi)容將出現(xiàn)在顯示器上。

在一頁顯示緩沖區(qū)中:
偏移000~09F對應(yīng)顯示器上的第一行(80個字符占160個字節(jié))
偏移0A0~13F對應(yīng)顯示器上的第二行
偏移140~1DF對應(yīng)顯示器上的第三行
以此類推,可知,偏移F00~F9F對應(yīng)顯示器上第25行
第1行最后一個是第158個字節(jié)(9EH)因為從零開始
第二行最后一個字符的地址是(158+160=318——》13E)

在一行中,一個字符占兩個字節(jié)的存儲空間(一個字),低位字節(jié)存儲ASCII碼,高位字節(jié)存儲字符的屬性。一行共有80個字符,占160個字節(jié)。*

處理第一行

先處理一行:

;實驗九 ;編程:在屏幕中間分別顯示 綠色、綠底紅色、白底藍色的字符串'welcome to masm!' ;數(shù)據(jù)的組織 ;數(shù)據(jù)的處理 一個字符在屏幕上占用兩個字節(jié) 低(偶數(shù))地址存放ASCII碼,高(奇數(shù))地址存放字符的屬性 assume cs:code,ds:data,ss:stack data segment; '0123456789ABCDEF'db 'welcome to masm!' ;等會用ds:[si]去訪問它;0000 0000 前四位是背景,后四位是前景db 00000010B;綠色 ; rgb rgb db 00100100B;綠底紅色 等會用ds:[bx]去訪問顏色db 01110001B;白底藍色 data endsstack segment stackdb 128 dup (0) stack endscode segment start:mov ax,datamov ds,axmov ax,stackmov ss,axmov sp,128mov bx,0B800h ;數(shù)據(jù)寫到哪里去mov es,bxmov si,0mov di,160*10+30*2 ;di設(shè)置在屏幕上的位置 這是一個偶數(shù)地址(存放ASCII)mov bx,16mov dx,0 ; 用一個十六位寄存器去保存字符(因為一個字符占用兩個字節(jié));先處理一行mov cx,16mov dh,ds:[bx] ; mov es:[di] es:[di+0],dl es:[di+1],dh showRow:mov dl,ds:[si] ;讀取字符數(shù)據(jù)mov es:[di],dxadd di,2inc siloop showRow

總共要顯示三行,總共是三種顏色,完整代碼:

總代碼

;實驗九 ;編程:在屏幕中間分別顯示 綠色、綠底紅色、白底藍色的字符串'welcome to masm!' ;數(shù)據(jù)的組織 ;數(shù)據(jù)的處理 一個字符在屏幕上占用兩個字節(jié) 低地址存放ASCII碼,高地址存放字符的屬性 assume cs:code,ds:data,ss:stack data segment; '0123456789ABCDEF'db 'welcome to masm!' ;等會用ds:[si]去訪問它;0000 0000 前四位是背景,后四位是前景db 00000010B;綠色 ; rgb rgb db 00100100B;綠底紅色 等會用ds:[bx]去訪問顏色db 01110001B;白底藍色 data endsstack segment stackdb 128 dup (0) stack endscode segment start:mov ax,datamov ds,axmov ax,stackmov ss,axmov sp,128mov bx,0B800h ;數(shù)據(jù)寫到哪里去mov es,bxmov si,0mov di,160*10+30*2 ;di設(shè)置在屏幕上的位置 這是一個偶數(shù)地址(存放ASCII)mov bx,16mov dx,0 ; 用一個十六位寄存器去保存字符(因為一個字符占用兩個字節(jié))mov cx,3;處理三行;編程習慣:按照順序來push showMasm:push bxpush cxpush sipush di;先處理一行mov cx,16mov dh,ds:[bx] ; mov es:[di] es:[di+0],dl es:[di+1],dh showRow:mov dl,ds:[si] ;讀取字符數(shù)據(jù)mov es:[di],dxadd di,2inc siloop showRowpop dipop sipop cxpop bxadd di,160//換一行inc bxloop showMasmmov ax,4c00hint 21hcode ends end start

代碼雜糅,但是容易理解的代碼

assume cs:code,ds:data,ss:stack data segment; '0123456789ABCDEF'db 'welcome to masm!' ;用ds:[si]去訪問它 data endscode segment start: ;手動設(shè)置dsmov ax,datamov ds,ax ;設(shè)置顯示緩沖區(qū),用es設(shè)置 ,向es記錄的內(nèi)存中寫入數(shù)據(jù)mov bx,0B800h ;數(shù)據(jù)寫到哪里去mov es,bx ;初始化si和di,si要指向要復(fù)制的字符,di指向目的空間;mov si,0 mov di,10*160+60;從這個地方開始顯示 ;設(shè)置循環(huán)次數(shù)mov cx,16 s1:mov al,ds:[si];設(shè)置顯示字符mov ah,00000010B;設(shè)置顯示屬性 mov es:[di],ax inc si inc diinc diloop s1 ;---------------------復(fù)制上面代碼再來一遍------------------------ ;初始化si和di,si要指向要復(fù)制的字符,di指向目的空間;mov si,0 mov di,11*160+60;從這個地方開始顯示 這里是第11行,寫成11*160+60;設(shè)置循環(huán)次數(shù)mov cx,16 s2:mov al,ds:[si];設(shè)置顯示字符mov ah,00100100B;設(shè)置顯示屬性 mov es:[di],ax inc si inc diinc diloop s2 ;---------------------復(fù)制上面代碼再來一遍------------------------ ;初始化si和di,si要指向要復(fù)制的字符,di指向目的空間;mov si,0 mov di,12*160+60;從這個地方開始顯示 這里是第12行,寫成12*160+60;設(shè)置循環(huán)次數(shù)mov cx,16 s3:mov al,ds:[si];設(shè)置顯示字符mov ah,01110001B;設(shè)置顯示屬性 mov es:[di],ax inc si inc diinc diloop s3;正常結(jié)束 mov ax,4c00hint 21h code ends end start

總結(jié)

以上是生活随笔為你收集整理的实验九 根据材料编程(改变字体颜色)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。