不知道为什么,在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