80X86CPU显存存放在B800H:0000-B800H:(160D*25D×2D)即B800H:1F40H之间
遵循着偶数位为 ASCII码 奇数位为 颜色代码的规律 即每两个字节为一个像素
X轴按数学原则(0-159)Y轴与数学原则相反(0-24)
其中 颜色码又遵循 前四位为底色 后四位为字体色 且都是以ARGB的规律排列 (0000 0000B)
以下指令的作用是把welcome to masm!显示至DOS窗口的中间共25行
DATAS SEGMENT
String db 'welcome to masm!'
db 00000010B
db 00100100B
db 01110001B
db 00000010B
db 00100100B
db 01110001B
db 00000010B
db 00100100B
db 01110001B
db 00000010B
db 00100100B
db 01110001B
db 00000010B
db 00100100B
db 01110001B
db 00000010B
db 00100100B
db 01110001B
db 00000010B
db 00100100B
db 01110001B
db 00000010B
db 00100100B
db 01110001B
DATAS ENDS
STACKS SEGMENT
DB 128 DUP(0)
STACKS ENDS
;功能:把welcome to masm!用三种不同的颜色显示到二十四行中
;注:dos窗的分辨率为160*25
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV SP,128
MOV CX,24
MOV DX,0
copyStringOut:
MOV AX,CX
MOV BX,24
SUB BX,AX
MOV SI,BX
PUSH CX
PUSH DX
MOV CX,16
MOV AX,0B800H
MOV ES,AX
MOV AX,0
MOV BX,160*0+64
ADD BX,DX
copyStringIn:
MOV DI,AX
MOV DL,DS:[DI]
ADD DI,DI
MOV ES:[BX+DI],DL
MOV DL,DS:[16+SI]
MOV ES:[BX+DI+1],DL
INC AX
loop copyStringIn
POP DX
POP CX
ADD DX,160
LOOP copyStringOut
MOV AH,4CH
INT 21H
CODES ENDS
END START