汇编语言实验九

编程:在屏幕中间显示绿色字符串‘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
相关文章
相关标签/搜索