编程:在屏幕中间分别显示绿色,绿色红底,白底蓝色的字符串 '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跟踪调试的时候,显示缓冲区的那段内存中的数据是不会和我们写入数据相同,可能因为要显示数据,所有比较特别,所以,在跟踪调试之前,一定要先运行程序!!!
来源:oschina
链接:https://my.oschina.net/u/4375161/blog/4281336