编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'welcome to masm!'下面是在百度文库中找的代码,但对于每行的意思和作用不是很理解,有哪位高手能够详解一下,谢谢
start: mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax ;es初始化为显示缓冲区
mov si,0
mov di,10*160+80 ;第十行中间(书上给出的资料一个屏幕共显示25行,每行80个字符即160个字节)
mov cx,16
s1: mov al,ds:[si]
mov ah,00000010B ;绿色
mov es:[di],ax
inc si
inc di
inc di
loop s1
mov si,0 ;初始化源地址寄存器,指向数据段中的源字符串
mov di,11*160+80 ;第十一行中间
mov cx,16
s2: mov al,ds:[si]
mov ah,00100100B ;绿底红色
mov es:[di],ax
inc si
inc di
inc di
loop s2
mov si,0
mov di,12*160+80 ;第十二行中间
mov cx,16
s3: mov al,ds:[si]
mov ah,01110001B ;白底蓝色
mov es:[di],ax
inc si
inc di
inc di
loop s3
mov ax,4c00h
int 21h
code ends
end start
------解决方案--------------------------------------------------------
补充说明: 楼主的程序代码不完整,我已补全.
data 是"数据"段 ,用于存放我们定义的数据,在本程序中是用于存放字符串.
mov ax,data 是把data段的段地址赋值给ax
mov ds,ax 把data段的段地址赋值给ds ,不允许直接给ds寄存器赋值,所以要借助于 ax
ds:[si] 指向的是 data 段,也就是我们定义的字符串,si的初值为0 ,所以指向第一个字符
es:[di] 指向的是显示缓冲区. 0b800:0 指向的是显示缓冲区的开始
一行有80列,也就是可以显示80个字符,每个显示位置占用两个字节,第一个字节是字符的ASCII码,第二个字节是颜色值. 第0行的偏移是 0*160,第二行的偏移是 1*160 80个字符*2字节=160字节