匯編語(yǔ)言顯示功能實(shí)現(xiàn)教程詳解
問(wèn)題1
在屏幕中間分別顯示綠底,綠底紅色,白底藍(lán)色的字符串“Welcome to masm!”
分析:
1 如何確定字符要顯示的位置
在80*25的彩色字符模式顯示緩沖區(qū)在內(nèi)存地址的B8000H~BFFFFH共32KB的空間中
在該模式下,顯示器可以顯示25行,80列
所以在一行中就有80個(gè)字符,共占據(jù)160個(gè)字節(jié),每個(gè)字符低位字節(jié)存儲(chǔ)字符的ASCII碼,高位字節(jié)存儲(chǔ)字符的顏色屬性
偏移0000~009F對(duì)應(yīng)的就是顯示器上的第一行;
偏移0A00~13F0對(duì)應(yīng)的就是顯示器上的第二行;......依次類(lèi)推
確定3行字符在每一行的起始位置
因?yàn)轱@示的在屏幕的中間,共需要32個(gè)字節(jié),屏幕中一行共160個(gè)字節(jié),所以開(kāi)始字節(jié)為(160 - 32)/ 2 = 64
確定3行字符在屏幕中的哪一行
因?yàn)槠聊恢幸还?5行,要顯示3行字符串,一行有160個(gè)字符串,則第一行的開(kāi)始位置是(25 - 3)/ 2 * 160 = 6E0H
第二行的開(kāi)始位置是6E0H + 160 = 780H
第三行的開(kāi)始位置是780H + 160 = 820H
2 如何確定字符要顯示的顏色屬性
每個(gè)字符的顏色屬性占據(jù)一個(gè)字節(jié),每一位表示的不同的顏色屬性,則共有256種顏色屬性
屬性字節(jié)的格式:
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)
白底藍(lán)色: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指向數(shù)據(jù)段起始位置 mov ax,0B800H mov es,ax ;設(shè)置顯示內(nèi)存空間的起始位置 mov si,64 ;設(shè)置字符串在一行中的中間位置 mov cx,16 ;設(shè)置循環(huán)的次數(shù)為字符串的長(zhǎng)度 s: mov al,ds:[bx] mov ah,20H ;設(shè)置第一行的開(kāi)始位置和顏色 mov es:[si+6E0H],ax mov ah,42h ;設(shè)置第二行的開(kāi)始位置和顏色 mov es:[si+780H],ax mov ah,71h ;設(shè)置第三行的開(kāi)始位置和顏色 mov es:[si+820H],ax inc bx ;設(shè)置字符串的偏移 add si,2 ;設(shè)置下一次循環(huán)的寫(xiě)入位置 loop s mov ax,4c00h int 21h code ends end start
問(wèn)題2:
設(shè)計(jì)一個(gè)子程序,使調(diào)用者決定顯示的位置,內(nèi)容和顏色
分析:
要實(shí)現(xiàn)的功能:在指定的位置,用指定的顏色,顯示一個(gè)用0結(jié)束的字符串
指定的參數(shù):行號(hào)-dh(取值范圍0~24),列號(hào)-dl(取值范圍0~79),取值范圍主要是根據(jù)顯示器屏幕的大小
顏色-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指向數(shù)據(jù)段首地址 call show_str mov ax,4c00h int 21h show_str: mov ax,0B800H mov es,ax ;es指向顯示內(nèi)存空間的段地址 mov ax,160 dec dh mul dh mov dh,0 dec dl add dl,dl add ax,dx mov di,ax ;設(shè)置di指向字符串要顯示的偏移地址 mov ah,cl show: mov cx,ds:[si] jcxz ok ;設(shè)置在遇到字符0的時(shí)候退出 mov al,ds:[si] mov es:[di],ax add di,2 inc si loop show ok: retf code ends end start
以上就是匯編語(yǔ)言顯示功能實(shí)現(xiàn)問(wèn)題實(shí)例詳解的詳細(xì)內(nèi)容,更多關(guān)于匯編語(yǔ)言顯示功能的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
匯編實(shí)現(xiàn)簡(jiǎn)單選擇排序的方法示例
這篇文章主要介紹了匯編實(shí)現(xiàn)簡(jiǎn)單選擇排序的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02匯編中的數(shù)組分配和指針的實(shí)現(xiàn)代碼
這篇文章主要介紹了匯編中的數(shù)組分配和指針的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01匯編語(yǔ)言功能字符串大小寫(xiě)轉(zhuǎn)換實(shí)現(xiàn)實(shí)例詳解
這篇文章主要為大家介紹了匯編語(yǔ)言功能大小寫(xiě)轉(zhuǎn)換實(shí)現(xiàn)的實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11使用匯編語(yǔ)言編寫(xiě)一條簡(jiǎn)單的貪吃蛇的實(shí)現(xiàn)
這篇文章主要介紹了使用匯編語(yǔ)言編寫(xiě)一條簡(jiǎn)單的貪吃蛇的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01