DATAS SEGMENT
db 'welcome to masm!'
db 01111010B ;绿色 0016H
db 00100100B ;绿底红字 0017H
db 01110001B ;白底蓝色 0018H
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;11 30-46 B8000H 06E0-077F
;12 30-46 0780-0F9F
;13 30-46 0FA0-103F
mov ax,0B800H
mov es,ax
mov cx,3
mov si,06E0H
mov bp,0010H ;属性在ds偏移地址
s0: ;第一层3个循环代表3行
push cx
mov cx,16
mov di,0
add si,64
s1: ;第二层16个循环加入每个字符以及属性
mov ax,ds:[di]
mov es:[si],ax ;加入字符
mov ax,ds:[bp]
mov es:[si+1],ax ;加入属性
add di,1
add si,2
loop s1
add bp,1
add si,64
pop cx
loop s0
MOV AH,4CH
INT 21H
CODES ENDS
END START
一看我代码可能大家都知道我是个学C的老手了我不打喜欢汇编的风格...所以循环都差不多安照C来写
怎么会在显示后前两行多了两个小字符呢?
还有几乎没法做到白底.因为RGB=000的时候是黑色的
RGB=111的时候是灰色的
至于代码个人感觉还可以.
请各位指点 |