编程:在屏幕中间分别显示绿色,绿色红底,白底蓝色的字符串 'welcome to masm!'.
assume cs:code,ds:data,ss:stack data segment db 'welcome to masm!' db 00000010b,00100100b,01110001b #分别代表绿色、绿色红底、白底蓝色 data ends stack segment dw 0,0,0,0,0,0,0,0 #定义一个栈段,来用于临时储存值 stack ends code segment start: mov ax,data mov ds,ax mov ax,0b800h #在汇编源程序中,数据不能以字母开头! mov es,ax mov ax,stack mov ss,ax mov sp,16 mov bx,0a0h #好像我的电脑,如果在0处写入第一行数据,那么最后的话第一行会被吃掉,因此在内存第二行开始处写入 mov di,16 #用于表示表示颜色属性字节数据的偏移地址 mov cx,3 #循环三次,分别向每行中写入数据 s: push cx push bx #保存此时要写入内存的首地址,方便后面跳行 mov si,0 mov dl,ds:[di] #获取data段内表示字符属性的字节 mov cx,16 s1: mov al,ds:[si] #在data段中取出每个字母 mov es:[bx],al #向指定内存中写入字母 mov es:[bx+1],dl #写入属性 add bx,2 inc si loop s1 pop bx add bx,0a0h #跳行 inc di #跳到下一个属性 pop cx loop s mov ax,4c00h int 21h code ends end start
运行结果如下:
注意哦!在用debug跟踪调试的时候,显示缓冲区的那段内存中的数据是不会和我们写入数据相同,可能因为要显示数据,所有比较特别,所以,在跟踪调试之前,一定要先运行程序!!!