您好,登錄后才能下訂單哦!
本篇內容主要講解“匯編語言顯示功能實現方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“匯編語言顯示功能實現方法是什么”吧!
在屏幕中間分別顯示綠底,綠底紅色,白底藍色的字符串“Welcome to masm!”
分析:
在80*25的彩色字符模式顯示緩沖區在內存地址的B8000H~BFFFFH共32KB的空間中
在該模式下,顯示器可以顯示25行,80列
所以在一行中就有80個字符,共占據160個字節,每個字符低位字節存儲字符的ASCII碼,高位字節存儲字符的顏色屬性
偏移0000~009F對應的就是顯示器上的第一行;
偏移0A00~13F0對應的就是顯示器上的第二行;......依次類推
因為顯示的在屏幕的中間,共需要32個字節,屏幕中一行共160個字節,所以開始字節為(160 - 32)/ 2 = 64
因為屏幕中一共25行,要顯示3行字符串,一行有160個字符串,則第一行的開始位置是(25 - 3)/ 2 * 160 = 6E0H
第二行的開始位置是6E0H + 160 = 780H
第三行的開始位置是780H + 160 = 820H
每個字符的顏色屬性占據一個字節,每一位表示的不同的顏色屬性,則共有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
設計一個子程序,使調用者決定顯示的位置,內容和顏色
要實現的功能:在指定的位置,用指定的顏色,顯示一個用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
到此,相信大家對“匯編語言顯示功能實現方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。