汇编:实验9:在屏幕中间显示彩色字符串
Posted 小杰666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编:实验9:在屏幕中间显示彩色字符串相关的知识,希望对你有一定的参考价值。
题目
在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串 welcome to masm!
。
这里的屏幕指的是,显卡文本模式下的屏幕,屏幕尺寸 80x25,可以显示彩色、高亮、闪烁的ASCII字符。
文本模式下一个字符由2个字节组成,即 ASCII+属性 = 2字节。属性字节的格式:
内存地址空间中,b8000h~bffffh 共32KB,是80x25彩色字符模式的显示缓冲区。
显示缓冲区分位8页,每页4KB,每页80x25=2000个字符,2000x2字节=4KB,共8页x4KB=32KB。
汇编程序
绿字属性字节:00000010b
绿底红色:00100100b
白底蓝色:01110001b
代码:
; 屏幕中间显示三行彩色字
; sy9.asm
assume cs:code
data segment
db 'welcome to masm!' ; 16字节
db 00000010b ; 绿字
db 00100100b ; 绿底红字
db 01110001b ; 白底蓝字
db 11,12,13,64 ; 三行的位置 (25-3)/2=11 每行开始位置 (80-16)/2*2=64
data ends
stack segment
dw 8 dup (0)
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov cx,3
row:
mov dx,cx
mov si,3
sub si,cx
mov ch,0
mov cl,19[si]
mov bp,0
col:
add bp,160
loop col
mov ah,0
mov al,ds:[22]
add bp,ax ; 每行字符起始位置
mov si,3
sub si,dx
mov ah,16[si]
mov bx,0
mov cx,16
fill:
mov al,[bx]
push ds
mov si,0b800h
mov ds,si
mov ds:[bp],ax
pop ds
inc bx
add bp,2
loop fill
mov cx,dx
loop row
mov ax,4c00h
int 21h
code ends
end start
执行结果
- 编译连接
masm sy9.asm;
link sy9.obj;
- 执行
以上是关于汇编:实验9:在屏幕中间显示彩色字符串的主要内容,如果未能解决你的问题,请参考以下文章