;welcome to masm
;w:119,e:101,l:108,c:99,o:111,
;闪烁绿色:10001010:8ah
;绿底红色: 00100100:24h
;白底蓝色: 00000001:1h
;低字节(偶数位存放ASCII),高字节存放属性(奇数位存放配色)
;B800:0000开始存放信息
assume cs:codesg
datasg segment
db 'welcome to masm ' ;16位存放字符
db 8 dup(8ah) ;16位存放字符对应的色彩
db 3 dup(24h)
db 5 dup(1h)
datasg ends
codesg segment
start:
mov ax,datasg ;设置待读取段
mov ds,ax
mov ax,0b800h ;设置待写入段
mov es,ax
mov di,0 ;设置读取偏移
mov si,0 ;设置写入偏移
mov ax,0 ;清空ax寄存器
mov cx,16 ;预计转移16次。
s:
mov al,[di] ;设置写入字符
mov es:[si],al
mov al,[di+16] ;设置写入颜色
mov es:[si+1],al
inc di ;读取下一个元素
add si,2 ;设置下一个写入位置
loop s
mov ax,4c00h
int 21h
codesg ends
end start
这是我的想法,可是不知道为什么。在对缓冲区写入值的时候,写入后得不到理想值。就是es:[si],al这句,很奇怪。求解救哎。
------解决思路----------------------
其它偏移是正确的话,dos 命令 cls 清屏后在运行自己的程序试试?