编程:在屏幕中间显示绿色字符串‘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