不知道为什么,在win7下用的emu8086,显示会错位,到不了中间位置
在网上找了下别人的代码,发现即使是在别人那里能正常显示在中间位置,复制到我这里都会显示为上图所示的样子。
下面是代码,定义数据段的时候为了后面不用将ASCII码和属性分开读取,就定义成如下这样比较繁琐的形式了。(其实做的时候第一时间没想到将ASCII码和属性分开写,比如db 'welcome to masm!' db 02H,24H,71H这样)
assume cs:code
data segment
;绿色
db 'w',02H,'e',02H,'l',02H,'c',02H,'o',02H,'m',02H,'e',02H,' ',02H
db 't',02H,'o',02H,' ',02H,'m',02H,'a',02H,'s',02H,'m',02H,'!',02H
;绿地红色
db 'w',24H,'e',24H,'l',24H,'c',24H,'o',24H,'m',24H,'e',24H,' ',24H
db 't',24H,'o',24H,' ',24H,'m',24H,'a',24H,'s',24H,'m',24H,'!',24H
;白底蓝色
db 'w',71H,'e',71H,'l',71H,'c',71H,'o',71H,'m',71H,'e',71H,' ',71H
db 't',71H,'o',71H,' ',71H,'m',71H,'a',71H,'s',71H,'m',71H,'!',71H
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,0B800H
mov es,ax;找到显示缓冲区
mov bx,0
mov si,0720H;偏移地址
mov cx,16
s:
mov ax,word ptr [bx]
mov word ptr es:[si],ax;12行
mov ax,word ptr [bx+32]
mov word ptr es:[si+0a0h],ax;13行
mov ax,word ptr [bx+64]
mov word ptr es:[si+140h],ax;14行
add bx,2
add si,2
loop s
mov ax,4c00h
int 21h
code ends
end start